Résolu Faire un tirage au sort

Statut
N'est pas ouverte pour d'autres réponses.

Florian.

Premium
Inscription
8 Août 2012
Messages
4 251
Réactions
1 220
Points
14 353
RGCoins
25
Hello,

avec l'aide de @Axx67 il ma fait un pti tirage au sort, mais le problème c'est qu'il est impossible de mettre ma DB (les pseudo & les points)

Voici le code
Le probleme ?
c'est que sa affiche que le dernier donc il est obliger de gagner :bzr:
PHP:
<?php
require_once 'includes/db.php';
require_once 'includes/init.php';
?>
La y'a tout mes conneries de HTML
<?php
$listMembers = array();
foreach($odb->query("SELECT * FROM `users`") as $u)


  // On multiplie les chances d'apparaitre dans le tableau en fonction des points
  switch($u['points']){
  case 5:
  $multiplier = 1;
  break;
  case 10:
  $multiplier = 2;
  break;
  case 20:
  $multiplier = 3;
  break;
  case 30:
  $multiplier = 4;
  break;
  case 40:
  $multiplier = 5;
  break;
  }

  for($i=0; $i < $multiplier; $i++){
  $listMembers[] = $u['username'];
  }



// si on veut melanger le tableau, il faut décommenter la ligne ci-dessous
//shuffle($listMembers);

print '<pre>';
print_r($listMembers);
print '</pre>';

// selectionne une valeur au hasard dans le tableau
$gagnant = array_rand($listMembers);

echo '<p>Le membre gagnant est <b>'.$listMembers[$gagnant].'</b></p>';

 ?>
 
Contenu du fichier db.php ?
Et init.php tant qu'à faire..
DB y'a les log de la DB hote mdp ect et init

DB
PHP:
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'x');
define('DB_USERNAME', 'x');
define('DB_PASSWORD', 'x');

$odb = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);

