J'ai créé un formulaire permettant à un utilisateur de renseigner certaines informations pour obtenir un devis de traiteur, et mon problème survient lorsque je tente d'enregistrer dans ma base de donnée, des valeurs issues de checkboxs.
En effet, l'utilisateur peut saisir certains types de régimes (exemple : végétalien, sans porc etc), et son choix peut-être multiple (d'où l'usage de checkboxs).
Pour autant, il peut ne vouloir sélectionner que deux régimes sur trois voir aucun (cette partie est facultative), mais en tout cas pour ma part, j'ai forcément besoin d'enregistrer son choix en base, pour que l'administrateur (le traiteur) puisse lire ses demandes de devis correctement du côté administrateur.
Du coup, j'ai prévu 3 colonnes dans ma base de données (regime1, regime2, regime3), et j'ai essayé d'enregistrer les valeurs checkboxs dans un tableau pour finalement le parcourir et générer des variables que je pourrais enregistrer par la suite.
Peut-être n'est-ce finalement pas ce qu'il faut faire ?
Je renvoie les données par AJAX vers le fichier devis-form-traitement.php :
<?php
session_start();
function insertDevis(){
try
{
$bdd = new PDO('mysql:host=localhost;dbname=sylvie;charset=utf8', 'root', 'motdepasse');
} catch (PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
$civilite = $_POST['options_genre'];
$nom = $_POST['name'];
$prenom = $_POST['firstname'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$evenement = $_SESSION['event'];
$dateE = $_POST['date'];
$heureE = $_POST['heure'];
$convives = $_POST['convives'];
$lieu = $_POST['lieu'];
$divers = $_POST['indications'];
$req = $bdd->prepare('INSERT INTO lm_devis (civilite, nom, prenom, email, telephone, evenement, dateE, heureE, convives, lieu, regime1, regime2, regime3, divers) VALUES (:civilite, :nom, :prenom, :email, :telephone, :evenement, :dateE, :heureE, :convives, :lieu, :regime1, :regime2, :regime3, :divers)');
$req->execute(array(
'civilite' => $civilite,
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'telephone' => $telephone,
'evenement' => $evenement,
'dateE' => $dateE,
'heureE' => $heureE,
'convives' => $convives,
'lieu' => $lieu,
'regime1' => $regime1,
'regime2' => $regime2,
'regime3' => $regime3,
'divers' => $divers
));
}
$message = "";
if(!isset($_POST['lieu']) && !isset($_POST['date']) && !isset($_POST['heure']) && !isset($_POST['convives']) && !isset($_POST['options_budget']) && !isset($_POST['budgetOption']) && !isset($_POST['options_genre']) && !isset($_POST['name']) && !isset($_POST['email'])){
$message = "Votre saisie est incorrecte, veuillez vérifier si :
- le lieu de l'événement a été saisi,
- la date et l'heure sont corrects,
- le nombre de convives est au nombre minimum de 15,
- votre budget a bien été défini,
- votre civilité et votre nom sont au moins renseignés,
- si votre email a bien été renseigné.";
}
else{
if(isset($_POST['allergies']) && empty($_POST['allergies']) || isset($_POST['firstname']) && empty($_POST['firstname']) || isset($_POST['telephone']) && empty($_POST['telephone']) || isset($_POST['indications']) && empty($_POST['indications'])){
$_POST['allergies'] == "Aucune allergie définie";
$_POST['firstname'] == "NULL";
$_POST['telephone'] == "NULL";
$_POST['indications'] == "Aucune préférences de contact n'a été renseigné";
}
if(isset($_POST['options_regimes']))
{
$tableauRegimes = array();
foreach($_POST['options_regimes'] as $valeur){
$tableauRegimes[] = $valeur;
}
$regime1 = $tableauRegimes[0];
$regime2 = $tableauRegimes[1];
$regime3 = $tableauRegimes[2];
}
insertDevis();
$message = "Super";
}
echo $message;
?>
J'ai le message "Super", mais rien n'est enregistré dans ma base car j'ai les erreurs suivantes :
Notice: Undefined variable: regime1 in D:\Lucie\Logiciels\wamp64\www\sylvie\wp-content\themes\sylvietraiteur\parts\devis-form-traitement.php on line 33
Notice: Undefined variable: regime2 in D:\Lucie\Logiciels\wamp64\www\sylvie\wp-content\themes\sylvietraiteur\parts\devis-form-traitement.php on line 34
Notice: Undefined variable: regime3 in D:\Lucie\Logiciels\wamp64\www\sylvie\wp-content\themes\sylvietraiteur\parts\devis-form-traitement.php on line 35
Je suis sûre que mon problème intervient dans ma façon de récupérer sous forme de variables, le contenu de mon tableau $tableauRegimes, mais honnêtemment là je ne trouve pas... S'il quelqu'un peut m'aider s'il vous plaît ?
Pas facile à lire ou à voir le numéro des lignes .... il faudrait que tu utilises le bouton marqué </> pour poster ton code.
Néanmoins, il me me semble qu'il y a un problème pour ta requête d'insert où tu indiques les marqueurs et variables $regimex alors qu'elles ne sont pas définies à ce moment là.
En fait au vu du fait que j'ai le bug de pas pouvoir cliquer sur signaler, citer sur les messages de ce topic, je dirais qu'il a bien cliquer et utilisé le bouton code mais que c'est le script OCR qui est planté sur cette page
ça m'arrivent de temps en temps et je sais pas ce qui provoque ça niveau code.
D'ailleurs je ne peux même pas éditer moi-même mon message donc désolé, s'il y a une faute
@monkey3d comme le dit quenti77 il doit y avoir un bug car c’est ce que j’ai fais.
Ensuite, tu veux dire que je devrais déclarer mes variables au débuts ? Il faudrait que j’essaie, effectivement, la déclarer comme nulle au départ m’aiderait peut-être, mais ma façon de faire avec le tableau ne te choque pas ?
Car en fait je me demandais comment incrémenter le chiffre d’une variable (ex : regime$i++ devient regime2) en fonction du nombre de données comprises dans d’un tableau (et la valeur de ma variable régime1 serait en fait la donnée 1 du tableau et ainsi de suite).
Je me disais c’est simple comme bonjour mais visiblement..
J'ai appliqué vos recommandations et ça ne fonctionne toujours pas
C'est-à-dire que j'ai déclaré mes variables $regime (1, 2, et 3) avant l'insert, et dans ma boucle for, en fonction de la taille de mon tableau $tableauRegimes, je déclare une variable dynamique tout en lui affectant la valeur appropriée ($regime1 = $tableauRegimes[1]), cependant, ça ne fonctionne pas.. ou ça n'a pas l'air, car ma page charge en continu, et rien ne se passe, je n'ai aucun message d'erreur.
Mon code PHP (en espérant que ça ne bug pas) :
<?php
session_start();
function insertDevis(){
try
{
$bdd = new PDO('mysql:host=localhost;dbname=sylvie;charset=utf8', 'root', 'motdepasse');
} catch (PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
$civilite = $_POST['options_genre'];
$nom = $_POST['name'];
$prenom = $_POST['firstname'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$evenement = $_SESSION['event'];
$dateE = $_POST['date'];
$heureE = $_POST['heure'];
$convives = $_POST['convives'];
$lieu = $_POST['lieu'];
$divers = $_POST['indications'];
$regime1 = '';
$regime2 = '';
$regime3 = '';
$req = $bdd->prepare('INSERT INTO lm_devis (civilite, nom, prenom, email, telephone, evenement, dateE, heureE, convives, lieu, regime1, regime2, regime3, divers) VALUES (:civilite, :nom, :prenom, :email, :telephone, :evenement, :dateE, :heureE, :convives, :lieu, :regime1, :regime2, :regime3, :divers)');
$req->execute(array(
'civilite' => $civilite,
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'telephone' => $telephone,
'evenement' => $evenement,
'dateE' => $dateE,
'heureE' => $heureE,
'convives' => $convives,
'lieu' => $lieu,
'regime1' => $regime1,
'regime2' => $regime2,
'regime3' => $regime3,
'divers' => $divers
));
}
$message = "";
if(!isset($_POST['lieu']) && !isset($_POST['date']) && !isset($_POST['heure']) && !isset($_POST['convives']) && !isset($_POST['options_budget']) && !isset($_POST['budgetOption']) && !isset($_POST['options_genre']) && !isset($_POST['name']) && !isset($_POST['email'])){
$message = "Votre saisie est incorrecte, veuillez vérifier si :
- le lieu de l'événement a été saisi,
- la date et l'heure sont corrects,
- le nombre de convives est au nombre minimum de 15,
- votre budget a bien été défini,
- votre civilité et votre nom sont au moins renseignés,
- si votre email a bien été renseigné.";
}
else{
if(isset($_POST['allergies']) && empty($_POST['allergies']) || isset($_POST['firstname']) && empty($_POST['firstname']) || isset($_POST['telephone']) && empty($_POST['telephone']) || isset($_POST['indications']) && empty($_POST['indications'])){
$_POST['allergies'] == "Aucune allergie définie";
$_POST['firstname'] == "NULL";
$_POST['telephone'] == "NULL";
$_POST['indications'] == "Aucune préférences de contact n'a été renseigné";
}
if(isset($_POST['options_regimes']))
{
$tableauRegimes = array();
$var = 'regime';
foreach($_POST['options_regimes'] as $valeur){
$tableauRegimes[] = $valeur;
}
$nbrRegime = sizeof($tableauRegimes);
for ($i=0; $i<$nbrRegime; $i++){
${$var}.$i = $tableauRegimes[$i];
}
}
insertDevis();
$message = "Super";
}
echo $message;
?>
Je sais que ma requête INSERT fonctionne autrement, car dans ma boucle for, j'avais essayé ça juste avant, et forcément, mes variables $regime1, et $regime2 étaient enregistrés dans ma bdd, mais vides, puisque je les ai déclarés ainsi au tout début :/
En fait @philodick, la condition ne me servait à rien. J'avais un doute à l'origine, mais j'en ai la confirmation au regard des enregistrements faits dans ma bdd.
Ou $regime1, $regime2, $regime3 sont enregistrés comme vide si aucun régime spécifique n'a été renseigné et plus loin pour l'affectation des données tableaux à mes variables générées (selon le nombre de données dans le tableau) j'ai fais :
Ben désolé je dois pas être douée, j'y ai regardé mais ça ne marche toujours pas même avec la portée des variables ^^'
En fait je créé une variable dynamique ${$dynamique.$i} = $tableauRegimes[$i]; dans ma boucle for tout en bas et je créé des variables globales de ces variables générées dans ma function insertDevis() Mais en fait mes variables ont l'air d'être vidées quand elles passent dans ma boucle ^^'
Mon code :
<?php
session_start();
$message = '';
function insertDevis(){
try
{
$bdd = new PDO('mysql:host=localhost;dbname=sylvie;charset=utf8', 'root', 'motdepasse');
$bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
} catch (PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
$civilite = $_POST['options_genre'];
$nom = $_POST['name'];
$prenom = $_POST['firstname'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$horaires_contact = $_POST['indications'];
$evenement = $_SESSION['event'];
$date_evenement = $_POST['date'];
$heure_evenement = $_POST['heure'];
$convives = $_POST['convives'];
$lieu = $_POST['lieu'];
$budget = $_POST['budgetOption']." ".$_POST['options_budget'];
global $regime1, $regime2, $regime3;
$regimes = $regime1.' '.$regime2.' '.$regime3;
$allergies = $_POST['allergies'];
$req = $bdd->prepare('INSERT INTO lm_devis (civilite, nom, prenom, email, telephone, horaires_contact, evenement, date_evenement, heure_evenement, convives, lieu, budget) VALUES (:civilite, :nom, :prenom, :email, :telephone, :horaires_contact, :evenement, :date_evenement, :heure_evenement, :convives, :lieu, :budget)');
$req->execute(array(
'civilite' => $civilite,
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'telephone' => $telephone,
'horaires_contact' => $horaires_contact,
'evenement' => $evenement,
'date_evenement' => $date_evenement,
'heure_evenement' => $heure_evenement,
'convives' => $convives,
'lieu' => $lieu,
'budget' => $budget
));
$id = $bdd->lastInsertId();
$req2 = $bdd->prepare('INSERT INTO lm_devis_regimes (devis, regimes, allergies) VALUES (:devis, :regimes, :allergies)');
$req2->execute(array(
'devis' => $id,
'regimes' => $regime1." ".$regime2." ".$regime3,
'allergies' => $allergies
));
}
if(!isset($_POST['lieu']) && !isset($_POST['date']) && !isset($_POST['heure']) && !isset($_POST['convives']) && !isset($_POST['options_budget']) && !isset($_POST['budgetOption']) && !isset($_POST['options_genre']) && !isset($_POST['name']) && !isset($_POST['email'])){
$message = "Votre saisie est incorrecte, veuillez vérifier si :
- le lieu de l'événement a été saisi,
- la date et l'heure sont corrects,
- le nombre de convives est au minimum de 15,
- votre budget a bien été défini,
- votre civilité et votre nom sont au moins renseignés,
- un moyen de contact a bien été renseigné.";
}
else{
if(isset($_POST['options_regimes'])){
$tableauRegimes = array();
foreach($_POST['options_regimes'] as $valeur){
$tableauRegimes[] = $valeur;
}
$nbrRegime = sizeof($tableauRegimes);
$regimes = '';
for ($i=0; $i<$nbrRegime; $i++){
$dynamique = 'regime'.$i;
${$dynamique.$i} = $tableauRegimes[$i];
}
insertDevis();
$message = "Super";
}
}
echo $message;
?>
Pour comprendre la portée des variables voici cette exemple :
$foo = "Foo";
function DireFooBar(){
echo $foo . "Bar";
}
ici $foo n'existe pas dans la porté interne de la fonction donc tu aura un 'undefined variable $foo'
Pareil si tu fait
function FooBar(){
$foobar = "FooBar";
}
FooBar();
echo $foobar; //Undefined
Infoxp ici depuis 2007
Traduire le contenu d'un tableau en variables
× 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.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
N'oubliez pas d'activer les erreurs PDO.