Mon $_POST est null [Résolu]

Signaler
-
 Mira -
Bonjour,

Je suis débutante en php et j'ai besoin de votre aide.

Mon $_POST est null et je ne vois d'ou vient l'erreur.

Voici le code PHP


if ($_POST) {
$data = [
'etoile' => $_POST['etoile'],
'date_commentaire' => $_POST['date_commentaire'],
'commentaire' => $_POST['commentaire'],
'auteur' => $_POST['auteur'],
];
}


Voici le code html :


<form method="post">
<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 name="submit" type="submit" class="btn btn-primary">Envoyer commentaire</button>
</div>
</div>
</form>


Sauriez vous d'ou vient le problème svp ?

4 réponses

Messages postés
28928
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020
2 466
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
<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

<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'],
        ];
    }
Messages postés
28928
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020
2 466
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://www.commentcamarche.net/faq/48399-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://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8)
Messages postés
28928
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020
2 466 >
Messages postés
28928
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020

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

<?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 :
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);


?>
Messages postés
34
Date d'inscription
lundi 23 décembre 2019
Statut
Membre
Dernière intervention
26 avril 2020

$_POST est un array()<--un tableau
$_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
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.
Messages postés
28928
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020
2 466 > JM-Banquer
Bonjour JM
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']) ){