Mon $_POST est null
Résolu/Fermé
A voir également:
- Post null
- Post it windows - Télécharger - Agendas & Calendriers
- Brouillon post instagram - Guide
- Classement école d'informatique post bac - Forum Études / Formation High-Tech
4 réponses
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 694
3 avril 2020 à 16:47
3 avril 2020 à 16:47
Bonjour,
Déjà, merci d'indiquer, dans les balises de code, le langage. Cela permet d'avoir la coloration syntaxique, l'indentation et la numérotation des lignes.
Explications ( à lire en entier...) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite, ton code PHP se trouve dans le même fichier que ton formulaire html ?
Ajoute l'attribut ACTION à ton form
et fais nous donc un print_r de POST avant ton IF
Déjà, merci d'indiquer, dans les balises de code, le langage. Cela permet d'avoir la coloration syntaxique, l'indentation et la numérotation des lignes.
Explications ( à lire en entier...) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite, ton code PHP se trouve dans le même fichier que ton formulaire html ?
Ajoute l'attribut ACTION à ton form
<form method="post" action="">
et fais nous donc un print_r de POST avant ton IF
print_r($_POST); // juste le temps des tests pour voir ce qu'il contient
Merci pour votre réponse.
Je viens de mettre un print_r($_POST);
Il m'indique Array ( )
Voici le code avec les couleurs :
HTML
PHP
Je viens de mettre un print_r($_POST);
Il m'indique Array ( )
Voici le code avec les couleurs :
HTML
<form method="post" action=""> <div class="container_note"> <h2>Note</h2> <!-- etoile_1 --> <?php $etoile1 = 1 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_1" value="<?php $etoile1 ?>" <?php if($etoile1 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_1"> <img src="images/etoile_1.svg" alt="1 étoile" /> </label> </div> <!-- etoile_2 --> <?php $etoile2 = 2 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_2" value="<?php $etoile2 ?>" <?php if($etoile2 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_2"> <img src="images/etoile_2.svg" alt="2 étoiles" /> </label> </div> <!-- etoile_3 --> <?php $etoile3 = 3 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_3" value="<?php $etoile3 ?>" <?php if($etoile3 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_3"> <img src="images/etoile_3.svg" alt="3 étoiles" /> </label> </div> <!-- etoile_4--> <div class="form-check"> <?php $etoile4 = 4 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_4" value="<?php $etoile4 ?>" <?php if($etoile4 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_4"> <img src="images/etoile_4.svg" alt="4 étoiles" /> </label> </div> <!-- etoile_5 --> <div class="form-check"> <?php $etoile5 = 5 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_5" value="<?php $test ?>" <?php if($etoile5 == $product['note']){echo "checked";}?> > <label class="form-check-label" for="etoile_5"> <img src="images/etoile_5.svg" alt="5 étoiles" /> </label> </div> </div> <!-- date --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="date_commentaire">Date</label> <input value="<?=$product ['date']?>" name="date_commentaire" required class="form-control" type="date" /> </div> </div> <!-- commentaire --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="commentaire">Commentaire</label> <textarea name="commentaire" required class="form-control" id="commentaire" ><?= $product['texte']?></textarea> </div> </div> <!-- auteur --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="auteur">Auteur</label> <textarea name="auteur" required class="form-control" id="auteur"><?= $product['auteur']?></textarea> </div> </div> <!-- btn commentaire --> <div class="row"> <div class="col-sm-12"> <button value="submit" name="submit" type="submit" class="btn btn-primary">Envoyer commentaire</button> </div> </div> </form>
PHP
print_r($_POST); if ($_POST) { $data = [ 'etoile' => $_POST['etoile'], 'date_commentaire' => $_POST['date_commentaire'], 'commentaire' => $_POST['commentaire'], 'auteur' => $_POST['auteur'], ]; }
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 694
3 avril 2020 à 17:11
3 avril 2020 à 17:11
Après avoir renseigné des champs et cliqué sur submit ?
Pourrais tu nous afficher le code COMPLET et en un seul morceau (si sur la même page) ?
Il serait bien également que tu actives l'affichage des erreurs PHP
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Assures toi également que ton fichier est bien encodé en utf8 sans BOM (voir chapitre 1 de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8)
Pourrais tu nous afficher le code COMPLET et en un seul morceau (si sur la même page) ?
Il serait bien également que tu actives l'affichage des erreurs PHP
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Assures toi également que ton fichier est bien encodé en utf8 sans BOM (voir chapitre 1 de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8)
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 694
>
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
3 avril 2020 à 21:21
3 avril 2020 à 21:21
Je confirme que le code de ton formulaire est bon. (hormis l'utilisation de short tag qu'il faut éviter )
Par exemple, si tu créés un fichier test.php et que tu colles ça dedans ça devrait fonctionner
Bref, la seule raison pour laquelle ton $_POST pourrait rester vide (après avoir submit...) serait un souci d'encodage de ton fichier en utf8 ... ou une autre partie de ton code (que tu ne nous as pas montré...) qui pourrait poser problème.
Par exemple, si tu créés un fichier test.php et que tu colles ça dedans ça devrait fonctionner
<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); echo "<br><pre> Variables POST :<br>"; print_r($_POST); echo "</pre>"; if ($_POST) { $data = [ 'etoile' => $_POST['etoile'], 'date_commentaire' => $_POST['date_commentaire'], 'commentaire' => $_POST['commentaire'], 'auteur' => $_POST['auteur'], ]; echo "<br><pre> Variables data :<br>"; print_r($data); echo "</pre>"; } //---------------------------// $product['note'] = 4; $product['texte'] = "test"; $product['auteur'] = "moi"; $product ['date'] = "2020-04-03"; ?> <form method="post" action=""> <div class="container_note"> <h2>Note</h2> <!-- etoile_1 --> <?php $etoile1 = 1 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_1" value="<?php $etoile1 ?>" <?php if($etoile1 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_1"> <img src="images/etoile_1.svg" alt="1 étoile" /> </label> </div> <!-- etoile_2 --> <?php $etoile2 = 2 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_2" value="<?php $etoile2 ?>" <?php if($etoile2 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_2"> <img src="images/etoile_2.svg" alt="2 étoiles" /> </label> </div> <!-- etoile_3 --> <?php $etoile3 = 3 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_3" value="<?php $etoile3 ?>" <?php if($etoile3 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_3"> <img src="images/etoile_3.svg" alt="3 étoiles" /> </label> </div> <!-- etoile_4--> <div class="form-check"> <?php $etoile4 = 4 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_4" value="<?php $etoile4 ?>" <?php if($etoile4 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_4"> <img src="images/etoile_4.svg" alt="4 étoiles" /> </label> </div> <!-- etoile_5 --> <div class="form-check"> <?php $etoile5 = 5 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_5" value="<?php $test ?>" <?php if($etoile5 == $product['note']){echo "checked";}?> > <label class="form-check-label" for="etoile_5"> <img src="images/etoile_5.svg" alt="5 étoiles" /> </label> </div> </div> <!-- date --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="date_commentaire">Date</label> <input value="<?php echo $product ['date']?>" name="date_commentaire" required class="form-control" type="date" /> </div> </div> <!-- commentaire --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="commentaire">Commentaire</label> <textarea name="commentaire" required class="form-control" id="commentaire" ><?php echo $product['texte']?></textarea> </div> </div> <!-- auteur --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="auteur">Auteur</label> <textarea name="auteur" required class="form-control" id="auteur"><?php echo $product['auteur']?></textarea> </div> </div> <!-- btn commentaire --> <div class="row"> <div class="col-sm-12"> <button value="submit" name="submit" type="submit" class="btn btn-primary">Envoyer commentaire</button> </div> </div> </form>
Bref, la seule raison pour laquelle ton $_POST pourrait rester vide (après avoir submit...) serait un souci d'encodage de ton fichier en utf8 ... ou une autre partie de ton code (que tu ne nous as pas montré...) qui pourrait poser problème.
Merci à vous tous pour votre aide la solution a été trouvé grâce à vous.
J'ai passé mon formulaire en get et je me suis aperçu que les information passées dans l'url ne correspondaient pas du tout à ce que je voulais.
Il me manquait des echo dans ce code :
Et ma requête sql n'était pas bonne :)
Voici le code qui marche pour ceux qui le souhaitent
Html
PHP
J'ai passé mon formulaire en get et je me suis aperçu que les information passées dans l'url ne correspondaient pas du tout à ce que je voulais.
Il me manquait des echo dans ce code :
value="<?php echo $etoile1 ?>"
Et ma requête sql n'était pas bonne :)
Voici le code qui marche pour ceux qui le souhaitent
Html
<div class="container"> <h1> Nouveau commentaire </h1> <form method="post" action=""> <div class="container_note"> <h2>Note</h2> <!-- etoile_1 --> <?php $etoile1 = 1 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_1" value="<?php echo $etoile1 ?>" <?php if($etoile1 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_1"> <img src="images/etoile_1.svg" alt="1 étoile" /> </label> </div> <!-- etoile_2 --> <?php $etoile2 = 2 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_2" value="<?php echo $etoile2 ?>" <?php if($etoile2 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_2"> <img src="images/etoile_2.svg" alt="2 étoiles" /> </label> </div> <!-- etoile_3 --> <?php $etoile3 = 3 ?> <div class="form-check"> <input class="form-check-input" type="radio" name="etoile" id="etoile_3" value="<?php echo $etoile3 ?>" <?php if($etoile3 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_3"> <img src="images/etoile_3.svg" alt="3 étoiles" /> </label> </div> <!-- etoile_4--> <div class="form-check"> <?php $etoile4 = 4 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_4" value="<?php echo $etoile4 ?>" <?php if($etoile4 == $product['note']){echo "checked";}?>> <label class="form-check-label" for="etoile_4"> <img src="images/etoile_4.svg" alt="4 étoiles" /> </label> </div> <!-- etoile_5 --> <div class="form-check"> <?php $etoile5 = 5 ?> <input class="form-check-input" type="radio" name="etoile" id="etoile_5" value="<?php echo $etoile5 ?>" <?php if($etoile5 == $product['note']){echo "checked";}?> > <label class="form-check-label" for="etoile_5"> <img src="images/etoile_5.svg" alt="5 étoiles" /> </label> </div> </div> <!-- date --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="date_commentaire">Date</label> <input value="<?=$product ['date']?>" name="date_commentaire" required class="form-control" type="date" /> </div> </div> <!-- commentaire --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="commentaire">Commentaire</label> <textarea name="commentaire" required class="form-control" id="commentaire" ><?= $product['texte']?></textarea> </div> </div> <!-- auteur --> <div class="row"> <div class="col-sm-12"> <label class="label_formulaire" for="auteur">Auteur</label> <textarea name="auteur" required class="form-control" id="auteur"><?= $product['auteur']?></textarea> </div> </div> <!-- btn commentaire --> <div class="row"> <div class="col-sm-12"> <button value="submit" name="submit" type="submit" class="btn btn-primary">Envoyer commentaire</button> </div> </div> </form> </div>
PHP
<?php require_once(__DIR__ . '/config/database.php'); if($_GET){ $sql_recupere_commentaire= $pdo -> query ("SELECT * FROM comment where id=".$_GET['id']); $product = $sql_recupere_commentaire -> fetch(PDO::FETCH_ASSOC); } //print_r($_POST); //if ($_POST) { $data = [ 'date_commentaire' => $_POST['date_commentaire'], 'commentaire' => $_POST['commentaire'], 'etoile' => $_POST['etoile'], 'auteur' => $_POST['auteur'], 'id' => $_GET['id'], ]; //} $sql_modification_commentaire ="UPDATE comment SET date=:date_commentaire, texte=:commentaire, note=:etoile, auteur=:auteur WHERE id=:id"; $modification_commentaire = $pdo -> prepare ($sql_modification_commentaire); $modification_commentaire->execute($data); ?>
Bill-Billion
Messages postés
41
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
2 septembre 2020
3 avril 2020 à 19:26
3 avril 2020 à 19:26
$_POST est un array()<--un tableau
$_POST[' '] est un champ de ton tableau
Tout est mieux avec un exemple
puis verifie si vos champs ne sont pas vides
stockés vos variables $_POST dans des noms de variables differentes
Ex:
$_POST[' '] est un champ de ton tableau
Tout est mieux avec un exemple
//verifie que ton formulaire est envoyé avec if(isset($_POST['submit']))//name="submit" { }
puis verifie si vos champs ne sont pas vides
stockés vos variables $_POST dans des noms de variables differentes
Ex:
$etoile=$_POST['etoile']; $date_comment=$_POST['date_commentaire']; ....
Bonsoir,
Comme indiqué précédemment sans attribut action valable ça ne risque pas de fonctionner.
Pour rappel sur la balise HTML form :
l'atribut 'method' indique quelle méthode est employée, soit GET pour des données sur la même page, soit POST pour des données à envoyer à une autre page.
l'attribut 'action' indique à quelle page les données sont envoyées.
Pour vérifier il vous duffit de passer en method='GET' vous verrez bien si derrière l'adresse les champs s'affichent sous la forme de variables en chaînes de caractères lorsque le formulaire est envoyée.
Le test conventionnel des champs envoyés aux globales POST c'est
Cela permet de vérifier que la variable existe bien et qu'elle n'est pas nulle. Un champ vide est différent de null puisque qu'il contient rien. ( '' !== null).
Bien sûr il faut en plus vérifier toutes les champs qui le nécessitent et ajouter les éléments de sécurité mais déjà vous partez sur une bonne base avec ça puisque si les valeurs sont nulles ou qu'elles n'existent pas cela ne vient pas du formulaire donc à ne pas traiter.
Comme indiqué précédemment sans attribut action valable ça ne risque pas de fonctionner.
Pour rappel sur la balise HTML form :
l'atribut 'method' indique quelle méthode est employée, soit GET pour des données sur la même page, soit POST pour des données à envoyer à une autre page.
l'attribut 'action' indique à quelle page les données sont envoyées.
Pour vérifier il vous duffit de passer en method='GET' vous verrez bien si derrière l'adresse les champs s'affichent sous la forme de variables en chaînes de caractères lorsque le formulaire est envoyée.
Le test conventionnel des champs envoyés aux globales POST c'est
if (isset($_POST['nom_du_champ']) && $_POST['nom_du_champ'] !=null){ //-- c'est bon }
Cela permet de vérifier que la variable existe bien et qu'elle n'est pas nulle. Un champ vide est différent de null puisque qu'il contient rien. ( '' !== null).
Bien sûr il faut en plus vérifier toutes les champs qui le nécessitent et ajouter les éléments de sécurité mais déjà vous partez sur une bonne base avec ça puisque si les valeurs sont nulles ou qu'elles n'existent pas cela ne vient pas du formulaire donc à ne pas traiter.
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 694
>
JM-Banquer
3 avril 2020 à 21:23
3 avril 2020 à 21:23
Bonjour JM
peut plus simplement s'écrire :
if (isset($_POST['nom_du_champ']) && $_POST['nom_du_champ'] !=null){ //-- c'est bon }
peut plus simplement s'écrire :
if (!empty($_POST['nom_du_champ']) ){