Guest User

Lottery/Concours v1

a guest
Feb 6th, 2015
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.34 KB | None | 0 0
  1. <?php
  2. /*
  3.  
  4. <----------------------------------------------------------------------------------
  5. Variables utilisées :
  6.  $table     : Indique la table sur laquelle nous allons travailler. (Elle est passé en argument.
  7.  $maxwin    : le nombre de gagnants
  8.  $nbr_arg   : le nombre d'arguments reçus par la fonction
  9.  $args      : Tableau d'arguments
  10.  $cols      : Variable dans laquelle on va introduire les colonnes séléctionnées
  11.  $sql       : contiendra la requête sql
  12.  $requete   : contiendra la requête PDO
  13.  $resultat  : tableau du résultat de la requête
  14.  $erreur    : contient l'erreur en cas d'erreur
  15.  
  16. ------ Exemple d'utilisation de la fonction :
  17. -  lottery('users',3,'id','pseudo');    | Table : Users | Gagnant : 3  | Champs 1 : ID | Champs 2 : pseudo
  18. -  lottery('users',3);                  | Table : Users |Gagnant : 3 | Champs : TOUS
  19.  
  20. ------ Améliorations possibles et que vous devriez envisager :
  21. - Mettre en forme la sortie. (Le var_dump et l'affichage brute est un peu moche :) )
  22. - Supprimer ce que vous semblez inutile, optimiser certaines parties du code.
  23. Attention : Les valeurs en retour sont affichées en brute. (pas de mise en forme, pas de tableau. A vous de gérer ceci  en ligne : 58 -> 70
  24.  
  25. ---------------------------------------------------------------------------------->
  26. */
  27. function lottery($table,$maxwin)
  28. {
  29.     try{
  30.         require('connect.php'); // on a besoin de la connexion :) ( http://melinyel.net/topic/1496-pdo-connexion-%C3%A0-une-base-de-donn%C3%A9e )
  31.         $nbr_arg = func_num_args(); // on compte le nombre d'arguments.
  32.         $args = func_get_args(); // on met tous les arguments dans une variable (tableau)
  33.         if ($nbr_arg > 2) // S'il n'y a que 2 arguments ce sont : la table et le nombre de gagnant SINON les arguments suivants sont les tables à afficher.
  34.         {
  35.             $cols = $args[2]; // les noms de colonne commence à 3 puisque les 2 premiers arguments sont $table et $maxwin
  36.             for ($i = 3; $i < $nbr_arg; $i++){
  37.                 $cols = $cols.','.$args[$i]; // on met en forme ce qu'on va introduire dans la requête sql
  38.             }
  39.          echo $cols;
  40.         } else { // S'il y a moins de 3 arguments alors on affiche TOUTES Les colonnes
  41.                 $cols = '*';
  42.             }
  43.            
  44.         //print($nbr_arg);
  45.        
  46.         echo '<br />';
  47.        
  48.         /* Pourquoi ne pas utiliser le BindParam ci-dessous pour $table et $args ?
  49.            PDO n'accepte pas qu'on introduise le nom des colonnes et des tables dans un BindParam :)       
  50.         */
  51.         addslashes($table);
  52.         addslashes($cols);
  53.         $sql = "SELECT $cols FROM $table ORDER BY RAND() LIMIT :maxwin ;"; // requete
  54.         $requete = $db->prepare($sql); // preparation de la requete
  55.         $requete->BindParam(":maxwin",$maxwin, PDO::PARAM_INT);
  56.         $requete->execute();
  57.  
  58.         $requete->setFetchMode(PDO::FETCH_OBJ);
  59.        
  60.         while( $resultat = $requete->fetch() ) // pour chaque retour de la requête.
  61.         {
  62.             if($nbr_arg > 2) // s'il y a des colonnes précises à retourner
  63.             {
  64.                 for ($i= 2;$i < $nbr_arg; $i++){ // pour i allant de 2 (3eme argument au nombre d'arguments.)
  65.                     echo ' > '.$resultat->$args[$i].' <br />'; // On affiche le résultat de la requête pour l'argument $i;
  66.                 }
  67.                 echo '<hr />';
  68.             } else{ // Sinon on retourne toutes les colonnes.
  69.                     var_dump($resultat); // j'ai éprouver une très grande flemme ici.. ;)
  70.                 }
  71.         }
  72.  
  73.    
  74.     } catch(PDOException $erreur) {
  75.             print "Erreur :". $erreur->getMessage() . "<br />"; // en cas d'erreur on renvoit l'erreur.
  76.         }
  77. }
  78.  
  79.  
  80.  
  81. ?>
Advertisement
Add Comment
Please, Sign In to add comment