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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du 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
    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
    Futur Membre du 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
    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
    Futur Membre du 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
    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.

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