Partage
  • Partager sur Facebook
  • Partager sur Twitter

Checkbox et PHP vers BDD

Sujet résolu
    1 décembre 2020 à 16:58:50

    Bonjour,

    J'ai un problème avec des checkbox dans mon formulaire.

    Après de nombreuses recherches sur des forums, j'ai cru comprendre que les checkbox sont souvent problématiques pour les débutants. Spoiler : je ne fais pas exception...

    J'ai pu déterminer que c'est mes checkbox qui sont le problème car si je les mets en commentaire le bloc traitant les checkbox, une nouvelle entrée est crée dans ma bdd. (comme dans le code ci dessous)

    Formulaire:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <title>Plus qu'une étape</title>
    		<link rel="shortcut icon" type="image/x-icon" href="logos/logo.png" />
        </head>
        
        <body>
    
    		
    <!-- ************************************************ Haut de page ************************************************ -->
    		<?php include("enTete.php");?>
                
    <!-- ************************************************* FORMULAIRE *************************************************/ -->
    				
    		<div id="bloc_page">
    				<section class="formulaire" id="participation">
    	                
    					<h1><img src="images/formulaire.png" alt="Catégorie contact" class="ico_categorie" />Merci!</h1>
    						
    					<p>
    						Vous venez de tenter d'acheter ce produit.</br>
    						Malheureusement, il n'est pas encore disponible. <strong>La bonne nouvelle</strong> c'est que grâce à votre soutien il pourrait bientôt voir le jour.</br>
    						Pour être sûr que ce produit soit un jour disponible, je vous prierais de remplir le formulaire ci-dessous.</br>
    						Ainsi, lorsqu'un nombre suffisant de personnes seront intéressées, je pourrais commencer sa production.
    					</p>
    					
    					<form method="post" action="traitement.php">
    						<fieldset>
    							<legend>Vos coordonnées</legend>
    
    							<div>
    								<label for="Sexe">M.</label><input type="radio" name="sexe" value="M." id="Sexe"/>
    								<label for="Sexe">Mme.</label><input type="radio" name="sexe" value="Mme." id="Sexe"/>
    								<label for="Sexe">Autre</label><input type="radio" name="sexe" value="Autre" id="Sexe"/>
    							</div>
    							
    							<div>
    								<label for="name">Votre nom : </label></br>
    								<input class="champ" type="text" name="nom" id="name" placeholder="CARRIER" required /><input class="champ" type="text" name="prenom" id="firstname" placeholder="Quentin" required />
    							</div>
    							
    							<div>
    								<label for="birthdate">Votre date de naissance : </label></br>
    								<input type="date" name="dateNaissance" id="birthdate"/>
    							</div>
    							
    							<div>
    								<label for="mail">Votre adresse mail : </label></br>
    								<input class="champ" type="mail" name="mail" id="mail" placeholder="votre@adresse.fr" required />
    							</div>
    							
    							<div>
    								Souhaitez vous être informer quand ce produit sera disponible?
    								<label for="contact">Oui</label><input type="radio" name="contact" value="true" id="contact"/>
    								<label for="contact">Non</label><input type="radio" name="contact" value="false" id="contact"/>
    							</div>
    							
    							<div>
    								Quel(s) article(s) vous intéresse(nt)?</br>
    								<input type="checkbox" name="chariotte" id="article1"/><label for="article1">La Chariotte</label></br>
    								<input type="checkbox" name="fantastique" id="article2"/><label for="article2">La Fantastique</label></br>
    								<input type="checkbox" name="fantastiques" id="article3"/><label for="article3">Les 4 Fantastiques</label>
    							</div>
    							
    							<div>
    								<label for="message">Vous souhaitez ajouter quelque chose?</label></br>
    								<textarea class="champ" id="message" name="message" placeholder="tapez votre message ici"></textarea><br/>
    							</div>
    							
    							<div>
    								<input class="bouton" type="submit" value="Envoyer" required />
    							</div>
    							
    						</fieldset>
    					</form>
    						
    	            </section>
    
    		<div><a href="#logo"><img id="fleche_haut" src="images/flecheHaut.png" alt="Fleche pour remonter" title="Cliquer pour remonter"/></a></div>
            
    		</div>    
    <!-- ************************************************ Bas de page ************************************************ -->
                
    		<?php include("piedDePage.php");?>
    		
        </body>
    	
    </html>

    Traitement:

    <?php
    try
    {
    	// On se connecte à MySQL
    	$bdd = new PDO('mysql:host=localhost;dbname=lachariotteduvrac;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
    	// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
    // Si tout va bien, on peut continuer
    
    /**** gestion des variables ****/
    if(!isset($_POST["sexe"]))
    {
    	$sexe=NULL;
    }
    $sexe = htmlspecialchars($_POST["sexe"]);
    
    if(!isset($_POST["nom"]))
    {
    	$nom=NULL;
    }
    $nom = htmlspecialchars($_POST["nom"]);
    
    if(!isset($_POST["prenom"]))
    {
    	$prenom=NULL;
    }
    $prenom = htmlspecialchars($_POST["prenom"]);
    
    if(!isset($_POST["dateNaissance"]))
    {
    	$dateDeNaissance=NULL;
    }
    $dateDeNaissance = htmlspecialchars($_POST["dateNaissance"]);
    
    if(!isset($_POST["mail"]))
    {
    $_POST["mail"]=NULL;
    }
    $email = htmlspecialchars($_POST["mail"]);
    
    if(!isset($_POST["contact"]))
    {
    $_POST["contact"]=NULL;
    }
    $informe = htmlspecialchars($_POST["contact"]);
    
    /**** problème ci dessous avec chariotte, fantastique et fantastiqueS ****/
    /*$verifChariotte = isset($_POST["chariotte"]);// si elle est cochée, la variable $chariotte prendra la valeur true, sinon false
    if($verifChariotte)
    {
    	$chariotte="true";
    }
    else
    {
    	$chariotte="false";
    }
    
    $verifFantastique = isset($_POST["fantastique"]);
    if($verifFantastique)
    {
    	$fantastique="true";
    }
    else
    {
    	$fantastique="false";
    }
    
    $verifFantastiques = isset($_POST["fantastiques"]);
    if($verifFantastiques)
    {
    	$fantastiques="true";
    }
    else
    {
    	$fantastiques="false";
    }
    /**** fin du problème, si on commente ce bloc ca fonctionne, les trois variables seront nulles ****/
    
    if(!isset($_POST["message"]))
    {
    	$commentaire=NULL;
    }
    $commentaire = htmlspecialchars($_POST["message"]);
    
    
    
    $req = $bdd->prepare('INSERT INTO `contactachat`(`sexe`, `nom`, `prenom`, `dateDeNaissance`, `email`, `informe`, /*`chariotte`, `fantastique`, `fantastiques`,*/ `commentaire`) VALUES(:sexe, :nom, :prenom, :dateDeNaissance, :email, :informe, /*:chariotte; :fantastique, :fantastiques,*/ :commentaire)');
    
    $req->execute(array(
    	'sexe' => $sexe,
    	'nom' => $nom,
    	'prenom' => $prenom,
    	'dateDeNaissance' => $dateDeNaissance,
    	'email' => $email,
    	'informe' => $informe,
    	/*'chariotte' => $chariotte,
    	'fantastique' => $fantastique,
    	'fantastiques' => $fantastiques,*/
    	'commentaire' => $commentaire
    	));
    
    echo 'Vous avez bien transmis le formulaire </br>';
    
    echo "</br>" . $_POST["sexe"] . "</br>"; 
    echo $_POST["nom"] . "</br>";
    echo $_POST["prenom"] . "</br>";
    echo $_POST["dateNaissance"] . "</br>";
    echo $_POST["mail"] . "</br>";
    echo $_POST["contact"] . "</br>";
    /*echo $chariotte . "</br>";
    echo $fantastique . "</br>";
    echo $fantastiques . "</br>";*/
    echo $_POST["message"] . "</br>";
    
    $req->closeCursor();
    ?>

    Pourquoi mes champs "chariotte", "fantastique" et "fantastiques" ne sont pas remplis? 

    J'ai aussi découvert un autre petit défaut avec le sexe de mes utilisateurs. Lorsqu'il n'est pas défini mon traitement ne s'exécute pas... 

    Merci d'avance pour votre aide.

    EDIT : voici les entrée de ma BDD:

    -
    Edité par QuentinCarrier 2 décembre 2020 à 11:35:38

    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2020 à 17:19:56

      Bonjour,

      <?php 
       var_dump($_GET);
      ?>
      <form >
        <input type="checkbox" id="vehicle1" name="vehicle1" value="Bike">
        <label for="vehicle1"> I have a bike</label><br>
        <input type="checkbox" id="vehicle2" name="vehicle2" value="Car">
        <label for="vehicle2"> I have a car</label><br>
        <input type="checkbox" id="vehicle3" name="vehicle3" value="Boat">
        <label for="vehicle3"> I have a boat</label><br><br>
        <input type="submit" value="Submit">
      </form>


      Je te conseil d'executer ce code dans une autre page php juste pouv voir et comprendre le fonctionnement.

      Quand tu as des doutes utilise le var_dump() pour voir tes variables

      attention var_dump($_GET) va afficher tout le contenu de tes $_GET mais tu peux faire pareil avec $_POST

      Cordialement,

      Quillian

      • Partager sur Facebook
      • Partager sur Twitter

      Il n'y a pas de question idiote, seulement une réponse idiote

        1 décembre 2020 à 18:51:37

        Salut tout le monde,

        QuentinCarrier, pour que nous puissions t'aider il va falloir faire un peu de remaniement dans ton code, au lieu de faire une succession des bloc if  je te propose d'avoir un seul if du type:

        <?php
         
           if( (isset($_POST['nom_du_champ']) && !empty($_POST['nom_du_champ'])&& (...)){
        
           extract($_POST);
          /* vérification et traitement */
        ...
        

        et du côté HTML dans donne à tes checkbox la même valeur et tu rajoute [] à la fin de ce nom pour dire ta requête HTTP qu'il s'agit d'un tableau, genre:

        <input type="checkbox" name="fruits[]" id="id_1" />
        <input type="checkbox" name="fruits[]" id="id_2" />
        <input type="checkbox" name="fruits[]" id="id_3" />

        et dans ta page de traitement PHP au niveau de ton bloc if avant la fonction extract tu pourras juste avoir:

        $_POST['fruits']

        et je te conseil quand tu aura un bon niveau en PHP essaie de te former sur le MVC en PHP



        -
        Edité par EL-jos 1 décembre 2020 à 18:52:18

        • Partager sur Facebook
        • Partager sur Twitter

        Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

          2 décembre 2020 à 10:52:53

          Quillian a écrit:

          Bonjour,

          <?php 
           var_dump($_GET);
          ?>
          <form >
            <input type="checkbox" id="vehicle1" name="vehicle1" value="Bike">
            <label for="vehicle1"> I have a bike</label><br>
            <input type="checkbox" id="vehicle2" name="vehicle2" value="Car">
            <label for="vehicle2"> I have a car</label><br>
            <input type="checkbox" id="vehicle3" name="vehicle3" value="Boat">
            <label for="vehicle3"> I have a boat</label><br><br>
            <input type="submit" value="Submit">
          </form>


          Je te conseil d'executer ce code dans une autre page php juste pouv voir et comprendre le fonctionnement.

          Quand tu as des doutes utilise le var_dump() pour voir tes variables

          attention var_dump($_GET) va afficher tout le contenu de tes $_GET mais tu peux faire pareil avec $_POST

          Cordialement,

          Quillian

          Bonjour, comme tu me l'a conseillé j'ai executé ton code pour tenter de comprendre le fonctionnement des checkbox.

          Plusieurs checkbox dans un formulaire créée un tableau c'est bien ca? Et le tableau est rempli des cases cochées? Donc pour traiter les checkbox on doit extraire les valeurs du tableau? 


          J'ai tout de même du mal à comprendre quelque chose dans mon code d'origine : Pourquoi lorsque j'affiche mes variables à la fin elles s'affichent toutes comme je le souhaite, mais celles issues de mes checkbox ne veulent pas s'insérer dans ma bdd?

          Je répond ici à EL-jos car on ne peux pas mettre deux messages de suite ou alors il faut attendre 24h

          EL-jos a écrit:

          QuentinCarrier, pour que nous puissions t'aider il va falloir faire un peu de remaniement dans ton code, au lieu de faire une succession des bloc if  je te propose d'avoir un seul if du type:

          <?php
           
             if( (isset($_POST['nom_du_champ']) && !empty($_POST['nom_du_champ'])&& (...)){
          
             extract($_POST);
            /* vérification et traitement */
          ...


          Bonjour, merci pour ton retour. Je ne suis pas sur de comprendre ce que tu me conseille de faire... Je dois mettre cette ligne au début de mon code de traitement et je vérifie que toutes les variables soient définies? Mais si je fais ca et que l'utilisateur n'a pas coché certaines cases mon programme ne va pas marcher non?

          Sinon j'ai changé le nom de mes checkbox qui s'appellent désormais toutes "articles[]".

          Pour finir, je ne comprends pas ta dernière ligne : $_POST['fruits'] ? 

          -
          Edité par QuentinCarrier 2 décembre 2020 à 11:13:03

          • Partager sur Facebook
          • Partager sur Twitter
            2 décembre 2020 à 12:18:37

            Comme dit par EL-jos
            Le plus simple est de créer un tableau.
            Regarde je vais te donner un nouveau code a exécuter pour vraiment voir la différence.
            Ancien code :
            <?php
             var_dump($_GET);
            ?>
            <form >
              <input type="checkbox" id="vehicle1" name="vehicle1" value="Bike">
              <label for="vehicle1"> I have a bike</label><br>
              <input type="checkbox" id="vehicle2" name="vehicle2" value="Car">
              <label for="vehicle2"> I have a car</label><br>
              <input type="checkbox" id="vehicle3" name="vehicle3" value="Boat">
              <label for="vehicle3"> I have a boat</label><br><br>
              <input type="submit" value="Submit">
            </form>
            Nouveau code :
            <?php
             var_dump($_GET);
            ?>
            <form >
              <input type="checkbox" id="vehicle1" name="vehicle[]" value="Bike">
              <label for="vehicle1"> I have a bike</label><br>
              <input type="checkbox" id="vehicle2" name="vehicle[]" value="Car">
              <label for="vehicle2"> I have a car</label><br>
              <input type="checkbox" id="vehicle3" name="vehicle[]" value="Boat">
              <label for="vehicle3"> I have a boat</label><br><br>
              <input type="submit" value="Submit">
            </form>
            L'avantage de cela te permet d'avoir un tableau de tes cases a cocher que tu parcourir.
            if (in_array("Bike", $vehicle)) {
                echo "Got Bike";
            }
            Et tester comme cela si ta valeur existe dans ton tableau.
            • Partager sur Facebook
            • Partager sur Twitter

            Il n'y a pas de question idiote, seulement une réponse idiote

              2 décembre 2020 à 14:58:36

              Merci beaucoup Quillian, de m'avoir bien expliciter,

              QuentinCarrier, s'il faut que je continue dans le même code que Quillian, voici à quoi pourrait ressemble l'entrée de ton code PHP,

              <?php
              
                 if( (isset($_POST['vehicle'] && !empty($_POST['vehicle']) ){
              
               /* Partie traitement */
              }

              avec ce bout de code tout est simple pour toi, voici ce que fait ce script:

              • On vérifie bien que le tableau vehicle existe et qu'il n'est pas vide
              • La/les valeur(s) du tableau sera la valeur de l'attribut "value" des checkbox cliqué 

              et pour récuperer les/la valeur du tableau vehicle, tu pourras juste écrire:

              <?php
              
                /* Récuperation des valeurs contenuent dans le tableau
              */
              
               $values = array_values($_POST['vehicle']);

              et un coup de var_dump($values) t'affichera le contenue de $values

              • Partager sur Facebook
              • Partager sur Twitter

              Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

                2 décembre 2020 à 15:40:49

                Quillian a écrit:

                Comme dit par EL-jos
                Le plus simple est de créer un tableau.
                Regarde je vais te donner un nouveau code a exécuter pour vraiment voir la différence.
                Ancien code :
                <?php
                 var_dump($_GET);
                ?>
                <form >
                  <input type="checkbox" id="vehicle1" name="vehicle1" value="Bike">
                  <label for="vehicle1"> I have a bike</label><br>
                  <input type="checkbox" id="vehicle2" name="vehicle2" value="Car">
                  <label for="vehicle2"> I have a car</label><br>
                  <input type="checkbox" id="vehicle3" name="vehicle3" value="Boat">
                  <label for="vehicle3"> I have a boat</label><br><br>
                  <input type="submit" value="Submit">
                </form>
                Nouveau code :
                <?php
                 var_dump($_GET);
                ?>
                <form >
                  <input type="checkbox" id="vehicle1" name="vehicle[]" value="Bike">
                  <label for="vehicle1"> I have a bike</label><br>
                  <input type="checkbox" id="vehicle2" name="vehicle[]" value="Car">
                  <label for="vehicle2"> I have a car</label><br>
                  <input type="checkbox" id="vehicle3" name="vehicle[]" value="Boat">
                  <label for="vehicle3"> I have a boat</label><br><br>
                  <input type="submit" value="Submit">
                </form>
                L'avantage de cela te permet d'avoir un tableau de tes cases a cocher que tu parcourir.
                if (in_array("Bike", $vehicle)) {
                    echo "Got Bike";
                }
                Et tester comme cela si ta valeur existe dans ton tableau.


                Merci pour ton aide. J'ai essayé ton code mais j'ai un problème...

                <form method="GET" action="traitement.php">
                  <input type="checkbox" id="vehicle1" name="vehicle[]" value="Bike">
                  <label for="vehicle1"> I have a bike</label><br>
                  <input type="checkbox" id="vehicle2" name="vehicle[]" value="Car">
                  <label for="vehicle2"> I have a car</label><br>
                  <input type="checkbox" id="vehicle3" name="vehicle[]" value="Boat">
                  <label for="vehicle3"> I have a boat</label><br><br>
                  <input type="submit" value="Submit">
                </form>

                traitement.php :

                <?php
                var_dump($_GET);
                
                if (in_array("Bike", $_GET["vehicle"])) {
                    echo "Got Bike";
                }
                
                // $os = array("Mac", "NT", "Irix", "Linux");
                // if (in_array("Irix", $os)) 
                // {
                //     echo "Got Irix";
                // }
                
                ?>

                Lorsque je fais cette manipulation tout fonctionne bien!

                Mais quand je change la methode de transfert des données (de GET je passe à POST), ca ne fonctionne plus... et j'ai ces erreurs :

                array(0) { }
                Notice: Undefined index: vehicle in C:\MAMP\htdocs\tests\traitement.php on line 4

                Warning: in_array() expects parameter 2 to be array, null given in C:\MAMP\htdocs\tests\traitement.php on line 4

                Je ne comprends pas pourquoi ? De plus, dans mon formulaire j'utilise la méthode POST donc c'est embêtant pour mon programme :/


                -
                Edité par QuentinCarrier 2 décembre 2020 à 15:42:17

                • Partager sur Facebook
                • Partager sur Twitter
                  2 décembre 2020 à 15:44:44

                  Tu as bien changé :

                  - Dans ton html le <form method=POST> ?

                  - Dans ton code php les $_GET par $_POST ?

                  <?php
                  var_dump($_POST);
                   
                  if (in_array("Bike", $_POST["vehicle"])) {
                      echo "Got Bike";
                  }
                  
                  ?>

                  Cordialement,

                  Quillian

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Il n'y a pas de question idiote, seulement une réponse idiote

                    2 décembre 2020 à 15:57:38

                    Quillian a écrit:

                    Tu as bien changé :

                    - Dans ton html le <form method=POST> ?

                    - Dans ton code php les $_GET par $_POST ?

                    <?php
                    var_dump($_POST);
                     
                    if (in_array("Bike", $_POST["vehicle"])) {
                        echo "Got Bike";
                    }
                    
                    ?>

                    Cordialement,

                    Quillian

                    Oui ma méthode est bien sur POST et dans le doute j'ai copié ton code pour le traitement mais j'ai toujours les mêmes erreurs...

                    array(0) { }
                    Notice: Undefined index: vehicle in C:\MAMP\htdocs\tests\traitement.php on line 4

                    Warning: in_array() expects parameter 2 to be array, null given in C:\MAMP\htdocs\tests\traitement.php on line 4

                    Merci pour ton aide !

                    EDIT : j'ai trouvé ca : https://stackoverflow.com/questions/7698252/why-does-in-array-not-work-on-post Je ne sais pas si ca peux expliquer le fait que ca ne marche pas avec POST ici ? 

                    -
                    Edité par QuentinCarrier 2 décembre 2020 à 16:03:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 décembre 2020 à 16:06:31

                      On est d'accord que tu coche des cases ?

                      Car étant donné que nous avons aucune protection ou contrôle j'ai bien des deux erreurs moi aussi.

                      Dans le cas ou je me rend directement sur ma page : traitement.php

                      Ou si je ne coche aucune données. 

                      EDIT : 

                      Mon code marche bien !

                      Je me positionne sur 127.0.0.1/test.php et quand je valide je vais sur test2.php

                      fichier test.php :

                      <form method="POST" action="test2.php">
                        <input type="checkbox" id="vehicle1" name="vehicle[]" value="Bike">
                        <label for="vehicle1"> I have a bike</label><br>
                        <input type="checkbox" id="vehicle2" name="vehicle[]" value="Car">
                        <label for="vehicle2"> I have a car</label><br>
                        <input type="checkbox" id="vehicle3" name="vehicle[]" value="Boat">
                        <label for="vehicle3"> I have a boat</label><br><br>
                        <input type="submit" value="Submit">
                      </form>


                      fichier test2.php :

                      <?php
                        var_dump($_POST);
                        
                        if (in_array("Bike", $_POST["vehicle"])) {
                            echo "Got Bike";
                        }
                        
                      ?>



                      Cordialement,

                      Quillian

                      -
                      Edité par Quillian 2 décembre 2020 à 16:10:58

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Il n'y a pas de question idiote, seulement une réponse idiote

                        2 décembre 2020 à 16:10:02

                        Ok ca fonctionne! J'ai réouvert ma page après l'avoir quitée

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 décembre 2020 à 16:10:22

                          QuentinCarrier ce que Quillian veut te dire est tout simplement :

                          quand t'as un formaulaire:

                          <form method="POST" action="chemin_du_fichier_traitant_le_formulaire">
                          
                          </form>

                          alors dans ton code PHP, tu doit utiliser la variable global $_POST, mais si t'as 

                          <form method="GET" action="chemin_du_fichier_traitant_le_formulaire">
                          
                          </form>

                          Dans ton code PHP, tu ne devrait plus utiliser la variable $_POST mais plutôt $_GET

                          Note: tout dépend de la valeur de l'attribut method de ton formulaire


                          • Partager sur Facebook
                          • Partager sur Twitter

                          Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

                            2 décembre 2020 à 16:13:45

                            QuentinCarrier a écrit:

                            Ok ca fonctionne! J'ai réouvert ma page après l'avoir quitée


                            Ah bonne nouvelle, plus qu'à l'appliquer pour ton site a toi ;)


                            Cordialement,

                            Quillian

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Il n'y a pas de question idiote, seulement une réponse idiote

                              2 décembre 2020 à 16:41:15

                              Du coup j'ai fait ça !

                              if (in_array("chariotte", $_POST["articles"])) { //on regarde si chariotte est dans le tableau articles
                                  echo "</br>On veux la chariotte</br>";
                                  $chariotte="true";
                              }
                              else
                              {
                              	echo "</br>NON à la chariotte</br>";
                              	$chariotte="false";
                              }
                              
                              if (in_array("fantastique", $_POST["articles"])) {
                                  echo "On veux la fantastique</br>";
                                  $fantastique="true";
                              }
                              else
                              {
                              	echo "NON à la fantastique</br>";
                              	$fantastique="false";
                              }
                              
                              if (in_array("fantastiques", $_POST["articles"])) {
                                  echo "On veux les 4 fantastiques</br>";
                                  $fantastiques="true";
                              }
                              else
                              {
                              	echo "NON aux 4 fantastiques</br>";
                              	$fantastiques="false";
                              }

                              ça me semble pas mal et lorsque j'envoie un nouveau formulaire avec tout de coché j'ai bien mes variables qui passent à "true" :

                              array(8) { ["sexe"]=> string(2) "M." ["nom"]=> string(7) "CARRIER" ["prenom"]=> string(7) "Quentin" ["dateNaissance"]=> string(10) "1997-06-13" ["mail"]=> string(29) "quentincarrier74570@gmail.com" ["contact"]=> string(4) "true" ["articles"]=> array(3) { [0]=> string(9) "chariotte" [1]=> string(11) "fantastique" [2]=> string(12) "fantastiques" } ["message"]=> string(12) "TEST TOUT OK" }
                              On veux la chariotte
                              On veux la fantastique
                              On veux les 4 fantastiques

                              Vous avez bien transmis le formulaire

                              M.
                              CARRIER
                              Quentin
                              1997-06-13
                              quentincarrier74570@gmail.com
                              true
                              true
                              true
                              true
                              TEST TOUT OK

                              On est d'accord que $chariotte, $fantastique et $fantastiques sont à "true" et donc d'après le code ci-dessous mes données devraient s'insérer dans ma table contactachat?

                              $req = $bdd->prepare('INSERT INTO `contactachat`(`sexe`, `nom`, `prenom`, `dateDeNaissance`, `email`, `informe`, `chariotte`, `fantastique`, `fantastiques`, `commentaire`) VALUES(:sexe, :nom, :prenom, :dateDeNaissance, :email, :informe, :chariotte; :fantastique, :fantastiques, :commentaire)');
                              
                              $req->execute(array(
                              	'sexe' => $sexe,
                              	'nom' => $nom,
                              	'prenom' => $prenom,
                              	'dateDeNaissance' => $dateDeNaissance,
                              	'email' => $email,
                              	'informe' => $informe,
                              	'chariotte' => $chariotte,
                              	'fantastique' => $fantastique,
                              	'fantastiques' => $fantastiques,
                              	'commentaire' => $commentaire
                              	));

                              Mais mon problème est toujours présent... mes données ne veulent pas s'insérer dans la table contact achat :/ le seul moyen pour qu'une nouvelle ligne s'insère c'est que je commente mes entrées "chariotte", "fantastique" et "fantastiques" comme ci dessous:

                              $req = $bdd->prepare('INSERT INTO `contactachat`(`sexe`, `nom`, `prenom`, `dateDeNaissance`, `email`, `informe`,/* `chariotte`, `fantastique`, `fantastiques`,*/ `commentaire`) VALUES(:sexe, :nom, :prenom, :dateDeNaissance, :email, :informe, :chariotte; :fantastique, :fantastiques, :commentaire)');
                              
                              $req->execute(array(
                              	'sexe' => $sexe,
                              	'nom' => $nom,
                              	'prenom' => $prenom,
                              	'dateDeNaissance' => $dateDeNaissance,
                              	'email' => $email,
                              	'informe' => $informe,
                              	/*'chariotte' => $chariotte,
                              	'fantastique' => $fantastique,
                              	'fantastiques' => $fantastiques,*/
                              	'commentaire' => $commentaire
                              	));

                              Mais c'est alors logique que mes 3 données sont manquantes vu qu'elles sont commentées!

                              Mais quand je dé commente... j'ai plus rien qui rentre dans la BDD :/

                              Je comprends pas pourquoi mes trois variables veulent pas s'insérer alors que j'arrive à mettre toutes mes autres données?

                              Je sais pas si j'ai été clair ^^ 





                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 décembre 2020 à 16:51:55

                                Alors les 3 champs en base :

                                -chariotte

                                -fantastique

                                -fantastiques

                                Sont de quel type ?

                                Car la tu met :

                                $fantastiques="true";

                                Qui est une chaine de texte vu que tu l'a entouré de double quotes.

                                $fantastiques=true;

                                Comme ceci il aura la vrai valeur true.

                                Ce que tu peux faire c'est mettre les 3 champs en int

                                Si c'est coché tu met 1 et sinon tu met 0

                                Personnellement c'est comme ça que je représente un booléen en base

                                Cordialement,

                                Quillian

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Il n'y a pas de question idiote, seulement une réponse idiote

                                  2 décembre 2020 à 17:03:35

                                  Mes trois champs dans la BDD sont en varchar car je galerais à trouver un moyen pour en faire des booléens ^^ donc c'est pour ca que je leurs demande une chaine de caractère parce que j'ai réussi comme ca mais a terme je vais surement les passer en booléens seulement j'aimerais bien qu'ils s'écrivent dans la table avant ^^ 

                                  Je vais essayer de faire comme tu dis pour avoir des Booléens!

                                  J'ai mis une photo de ma BDD dans mon premier message si tu veux!

                                  Mais là où je suis perdu c'est que ma varible "contact" fonctionne alors que la logique est la même que pour mes trois variables problématiques...

                                  En tout cas merci encore pour l'aide que vous m'apportez!

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 décembre 2020 à 17:10:02

                                    Tiens moi au courant de ci cette méthode a marché sinon on fera plus de debug.

                                    Ce que tu peux faire d'autre c'est construire ta requête a la main comme tu as toutes les infos

                                    Et tu essaye de le rentrer sur phpMyAdmin dans l'onglet sql pour voir.

                                    Car autant le problème vient de la requête sql et phpMyAdmin te le diras directement.

                                    Cordialement,

                                    Quillian

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Il n'y a pas de question idiote, seulement une réponse idiote

                                      2 décembre 2020 à 17:47:19

                                      En passant en direct par mySQL ca fonctionne...

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 décembre 2020 à 23:50:01

                                        Bonsoir,

                                        Pour rappel, pas de htmlspecialschar sur les données entrée en BDD

                                        et plutôt que de dev en aveugle, il faut activé aussi les erreurs PDO (cf signature)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 décembre 2020 à 12:53:05

                                          Aurélien.C a écrit:

                                          Bonsoir,

                                          Pour rappel, pas de htmlspecialschar sur les données entrée en BDD

                                          et plutôt que de dev en aveugle, il faut activé aussi les erreurs PDO (cf signature)


                                          Bonjour, merci pour tes conseils! Mais si je ne met pas htmlspecialschar comme je l'ai fait je le fait où? 

                                          Après avoir activé les erreurs, je me retrouve avec celle ci :

                                          Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; 'true', 'true', 'Test avec erreurs\r\n')' at line 1 in C:\MAMP\htdocs\V0.5\traitement.php:108 Stack trace: #0 C:\MAMP\htdocs\V0.5\traitement.php(108): PDOStatement->execute(Array) #1 {main} thrown in C:\MAMP\htdocs\V0.5\traitement.php on line 108

                                          Je ne sais pas trop comment aborder cette erreur... toutefois quand je commente mes données issues de mes checkbox cette erreur disparaît.


                                          Je vais essayer de changer mes checkbox en bouton radio puisque le bouton radio au dessus fonctionne sans problème!

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 décembre 2020 à 14:00:53

                                            > the right syntax to use near '; 'true', 'true', 'Test avec erreurs\r\n')'

                                            Tu as mis un ; au lieu d'une , (entre :chariotte et :fantastique) :roll:

                                            Sinon il suffit de faire :

                                            $req->execute([
                                                # ...
                                                'chariotte' => (int) in_array('chariotte', $_POST['articles']),
                                                # ...
                                            ]);

                                            Pareil pour les autres. N'utilisez pas les chaînes 'true'/'false' quand le type booléen est fait pour ça !!!

                                            PS : la cast en int c'est pour transformer correctement FALSE en 0 sinon la cast directe de FALSE en string opérée par PDOStatement::execute va donner la chaîne vide.

                                            -
                                            Edité par julp 3 décembre 2020 à 14:05:46

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 décembre 2020 à 14:11:06

                                              julp a écrit:

                                              > the right syntax to use near '; 'true', 'true', 'Test avec erreurs\r\n')'

                                              Tu as mis un ; au lieu d'une , (entre :chariotte et :fantastique) :roll:


                                              Merci c'était effectivement ça l'erreur :)

                                              Je vais modifier tout ca pour que ce soit propre!! Encore merci pour votre aide a tous

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Checkbox et PHP vers BDD

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown