Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- <----------------------------------------------------------------------------------
- Variables utilisées :
- $table : Indique la table sur laquelle nous allons travailler. (Elle est passé en argument.
- $maxwin : le nombre de gagnants
- $nbr_arg : le nombre d'arguments reçus par la fonction
- $args : Tableau d'arguments
- $cols : Variable dans laquelle on va introduire les colonnes séléctionnées
- $sql : contiendra la requête sql
- $requete : contiendra la requête PDO
- $resultat : tableau du résultat de la requête
- $erreur : contient l'erreur en cas d'erreur
- ------ Exemple d'utilisation de la fonction :
- - lottery('users',3,'id','pseudo'); | Table : Users | Gagnant : 3 | Champs 1 : ID | Champs 2 : pseudo
- - lottery('users',3); | Table : Users |Gagnant : 3 | Champs : TOUS
- ------ Améliorations possibles et que vous devriez envisager :
- - Mettre en forme la sortie. (Le var_dump et l'affichage brute est un peu moche :) )
- - Supprimer ce que vous semblez inutile, optimiser certaines parties du code.
- 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
- ---------------------------------------------------------------------------------->
- */
- function lottery($table,$maxwin)
- {
- try{
- require('connect.php'); // on a besoin de la connexion :) ( http://melinyel.net/topic/1496-pdo-connexion-%C3%A0-une-base-de-donn%C3%A9e )
- $nbr_arg = func_num_args(); // on compte le nombre d'arguments.
- $args = func_get_args(); // on met tous les arguments dans une variable (tableau)
- 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.
- {
- $cols = $args[2]; // les noms de colonne commence à 3 puisque les 2 premiers arguments sont $table et $maxwin
- for ($i = 3; $i < $nbr_arg; $i++){
- $cols = $cols.','.$args[$i]; // on met en forme ce qu'on va introduire dans la requête sql
- }
- echo $cols;
- } else { // S'il y a moins de 3 arguments alors on affiche TOUTES Les colonnes
- $cols = '*';
- }
- //print($nbr_arg);
- echo '<br />';
- /* Pourquoi ne pas utiliser le BindParam ci-dessous pour $table et $args ?
- PDO n'accepte pas qu'on introduise le nom des colonnes et des tables dans un BindParam :)
- */
- addslashes($table);
- addslashes($cols);
- $sql = "SELECT $cols FROM $table ORDER BY RAND() LIMIT :maxwin ;"; // requete
- $requete = $db->prepare($sql); // preparation de la requete
- $requete->BindParam(":maxwin",$maxwin, PDO::PARAM_INT);
- $requete->execute();
- $requete->setFetchMode(PDO::FETCH_OBJ);
- while( $resultat = $requete->fetch() ) // pour chaque retour de la requête.
- {
- if($nbr_arg > 2) // s'il y a des colonnes précises à retourner
- {
- for ($i= 2;$i < $nbr_arg; $i++){ // pour i allant de 2 (3eme argument au nombre d'arguments.)
- echo ' > '.$resultat->$args[$i].' <br />'; // On affiche le résultat de la requête pour l'argument $i;
- }
- echo '<hr />';
- } else{ // Sinon on retourne toutes les colonnes.
- var_dump($resultat); // j'ai éprouver une très grande flemme ici.. ;)
- }
- }
- } catch(PDOException $erreur) {
- print "Erreur :". $erreur->getMessage() . "<br />"; // en cas d'erreur on renvoit l'erreur.
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment