IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

récuperer les valeurs d'une checkbox multiple


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut récuperer les valeurs d'une checkbox multiple
    Bonjour tout le monde,
    j'essaye de récupérer les valeurs de checkbox à travers un tableau de données, mais je pense que la syntaxe n'est pas la bonne,
    sachant que l'user choisi des produits et les commande par la suite :

    voilà mon code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    $tri_critere = isset($_POST['trier']) ? trim($_POST['tri_critere']) : "";
    $cocher = isset($_POST['tri']) ? trim($_POST['checkbox']) : "id_produit";
    $liste = sqlListerCategoriesProduits($conn,$tri_critere,$cocher);
     
    $listeCategories=sqlLireCategorie($conn);
    ?>
    <form action="test.php" method="get">
     
        	<?php if (count($liste) > 0) : ?>
            <table>
                <tr>
                    <th>Produit</th>
                    <th>Description</th>
                    <th>Prix</th>
                     <th>Marque</th>
                     <th>categorie</th>
                     <th>Commander</th>
                </tr>
                <?php foreach ($liste as $row) : ?> 
                <tr>
                    <td><?php echo $row['nom_produit'] ?></td>
                    <td><?php echo $row['description_produit'] ?></td>
                    <td><?php echo $row['prix_produit'] ?></td>
                    <td><?php echo $row['nom_marque'] ?></td>
                    <td><?php echo $row['nom_categorie_produit'] ?></td>
                   <td> <input type="checkbox" name="checkbox[]" value="'.$row['id_produit'].'">
                   </td> 
                </tr>
                <?php endforeach; ?>
            </table> 
            <?php else : ?>
            <p>Aucun produit trouvé trouvé.</p>
            <?php endif; ?>
            <a href="test.php"><input type="submit" name="envoi" value="Commander"></a>
            </form>
    code sql
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function sqlListerCategoriesProduits($conn,$trier,$cocher){
     
    	$req = "SELECT * FROM categories_produits cp 
    	INNER JOIN produits p on cp.id_categorie_produit = p.id_categorie_produit 
    	INNER JOIN marques m ON p.id_marque = m.id_marque";
     
    	if(!empty($trier)){ 
     
    		$req.=" and cp.id_categorie_produit =".mysqli_real_escape_string($conn,$trier);
    	}
     
    	if(!empty($cocher)){
    		$req.=" and p.id_produit =".mysqli_real_escape_string($conn,$cocher);
    	}
     
    	if($result = mysqli_query($conn,$req,MYSQLI_STORE_RESULT)){
     
    		$nbResult = mysqli_num_rows($result);
            $liste = array();
            if ($nbResult) {
                mysqli_data_seek($result, 0);
                while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    $liste[] = $row;
                }
            }
            mysqli_free_result($result);
            return $liste;
        } else {
            errSQL($conn);
            exit;
            }
    	}
    page test pour afficher le résultat coché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    $tri_critere = isset($_POST['trier']) ? trim($_POST['tri_critere']) : "";
    $cocher = isset($_POST['tri']) ? trim($_POST['checkbox']) : "id_produit";
    $liste = sqlListerCategoriesProduits($conn,$tri_critere,$cocher);
    ?>
     <form method="get" action="test.php"> 
                <table>
                <tr>
    				<th>Numéro</th>
    				<th>Produit</th>
    				<th>Descrption du produit</th>
    				<th>Prix du produit</th>
    				<th>Quantité du produit</th>
    				<th>Catégorie du produit</th>
    				<th>Marque du produit</th>
                </tr>
                <?php foreach ($liste as $row) : ?>
                <tr>
                    <td><?php echo $row['id_produit'] ?></td>
                    <td><?php echo $row['nom_produit'] ?></td>
                     <td><?php echo $row['description_produit'] ?></td>
                      <td><?php echo $row['prix_produit'] ?></td>
                       <td><?php echo $row['quantite_produit_commande'] ?></td>
    				<td><?php echo $row['nom_categorie_produit'] ?></td>
                   <td><?php echo $row['nom_marque'] ?></td>
     
                </tr>
                <?php endforeach; ?>
            </table>
            <input type="text" name="submit" value="confirmer la commande">
            </form>
    de l'aide SVP!!!

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    quand je fais un test pour voir ce qui est coché, j'ai ca comme résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!empty($_POST['checkbox'])){
         		 print_r($_POST);
     
       }
    Array ( [checkbox] => Array ( [0] => '.$row['id_produit'].' [1] => '.$row['id_produit'].' ) [envoi] => Commander )

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,
    tu as fait une boulette, corrige la ligne 27 ainsi :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><input type="checkbox" name="checkbox[]" value="<?= $row['id_produit'] ?>"></td>

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup pour ta réponse, effectivement mnt je récupere que les id des produits cochés, par contre, dans la page test.php j'affiche toujours tous les produits, pas que ceux cochés
    est ce que tu as une idée de l'erreur commise?

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    est ce qu'il faut que j'ajoute ca pour tester les elements cochés pour les récuperer après dans la page test??
    sachant que $cocher = isset($_POST['tri']) ? trim($_POST['checkbox']) : "id_produit";
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><input type="checkbox" name="checkbox[]"value="<?= $row['id_produit'] ?>" <?php echo $cocher === $row['id_produit'] ? "checked" : "" ?>>

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    regarde ce que tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="test.php" method="get">
    et dans ton code de test, tu mènes tes tests sur $_POST

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    j'ai changé mes deux lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // $tri_critere concerne la select que j ai sur la même page et qui fait le tri de mon tableau
    $tri_critere = isset($_POST['trier']) ? trim($_POST['tri_critere']) : "";
    // case à cocher
    $cocher = isset($_GET['tri']) ? trim($_GET['checkbox']) : "id_produit";
    $liste = sqlListerCategoriesProduits($conn,$tri_critere,$cocher);
    et l url est bon je pense je vois les deux id coché:
    http://localhost/tp3/gestion_magasin...nvoi=Commander
    (3 dans ce cas)
    sauf que je vois toujours tous les résultats sans la considération du checkbox

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    tu affiches des données sans les sécuriser avec htmlspecialchars(), je ne vois pas dans ton code le contrôle en charge du tri.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    je vais essayer de trouver la syntaxe, je sais pas comment utiliser htmlspecialchars()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $cocher = isset($_GET['tri']) ? trim($_GET['checkbox']) : "id_produit";
     
    <form action="test.php" method="GET" id="tri">
     
        	<?php if (count($liste) > 0) : ?>
            <table>
                <tr>
                    <th>Produit</th>
                    <th>Description</th>
                    <th>Prix</th>
                     <th>Marque</th>
                     <th>categorie</th>
                     <th>Commander</th>
                </tr>
                <?php foreach ($liste as $row) : ?> 
                <tr>
                    <td><?php echo $row['nom_produit'] ?></td>
                    <td><?php echo $row['description_produit'] ?></td>
                    <td><?php echo $row['prix_produit'] ?></td>
                    <td><?php echo $row['nom_marque'] ?></td>
                    <td><?php echo $row['nom_categorie_produit'] ?></td>
                   <td> <input type="checkbox" name="checkbox[]"value="<?= $row['id_produit'] ?>"></td> 
     
                </tr>
                <?php endforeach; ?>
            </table> 
            <?php else : ?>
            <p>Aucun produit trouvé trouvé.</p>
            <?php endif; ?>
            <a href="test.php"><input type="submit" name="tri" value="Commander"></a>
            </form>

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    dis-moi miss, tu ne me prendrais pas pour un jambon ?
    Je te dis que je ne vois pas le contrôle en charge du tri et hop il apparaît par un coup de baguette magique :
    dans ton premier message :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="envoi" value="Commander">
    et abracadabra, après, ça devient :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="tri" value="Commander">
    Tu m'étonnes que j'ai du mal à te suivre.

    Est-ce-que tu sais ce que tu veux exactement faire ?
    Et t'es-tu déjà frottée à PHP et au web en général et aux formulaires en particulier ?
    Parce que là je pense qu'il te manque sérieusement les bases.

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    j'ai fait des modifications entre temps pour améliorer mon premier code, c est pour cela que tu vois les changements, et non Mister je te prends pas pour un jambon,
    et oui j'essaye, je suis étudiante et j'essaye de m'améliorer

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Il n'y a aucun problème à être débutant. rawsrc veut simplement dire qu'il y a un parcours à respecter pour faire du php comme pour tout autre langage de programmation.

    Cela passe par faire des tuto, genre rentrer "Tuto formulaire php" dans un moteur de recherche et en faire quelques-uns. Là si tu déclares la méthode get et que tu cherches à récupérer les valeurs avec la méthode post tu n'iras pas loin. Savoir utiliser htmlspecialchars pour l'affichage des données est aussi un minimum que tu aurais du voir dans un tuto, par exemple <?php echo htmlspecialchars($row['description_produit']) ?>.

    On veut bien t'aider, mais si cela revient à faire un tuto, tu comprendras qu'on te conseille de commencer par regarder ceux qui sont déjà faits, pour t'aider ensuite sur les points que tu n'as pas compris, sinon on en fini pas. Apparemment tu vas trop vite sans avoir un minimum de bases.

    Au passage je vois que tu utilises mysqli. L'utilisation de cette extension ne se justifie que pour la reprise d'un ancien site, sinon il est vivement conseiller d'utiliser PDO qui est beaucoup plus pratique et plus universel pour les nouveaux développements.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/10/2007, 16h30
  2. Réponses: 2
    Dernier message: 04/04/2007, 17h21
  3. Réponses: 4
    Dernier message: 13/11/2006, 17h49
  4. Réponses: 5
    Dernier message: 12/08/2006, 00h36
  5. Réponses: 12
    Dernier message: 02/05/2006, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo