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 :

Insertion checkbox BDD


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Insertion checkbox BDD
    Bonjour,

    J'ai une question de mon questionnaire sous forme de checkbox dont une réponse avec un textarea. Lors de mes recherches j'ai vu plusieurs possibilités. Je souhaitais utiliser implode mais j'ai cette erreur qui s'affiche :
    Fatal error: Call to undefined method PDO::execute() in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php on line 22
    Je comprends que l'erreur me dit que je n'ai pas de requête préparée.
    Fatal error: Call to undefined method PDO::execute() in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php on line 24
    J'ai essayé de la faire mais sans succès... pouvez-vous m'aider ? Je suis débutante en PHP.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <?php
    // ouverture d'une connexion à la bdd viste
     
    try{
     
    $objetPdo = new PDO ('mysql:host=localhost;dbname=questionnaire','root','');
     
    // activation des erreurs PDO
     
    $objetPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    }
    catch(PDOException $e){   
        die('Erreur : '.$e->getMessage());
       }   
     
       if (isset($_POST['validform']))
       {
     
      $objetPdo ->prepare('INSERT INTO visite (question1) VALUES (:connaitre1, :connaitre2, :connaitre3, :connaitre4, :connaitre5)');
     
      $objetPdo->execute(array(':connaitre1, connaitre2, connaitre3, connaitre4, connaitre5'=>"'" . implode(",", $connaitre) . "'",
            )); 
     
           $ouinon = $_POST['ouinon'];
           $degre = $_POST['degre'];
           $amelioration = $_POST['amelioration'];
           $ouireanon = $_POST['ouireanon'];
           $departement = $_POST['departement'];
       }
     
     
    // préparation de la requête d'insertion
     
    $pdoStat = $objetPdo->prepare('INSERT INTO visite (question1, question2, question3, question4, question5, question6) VALUES (:question1, :question2, :question3, :question4, :question5, :question6)');
     
     
    // on lie chaque marqueur à une valeur
     
    $pdoStat->bindValue(':question1', $_POST['connaitre'], PDO::PARAM_STR);
     
    $pdoStat->bindValue(':question2', $_POST['ouinon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question3', $_POST['degre'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question4', $_POST['amelioration'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question5', $_POST['ouireanon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question6', $_POST['departement'], PDO::PARAM_STR); 
     
    //execution de la requête préparée 
     
    $insertIsOk = $pdoStat->execute();
     
    if($insertIsOk){
     
        $message = "Vos réponses ont bien été envoyées !";
    }
     
    else{
        $message = "Erreur";
    }
    ?>
     
    <!DOCTYPE html>
    <html lang='fr'>
    <head> 
     
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <link rel="stylesheet" href="style.css">
    <title> titre doc </title>
     
    </head>
     
    <body id="body2">
     
    <div id="divpara">
    <p class="parafinal"><?php echo $message; ?><br>Pour continuer à nous suivre, <br> rejoignez-nous sur les réseaux sociaux.</p>
    </div>
     
    <div>
    <a href="https://www.facebook.com/"><img id="fb" src="image/fb.png"></a>
    <a href="https://www.instagram.com/"><img id="fb" src="image/insta.png"></a>
    <a href="https://www.youtube.com/channel/"><img id="fb" src="image/youtube.png"></a>
    </div>
     
    </body>
    </html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu te trompes dans la syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = $objetPdo->prepare('.........');
    $result->execute(array(.......));
    A LIRE :

    Cela dit, le requête SQL et l'array sont aussi FAUX !

    Ce que je ne comprends pas, c'est que tu as la BONNE requête (lignes 35 à 54) !
    Dernière modification par Invité ; 10/08/2019 à 08h32.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je pensais qu'il fallait en faire une spécifique pour les checkbox.

    En effectuant des recherches j'ai trouvé la méthode foreach que je trouve plus simple à utiliser que implode. Je ne suis toujours pas parvenue à le faire fonctionner mais est ce que je suis sur la bonne voie ?

    Notice: Undefined index: connaitre[] in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php on line 41

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'question1' cannot be null' in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php:55 Stack trace: #0 C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php(55): PDOStatement->execute() #1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Formulaire\reponses.php on line 55
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <?php
    // ouverture d'une connexion à la bdd viste
     
    try{
     
    $objetPdo = new PDO ('mysql:host=localhost;dbname=questionnaire','root','');
     
    // activation des erreurs PDO
     
    $objetPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    }
    catch(PDOException $e){   
        die('Erreur : '.$e->getMessage());
       }   
     
       if (isset($_POST['validform']))
       {
     
        if(!empty($_POST['connaitre'])) {
     
            foreach($_POST['connaitre'] as $value){
                echo "value : ".$value.'<br/>';
            }
        }
     
           $ouinon = $_POST['ouinon'];
           $degre = $_POST['degre'];
           $amelioration = $_POST['amelioration'];
           $ouireanon = $_POST['ouireanon'];
           $departement = $_POST['departement'];
       }
     
     
    // préparation de la requête d'insertion
     
    $pdoStat = $objetPdo->prepare('INSERT INTO visite (question1, question2, question3, question4, question5, question6) VALUES (:question1, :question2, :question3, :question4, :question5, :question6)');
     
    // on lie chaque marqueur à une valeur
     
    $pdoStat->bindValue(':question1', $_POST['connaitre[]'], PDO::PARAM_STR);
     
    $pdoStat->bindValue(':question2', $_POST['ouinon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question3', $_POST['degre'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question4', $_POST['amelioration'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question5', $_POST['ouireanon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question6', $_POST['departement'], PDO::PARAM_STR); 
     
    //execution de la requête préparée 
     
    $insertIsOk = $pdoStat->execute();
     
    if($insertIsOk){
     
        $message = "Vos réponses ont bien été envoyées !";
    }
     
    else{
        $message = "Erreur";
    }
    ?>
     
    <!DOCTYPE html>
    <html lang='fr'>
    <head> 
     
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <link rel="stylesheet" href="style.css">
    <title> titre doc </title>
     
    </head>
     
    <body id="body2">
     
    <div id="divpara">
    <p class="parafinal"><?php echo $message; ?><br>Pour continuer à nous suivre, <br> rejoignez-nous sur les réseaux sociaux.</p>
    </div>
     
    <div>
    <a href="https://www.facebook.com/chocolats.malakoff"><img id="fb" src="image/fb.png"></a>
    <a href="https://www.instagram.com/malakoff.1855"><img id="fb" src="image/insta.png"></a>
    <a href="https://www.youtube.com/channel/UC3am7snjedwIjkI2AfrZ_1w"><img id="fb" src="image/youtube.png"></a>
    </div>
     
    </body>
    </html>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdoStat->bindValue(':question1', $_POST['connaitre[]'], PDO::PARAM_STR);
    Çà, ça ne peut pas fonctionner...

    1- Montre le code du formulaire HTML (code de tes checkbox).

    2- A SAVOIR : SEULES les checkbox COCHEES sont transmises (par $_POST ou $_GET).
    Donc, il faut d'abord vérifier que $_POST['connaitre'] existe (au moins une checkbox cochée)
    Dernière modification par rawsrc ; 12/08/2019 à 12h45.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Voici mon code html des checkbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        <h2> 1. Comment avez-vous connu la visite de la fabrique ?</h2>
        <p>
            <input type="checkbox" name="connaitre[]" value="Site" id="site" /> <label for="site">Site internet </label><br />
            <input type="checkbox" name="connaitre[]" value="Office de tourisme" id="tourisme" /> <label for="tourisme">Office de tourisme</label><br />
            <input type="checkbox" name="connaitre[]" value="Réseaux sociaux" id="rs" /> <label for="rs">Réseaux sociaux</label><br />
            <input type="checkbox" name="connaitre[]" value="Brochure" id="brochure" /> <label for="brochure">Brochure</label><br />
            <input type="checkbox" name="connaitre[]" value="Autre" placeholder="Ex : Bouche à oreille" id="brochure"/><label for="autre"> Autre</label> <textarea id="texta1" name="autre" id="autre"></textarea> 
        </p>

  6. #6
    Invité
    Invité(e)
    Par défaut
    OK.

    1- Donc, on récupère les checkbox cochées avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connaitre_array = ( isset($_POST['connaitre']) )? $_POST['connaitre'] : ''; // array
    2- Si on veut sous forme de liste de valeurs, séparées par des virgules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connaitre_list = implode( ',', $connaitre_array); // chaine
    A toi de nous dire comment tu souhaites les enregistrer dans ta table de bdd (tes noms de colonnes question1, question2,... ne sont pas du tout explicites...).

    3- Pour savoir ce que contient l'array et la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump( $connaitre_array ); // TEST
    echo $connaitre_list;
    Dernière modification par Invité ; 12/08/2019 à 11h21.

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Du coup, je supprime le foreach et je le remplace par le array/implode ?

    Oui ce n'est pas explicite vu comme cela mais le questionnaire est très court, la personne qui sera en charge de relever les données ne sera pas perdue.

    Dans ma BDD je souhaiterai que si on clique sur le checkbox "Site" et "Office de tourisme". Dans phpmyadmin soit affiché "Site, Office de tourisme" ou " Site
    Office de tourisme" peu m'importe tant que c'est lisible. Je préfère aller au plus simple.

  8. #8
    Invité
    Invité(e)
    Par défaut
    C'est donc $connaitre_list qu'il faut enregistrer dans la colonne.

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdoStat = $objetPdo->prepare('INSERT INTO visite (question1, question2, question3, question4, question5, question6) VALUES ($connaitre_list, :question2, :question3, :question4, :question5, :question6)');
    Le test avec var_dump me sort :

    string(0) ""

  10. #10
    Invité
    Invité(e)
    Par défaut
    1- Non.
    Avec la bonne syntaxe (comme les autres valeurs).

    Il faut que tu fasses un minimum d'effort pour apprendre... Et comprendre !
    Je t'ai donné des liens vers des tutos...


    2- si le var_dump renvoie "", c'est qu'aucune case n'est cochée.

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai lu les liens que tu m'as envoyé, j'essaye de comprendre.. mais je trouve pas ça simple. J'ai très bien réussi au début sans la question à checkbox mais depuis que je l'ai rajouté c'est la cata.

    J'obtiens maintenant ceci, sur phpmyadmin, la colonne question 1 est complété par "Array" et non pas parles valeurs site et office que j'ai coché pour tester.

    array(2) { [0]=> string(4) "Site" [1]=> string(18) "Office de tourisme" } Site,Office de tourisme


    Notice: Array to string conversion in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\for\reponses.php on line 35


    Vos réponses ont bien été envoyées !


    Merci

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <?php
    // ouverture d'une connexion à la bdd viste
     
    try{
     
    $objetPdo = new PDO ('mysql:host=localhost;dbname=questionnaire','root','');
     
    // activation des erreurs PDO
     
    $objetPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    }
    catch(PDOException $e){   
        die('Erreur : '.$e->getMessage());
       }   
     
       if (isset($_POST['validform']))
       {
           $connaitre_array = ( isset($_POST['connaitre']) )? $_POST['connaitre'] : ''; 
           $connaitre_list = implode( ',', $connaitre_array); // met à la suite les pièces du tableau dans une chaine de caractères en les séparant par une virgule
           $ouinon = $_POST['ouinon'];
           $degre = $_POST['degre'];
           $amelioration = $_POST['amelioration'];
           $ouireanon = $_POST['ouireanon'];
           $departement = $_POST['departement'];
       }
     
       var_dump( $connaitre_array ); // TEST
       echo $connaitre_list;
     
    // préparation de la requête d'insertion
     
    $pdoStat = $objetPdo->prepare('INSERT INTO visite (question1, question2, question3, question4, question5, question6) VALUES (:question1, :question2, :question3, :question4, :question5, :question6)');
     
    // on lie chaque marqueur à une valeur
    $pdoStat->bindValue(':question1', $_POST['connaitre'], PDO::PARAM_STR);
     
    $pdoStat->bindValue(':question2', $_POST['ouinon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question3', $_POST['degre'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question4', $_POST['amelioration'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question5', $_POST['ouireanon'], PDO::PARAM_STR); 
     
    $pdoStat->bindValue(':question6', $_POST['departement'], PDO::PARAM_STR); 
     
     
    //execution de la requête préparée 
     
    $insertIsOk = $pdoStat->execute();
     
    if($insertIsOk){
     
        $message = "Vos réponses ont bien été envoyées !";
    }
     
    else{
        $message = "Erreur";
    }
    ?>
     
    <!DOCTYPE html>
    <html lang='fr'>
    <head> 
     
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <link rel="stylesheet" href="style.css">
    <title> titre doc </title>
     
    </head>
     
    <body id="body2">
     
    <div id="divpara">
    <p class="parafinal"><?php echo $message; ?></p>
    </div>
     
    </body>
    </html>

  12. #12
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdoStat->bindValue(':question1', $connaitre_list, PDO::PARAM_STR);
    Les bonnes logique + syntaxe sont :
    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
    if (isset($_POST['validform']))
    {
    	// récupération des données du formulaire
    	$connaitre_array = ( isset($_POST['connaitre']) )? $_POST['connaitre'] : ''; // array des checkbox cochées
    	$connaitre_list = implode( ',', $connaitre_array); // met à la suite les pièces du tableau dans une chaine de caractères en les séparant par une virgule
    	$ouinon = $_POST['ouinon'];
    	$degre = $_POST['degre'];
    	$amelioration = $_POST['amelioration'];
    	$ouireanon = $_POST['ouireanon'];
    	$departement = $_POST['departement'];
     
    	// préparation de la requête d'insertion
    	$pdoStat = $objetPdo->prepare('INSERT INTO visite (question1, question2, question3, question4, question5, question6) VALUES (:question1, :question2, :question3, :question4, :question5, :question6)');
     
    	// on lie chaque marqueur à une valeur
    	$pdoStat->bindValue(':question1', $connaitre_list, PDO::PARAM_STR);
    	$pdoStat->bindValue(':question2', $ouinon, PDO::PARAM_STR); 
    	$pdoStat->bindValue(':question3', $degre, PDO::PARAM_STR); 
    	$pdoStat->bindValue(':question4', $amelioration, PDO::PARAM_STR); 
    	$pdoStat->bindValue(':question5', $ouireanon, PDO::PARAM_STR); 
    	$pdoStat->bindValue(':question6', $departement, PDO::PARAM_STR); 
     
    	//execution de la requête préparée 
    	$insertIsOk = $pdoStat->execute();
     
    	if($insertIsOk){
    		$message = "Vos réponses ont bien été envoyées !";
    	}
    	else{
    		$message = "Erreur";
    	}
    }

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/04/2015, 20h16
  2. [MySQL] Insertion checkbox dans bdd mysql
    Par abdias1976 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 19/04/2010, 16h48
  3. pb double insertion dans BDD
    Par oceane751 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/12/2005, 09h59
  4. [SGBD] formulaire insertion date Bdd Mysql
    Par Mimisator dans le forum Administration
    Réponses: 7
    Dernier message: 30/11/2005, 09h38
  5. Insertion dans BDD type ACCESS
    Par NeHuS dans le forum ASP
    Réponses: 2
    Dernier message: 20/04/2005, 10h53

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