Bonjour,

Voila je rencontre un petit problème avec mon code.

J'ai créé un questionnaire. Il fonctionnait correctement jusqu'à ce que je veuille rajouter une question avec des checkbox. J'ai choisi de leur attribuer le même name que j'ai nommé comme ceci name=connaitre[]. J'utilise donc array puis implode afin d'insérer mes données en les séparant par une virgule si la personne coche plusieurs cases.

Code HTML

 <form method="post" action="reponses.php">

    <h2> 1. Comment avez-vous connu la visite ?</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>

Code PHP

<?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); // implode pour mettre à la suite les pièces de ton tableau dans une chaine de caractères en les séparant par un délimiteur

       $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>

J'obtiens ceci lors de l'envoi de mon formulaire.

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 !

Sur phpmyadmin, la réponse à la question 1 est complété par "Array".

Merci.

1 réponse


Bonjour,
Oui tu cherches à binder un array pour la "question1".
Si je suis ton programme, cela devrait etre "$connaitre_list", non ?

Sinon tu peut me donner l'intérêt de récupérer les données de $_POST pour les mettre dans une variable ($ouinon, $degre...) si tu ne t'en sers pas ensuite ?