?>
Init.php
PHP:
<?php
define('DIRECT', TRUE);
function getRealIpAddr()
{
    if(!empty($_SERVER['HTTP_CF_CONNECTING_IP']))
    {
        $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } elseif (!empty($_SERVER['HTTP_CLIENT_IP']))
    {
        $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
        $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
$_SERVER['REMOTE_ADDR'] = getRealIpAddr();
require 'functions.php';
$user = new user;
$stats = new stats;
$title_prefix = "Le titre | ";
?>
et le functions.php
PHP:
<?php
class user
{
    function isAdmin($odb)
    {
        $SQL = $odb -> prepare("SELECT `rank` FROM `users` WHERE `ID` = :id");
        $SQL -> execute(array(':id' => $_SESSION['ID']));
        $rank = $SQL -> fetchColumn(0);
        if ($rank == 2)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    function LoggedIn()
    {
        @session_start();
        if (isset($_SESSION['username'], $_SESSION['ID']))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    function hasMembership($odb)
    {
        $SQL = $odb -> prepare("SELECT `expire` FROM `users` WHERE `ID` = :id");
        $SQL -> execute(array(':id' => $_SESSION['ID']));
        $expire = $SQL -> fetchColumn(0);
        if (time() < $expire)
        {
            return true;
        }
        else
        {
            $SQLupdate = $odb -> prepare("UPDATE `users` SET `membership` = 0 WHERE `ID` = :id");
            $SQLupdate -> execute(array(':id' => $_SESSION['ID']));
            return false;
        }
    }
    function notBanned($odb)
    {
        $SQL = $odb -> prepare("SELECT `status` FROM `users` WHERE `ID` = :id");
        $SQL -> execute(array(':id' => $_SESSION['ID']));
        $result = $SQL -> fetchColumn(0);
        if ($result == 0)
        {
            return true;
        }
        else
        {
            session_destroy();
            return false;
        }
    }
}
class stats
{
    function totalUsers($odb)
    {
        $SQL = $odb -> query("SELECT COUNT(*) FROM `users`");
        return $SQL->fetchColumn(0);
    }

    function tickets($odb, $user)
    {
        $SQL = $odb -> prepare("SELECT COUNT(*) FROM `tickets` WHERE `user` = :user AND `status` = Waiting for user response");
        $SQL -> execute(array(":user" => $user));
        return $SQL->fetchColumn(0);
    }
}

?>
 
Dernière édition:
Je répondrais plus de mon téléphone, c'est pas super pratique pour le PHP ^^'

2 solutions :
PHP:
$listMembers = array();
foreach($odb->query("SELECT * FROM `users`")->fetch() as $u)

PHP:
$listMembers = array();
$res = $odb->query("SELECT * FROM `users`");
foreach($res->fetch() as $u)

Puis une 3ème solution serait avec prepare() & execute();

On est d'accord que, dans le code que je t'avais filé, un score au dela de 40 points n'est pas traité..
Faudrait rajouter ça si le cas peut se produire ;)


Ah.. les accolades, c'est pratique... Sinon tu peux utiliser foreach($vars as $v): et endforeach;

Existe pour while, for, if/else, etc..
 
Dernière édition:
Ah sinon.. pour tes class, la bonne pratique, c'est d'utiliser 1 fichier par classe.

La class Users par exemple se trouvera dans un fichier nommé users.class.php (par exemple)

Tu peux ensuite les charger simplement via la fonction
 
Je répondrais plus de mon téléphone, c'est pas super pratique pour le PHP ^^'

2 solutions :
PHP:
$listMembers = array();
foreach($odb->query("SELECT * FROM `users`")->fetch() as $u)

PHP:
$listMembers = array();
$res = $odb->query("SELECT * FROM `users`");
foreach($res->fetch() as $u)

Puis une 3ème solution serait avec prepare() & execute();

On est d'accord que, dans le code que je t'avais filé, un score au dela de 40 points n'est pas traité..
Faudrait rajouter ça si le cas peut se produire ;)


Ah.. les accolades, c'est pratique... Sinon tu peux utiliser foreach($vars as $v): et endforeach;

Existe pour while, for, if/else, etc..
Hello,

Les 2solutions que tu a mis fonctionne pas j'ai ceci
HTML:
Array
(
)

Le membre gagnant est

Pourtant il ont 20 et 25points
 
Je me suis pris 2 min pour tester...
J'ai recopié intégrallement ton PHP afin d'avoir les mêmes choses.

La première solution que je t'avais donné sur mon profil fonctionne, à savoir :
PHP:
$users = $odb->query("SELECT * FROM `users`");
foreach($users->fetchAll() as $u):

Bref, comme quoi c'est pas très clair sur un profil :)

Si tu as toujours un problème, je pencherais pour problème de configuration php.
 
Je me suis pris 2 min pour tester...
J'ai recopié intégrallement ton PHP afin d'avoir les mêmes choses.

La première solution que je t'avais donné sur mon profil fonctionne, à savoir :
PHP:
$users = $odb->query("SELECT * FROM `users`");
foreach($users->fetchAll() as $u):

Bref, comme quoi c'est pas très clair sur un profil :)

Si tu as toujours un problème, je pencherais pour problème de configuration php.
Sa m'affiche ça :'(
 
Ok,c 'est déjà une bonne chose...

Du coup, je viens de reprendre ton code à l'identique.. Avant j'avais rajouté quelques trucs, par habitude, qui règlent le problème.

Et je donne déjà la solution ici :
https://reality-gaming.fr/threads/faire-un-tirage-au-sort.473831/#post-5720826

Alors.. B**DEL DE M**DE les apostrophes, c'est UTILE ! :rage:

C'est des mauvaises pratiques.. on perd en lecture, on perd en praticité, et ça génère des bugs alakhon.

Non mais! :)
 
Ok,c 'est déjà une bonne chose...

Du coup, je viens de reprendre ton code à l'identique.. Avant j'avais rajouté quelques trucs, par habitude, qui règlent le problème.

Et je donne déjà la solution ici :
https://reality-gaming.fr/threads/faire-un-tirage-au-sort.473831/#post-5720826

Alors.. B**DEL DE M**DE les apostrophes, c'est UTILE ! :rage:

C'est des mauvaises pratiques.. on perd en lecture, on perd en praticité, et ça génère des bugs alakhon.

Non mais! :)
J'ai pas trop bien compris x)
 
T'as viré les accolades... (j'suis fatigué, j'ai dis apostrophes dans mon précédent message).

Du coup, le foreach, s'arrète après le switch, et non après le for.

Donc rajoute les accolades au foreach.
 
T'as viré les accolades... (j'suis fatigué, j'ai dis apostrophes dans mon précédent message).

Du coup, le foreach, s'arrète après le switch, et non après le for.

Donc rajoute les accolades au foreach.
Toujours pareil
PHP:
<?php

require_once 'includes/db.php';
require_once 'includes/init.php';
?>
La y'a tout mes conneries de HTML
<?php
$listMembers = array();
$users = $odb->query("SELECT * FROM `users`");
foreach($users->fetchAll() as $u);



{
    // On multiplie les chances d'apparaitre dans le tableau en fonction des points
    switch($u['points']){
        case 5:
            $multiplier = 1;
        break;
        case 10:
            $multiplier = 2;
        break;
        case 20:
            $multiplier = 3;
        break;
        case 30:
            $multiplier = 4;
        break;
        case 40:
            $multiplier = 5;
        break;
    }

    for($i=0; $i < $multiplier; $i++){
        $listMembers[] = $u['username'];
    }

}

// si on veut melanger le tableau, il faut décommenter la ligne ci-dessous
//shuffle($listMembers);

print '<pre>';
print_r($listMembers);
print '</pre>';

// selectionne une valeur au hasard dans le tableau
$gagnant = array_rand($listMembers);
echo '<p>Le membre gagnant est <b>'.$listMembers[$gagnant].'</b></p>';

            ?>
C'est totalement dafukk
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut