Choix de lignes d'une table ?

Eléphanteau du PHP | 46 Messages

24 mai 2006, 10:22

ça ce n'est pas du HTML mais bon...

Ici :
<td><input type="checkbox"/ name="joueur[]"></td> 
tu n'as pas d'attribut "value", c'est pour ça qu'il met "on", par défaut

Tu dois rajouter un attribut "value", qui contiendra donc l'identifiant
A priori ça :
{$joueur[un_joueur].numero}
Ok en ayant ajouté ça, j'obtiens bien "tabJoueur : Array0 : 4
1 : 5
2 : 6"
avec les numéros qui correspondent à ceux des cases cochées !

Donc maintenant, il faut compléter le tableau avec ces choix...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 10:27

Et bien si tu relis mes messages précédents, tu verras que la marche à suivre que j'ai indiquée n'est pas compliquée

Cest la même requête que tu utilises pour l'instant, sauf qu'on rajoute une condition dans le WHERE pour ne sélectionner que les lignes que l'on veut

Donc par étape :
1 - sous phpMyAdmin tu essaye de faire le SQL qui correspond, avec des valeurs "en dur"
2 - puis tu fais générer le code SQL de cette requête par ton PHP, en insérant les identifiants récupérés du formulaire précédent
3 - tu affiches ce SQL généré, tu regardes s'il correspond à ce que tu veux et tu le testes dans phpMyAdmin

Stp, n'essaie pas tout de suite de faire afficher les résultats dans ta page, ça limitera les risques d'erreur ;)

Eléphanteau du PHP | 46 Messages

24 mai 2006, 10:58

Et bien si tu relis mes messages précédents, tu verras que la marche à suivre que j'ai indiquée n'est pas compliquée

Cest la même requête que tu utilises pour l'instant, sauf qu'on rajoute une condition dans le WHERE pour ne sélectionner que les lignes que l'on veut

Donc par étape :
1 - sous phpMyAdmin tu essaye de faire le SQL qui correspond, avec des valeurs "en dur"
2 - puis tu fais générer le code SQL de cette requête par ton PHP, en insérant les identifiants récupérés du formulaire précédent
3 - tu affiches ce SQL généré, tu regardes s'il correspond à ce que tu veux et tu le testes dans phpMyAdmin

Stp, n'essaie pas tout de suite de faire afficher les résultats dans ta page, ça limitera les risques d'erreur ;)
Ok j'ai bien testé ma requête et elle marche dans PHPMyAdmin.

J'ai bien la ligne correspondant à celle que j'ai cochée qui s'affiche. Le petit soucis qui reste, c'est que quand je choisi plusieurs lignes, je n'arrive pas à les afficher toutes. Il y a juste la dernière qui s'affiche.

J'ai le code suivant :
case 'affiche_choix_joueur':
         // vérifions que la variable a été transmise
         $tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null;

         // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
         if (!empty($tabJoueurs)) {
         foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }
        
        $sql = "SELECT * from joueur WHERE numero=".$valeur;
        $resultat = $db->query($sql);
        $tpl->assign('nombre_enregistrements', $resultat->numRows());
        $resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
        $tpl->assign('joueur', $resultat);
        $tpl->display('afficher_joueur.tpl');
    break;
L'erreur semble venir du fait que seule la dernière valeur obteue dans la boucle foreach est utilisée dans la requête.

J'ai donc rajouté une boucle foreach à ma requête comme ceci :
case 'affiche_choix_joueur':
         // vérifions que la variable a été transmise
         $tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null;

         // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
         if (!empty($tabJoueurs)) {
         foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }
        
        foreach($tabJoueurs as $cle => $valeur) {
        $sql = "SELECT * from joueur WHERE numero=".$valeur;}
        $resultat = $db->query($sql);
        $tpl->assign('nombre_enregistrements', $resultat->numRows());
        $resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
        $tpl->assign('joueur', $resultat);
        $tpl->display('afficher_joueur.tpl');
    break;
Mais ça ne résoud pas mon problème...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 11:00

Oui, la requête est fausse

avec "WHERE colonne = valeur", il est évident que tu n'as qu'une possibilité, hors toi tu en veux plusieurs

Donc, soit tu utilises des OR, soit tu regardes ici :
http://www.phpfrance.com/forums/voir_re ... php#125746

=> dernière ligne

La boucle foreach c'est dans le principe, mais dans cette boucle tu dois uniquement créer le code SQL de ta requête
Requête que tu n'exécuteras qu'ensuite, en dehors de la boucle.

Eléphanteau du PHP | 46 Messages

24 mai 2006, 11:15

Oui, la requête est fausse

avec "WHERE colonne = valeur", il est évident que tu n'as qu'une possibilité, hors toi tu en veux plusieurs

Donc, soit tu utilises des OR, soit tu regardes ici :
http://www.phpfrance.com/forums/voir_re ... php#125746

=> dernière ligne

La boucle foreach c'est dans le principe, mais dans cette boucle tu dois uniquement créer le code SQL de ta requête
Requête que tu n'exécuteras qu'ensuite, en dehors de la boucle.
Ok je vais faire une requête comme tu l'as indiquée dans ton lien. Par contre, je ne sais pas comment faire pour obtenir un tableau de valeurs à tester avec cette boucle:
foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 11:18

Par contre, je ne sais pas comment faire pour obtenir un tableau de valeurs à tester avec cette boucle:
foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }
Attends je ne comprends pas là... je croyais que tu l'avais ce tableau, c'est le tableau qui correspond aux checkbox cochées !

Eléphanteau du PHP | 46 Messages

24 mai 2006, 11:28

Par contre, je ne sais pas comment faire pour obtenir un tableau de valeurs à tester avec cette boucle:
foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }
Attends je ne comprends pas là... je croyais que tu l'avais ce tableau, c'est le tableau qui correspond aux checkbox cochées !
Alors la, je vois vraiment pas... C'est $tabJoueurs ? Quand je l'affiche j'ai juste "Array"

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 11:36

Array veut dire "tableau" en anglais...

Est-ce que tu comprends ce que tu fais ? je ne suis pas sûr, sinon tu saurais à quoi correspond cette valeur...

Si je regarde le HTML de ton formulaire, tes checkbox s'appellent "joueur[]",
donc une fois le formulaire transmis tu récupèreras un tableau $_POST['joueur']

Donc en faisant ça :
$tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null; 
tu mets dans $tabJoueurs le tableau $joueur

si tu fais
echo $valeur;
et que $valeur est un tableau, c'est normal qu'il t'affiche Array
Pour afficher le contenu d'un tableau tu peux utiliser ceci :
echo '<pre>';
print_r($tableau);
echo '</pre>';
Si tu fais ça sur $tabJoueurs, tu devrais voir les valeurs de tes cases cochées
Il suffit de boucler sur ce tableau pour concaténer chaque valeur dans ta requête SQL

Eléphanteau du PHP | 46 Messages

24 mai 2006, 11:45

Array veut dire "tableau" en anglais...

Est-ce que tu comprends ce que tu fais ? je ne suis pas sûr, sinon tu saurais à quoi correspond cette valeur...

Si je regarde le HTML de ton formulaire, tes checkbox s'appellent "joueur[]",
donc une fois le formulaire transmis tu récupèreras un tableau $_POST['joueur']

Donc en faisant ça :
$tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null; 
tu mets dans $tabJoueurs le tableau $joueur

si tu fais
echo $valeur;
et que $valeur est un tableau, c'est normal qu'il t'affiche Array
Pour afficher le contenu d'un tableau tu peux utiliser ceci :
echo '<pre>';
print_r($tableau);
echo '</pre>';
Si tu fais ça sur $tabJoueurs, tu devrais voir les valeurs de tes cases cochées
Il suffit de boucler sur ce tableau pour concaténer chaque valeur dans ta requête SQL
Oui c'est vrai que quand on fait un print d'un tableau, on a "array" en réponse qui veut dire que ma variable est un tableau ! J'y avais plus pensé ! J'ai donc bien Array ( [0] => 5 [1] => 9 ) avec print_r du tableau.

Et il faut faire comment exactement pour ça :
Il suffit de boucler sur ce tableau pour concaténer chaque valeur dans ta requête SQL

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 11:50

Pas besoin de citer toute ma réponse à chaque fois hein :P

Pour générer ta requête, je pense que tu peux y arriver tout seul

- tu as un tableau de valeurs :
$tabJoueurs = Array(0=>x, 1=>y, 2=>z);
- tu connais la boucle foreach() qui permet de boucler facilement sur un tableau (sinon va voir la doc avec le lien au dessus)

- tu sais que tu veux arriver à quelque chose comme ça :

Code : Tout sélectionner

SELECT * FROM table WHERE colonne IN (x, y, z)
Donc à partir de là, tu peux essayer des trucs ;)

Eléphanteau du PHP | 46 Messages

24 mai 2006, 12:15

J'y arrive vraiment pas... :cry:
Je vois le truc d'utiliser foreach pour obtenir les valeurs, mais ça veut pas aller dans ma requête SQL...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 mai 2006, 13:11

Est-ce que tu sais concaténer des chaînes de caractères ?

Si tu ne fais pas l'effort d'en dire plus on ne va pas pouvoir t'aider par contre... Montre ce que tu as essayé par exemple

Eléphanteau du PHP | 46 Messages

25 mai 2006, 13:49

Alors, voila où j'en suis :
J'arrive à obtenir la liste de ce qui est dans $tabJoueurs avec ce que tu m'as donné :
foreach($tabJoueurs as $cle => $valeur) {
         echo $cle.' : '.$valeur.'<br>';
              }
        }
Le problème, c'est que je ne vois pas comment faire pour récupérer ces valeurs :
$tabJoueurs = Array(0=>x, 1=>y, 2=>z);
et les mettre dans ma requêtre SQL :
SELECT * FROM table
WHERE colonne IN (x, y, z) 
Est-ce que tu sais concaténer des chaînes de caractères ?
C'est quoi "concaténer" ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 mai 2006, 14:33

concaténer ça veut dire "coller des bouts de chaînes"
ça se fait avec un point '.'

exemple :
$debut = 'Patience et longueur de temps';
$fin = '<br />Font plus que force ni que rage';

$phrase = $debut.$fin; // ici on concaténe les deux morceaux pour faire une nouvlel chaîne
Autre forme :
$compteArebours = '';
for ($i=10; $i>=0; $i--) {
   $compteArebours .= $i.'...'; // à chaque tour on rajoute dans la variable  $compteArebours la valeur de $i et 3 petits points
}
echo $compteArebours;
A partir de là, utilise ce principe pour insérer les valeurs dans ta requête
Un début de requête fixe, puis une boucle pour insérer les numéros en les concaténant
C'est quoi "concaténer" ?
Au passage quand même, avant de poser des questions tu peux aussi avoir le réflexe de chercher par toi-même...

Exemple : "concaténer+PHP" sur Google
http://www.google.fr/search?hl=fr&q=con ... ogle&meta=

Eléphanteau du PHP | 46 Messages

26 mai 2006, 14:12

Alors...
J'ai pu avancer et j'arrive presque à quelque chose !

J'ai ce code:
case 'affiche_choix_joueur':
         // vérifions que la variable a été transmise
         $tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null;

         // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
         if (!empty($tabJoueurs)) {
         foreach($tabJoueurs as $cle => $valeur) {
           $valeurs .= $valeur.", ";
           echo $valeurs;
         //echo $cle.' : '.$valeur.'<br>';
              }
         print_r($tabJoueurs);
        }
Et j'obtiens comme réponse pour $valeurs (la variable avec les vaeurs séparées d'une virgule) : 4, 4, 5, 4, 5, 6,

Et la je n'arrive pas à afficher juste 4, 5, 6 (je pense que l'erreur vient du fait que après la première boucle, j'ai "4", puis "4,5" après la seconde et enfin "4,5,6" après la troisième, d'où cette chaine)...