Bonjour,
Je rencontre un problème avec mon code. Mon professeur nous a donnée la consigne de réaliser un formulaire qui permet de récupérer les informations entrer par l'utilisateur et de les afficher mais aussi de bloquer dans le cas ou l'un des champ n'est pas rempli et de mémoriser les choix précédents de l'utilisateur. J'ai, donc, écrit ce code :

<html>
<head>
    <meta charset="utf-8">
    <title>TD1</title>
    <body>
    <?php

if (!isset($_POST['Nom']) && !isset($_POST['Prenom'])){ 
    echo "<FORM action='affiche.php' method='POST'> ";
    echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='" . $_POST['Nom'] . "'> ";
    echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='" . $_POST['Prenom'] . "'> ";
    echo "<INPUT type='SUBMIT' value='et hop!'> ";
    echo "</FORM>";} 
else {
    if (!empty($_POST['Nom']) && !empty($_POST['Prenom']))
    {
    echo '<h3>Informations récupérées en utilisant POST</h3>'; 
    echo 'Nom : ' . $_POST['Nom'] . ' Prenom : ' . $_POST['Prenom'] ; 
    }
    else
    header('location: /affiche.php');}
    ?>
    </body>
</html>

Ce que je veux
Je ne sais pas ce qui cloche, mais j'ai besoin de votre aide. J'aimerai savoir ce qui empeche mon code fonctionner pour la mémorisation du choix de l'utilisateur.

Ce que j'obtiens
Chaque fois que j'éxécute le code, les deux messages d'erreur suivant, s'affichent :

Warning: Undefined array key "Nom" in C:\xampp\htdocs\affiche.php on line 10
Warning: Undefined array key "Prenom" in C:\xampp\htdocs\affiche.php on line 11

18 réponses


Carouge10
Réponse acceptée

du coup c'est faux !
le $name avant le ; n'est jamais déclaré.
a la place de ce dernier, il faudrait le remplacer par ""

JoolsMcFly
Réponse acceptée

Salut.

Le formulaire est également répété. Autant déterminer les valeurs de nom et prénom au début puis afficher le formulaire une seule fois :

<?php
$lastname = '';
$firstname = '';
if (!empty($_POST['lastname'])) {
    $lastname = $_POST['lastname'];
}
if (!empty($_POST['firstname'])) {
    $firstname = $_POST['firstname'];
}

// pas besoin de faire des echo pour afficher du HTML
?>
<form action="affiche.php" method="post">
Nom : <input type="text" name="lastname" size="10" value="<?=$lastname;?>"><br>
Prénom : <input type="text" name="firstname" size="10" value="<?=$firstname;?>"><br>
<input type="submit" value="Et hop!">
</form>

Bonsoir,

Lors du 1er chargement de la page, $_POST n'existe pas donc tu ne peux afficher leurs valeurs dans tes inputs
renseigne-toi sur les "conditions ternaires"

autre chose, la fonction "header" ne doit JAMAIS être précédé de html. Dans l'état actuel, elle va forcément planté une fois le code en ligne

Hello :)

Alors dans ton code tu vérifies si il existe un post "Nom", si ça n'existe pas, alors tu ajoutes un formulaire en mettant en value... Le post "Nom" qui n'existe pas, du coup ça marche pas xD

Après si c'est pour gérer le fait que quand le nom existe mais pas le prénom, tu doit ajouter une valeur par défault:

    echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='" . $_POST['Nom'] ?? '' . "'> ";
    echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='" . $_POST['Prenom'] ?? '' . "'> ";

$_POST['Nom'] ?? '' va essayer de récupérer le post "Nom", si il n'existe pas il va mettre la valeur par défaut placé après le ?? qui est une chaine vide ''

Ah et tu as oublié de fermer ta balise </head> avant d'ouvrir <body>

BOUBOU28
Auteur

Bonjour Carouge10 et popette, tout d'abord, merci pour vos retour à tout les deux.
Alors, En ce qui concerne les conditions ternaires, c'est une structure que ne peux pas adoptée. Ce format avec les if, else nous a été imposée. On ne peux pas utiliser autre chose. Sans compter que je viens tout juste de commencer en php. Je suis désolée. Ensuite, pour le header, que voulez vous dire par ne pas précédée? Est ce que je dois complètement l'enlever ? Si oui, avez-vous une alternative à me proposer svp?
J'ai aussi, essayé, l'alternative que vous avez proposez, popotte, mais le problème demeure à chaque fois le même. Je vous fait, un copier coller, des messages d'erreur afficher à la place :
Warning: Undefined array key "Nom" in C:\xampp\htdocs\affiche.php on line 10
<br /><b>Warning</b>: Undefined array key "Prenom" in <b>C:\xampp\htdocs\affiche.php</b> on line <b>11</b><br /> Prenom : <INPUT type=

Sinon, la balise head a été refermée. Je n'avais pas remarquée. Merciii :)

pour le header, il doit être mis avant le html.

vu que tu n'as pas le droit au ternaire, il va te falloir utiliser la structure elseif

si le formulaire est rempli mais que j'ai une erreur alors je l'affiche avec ses précédents données
sinon si le formulaire n'existe pas, je l'affiche
sinon je traite le formulaire

Ah bah si tu n'as pas le droit aux ternaires (sérieux? le ternaire ça a pour seul but de rendre le code plus lisible, tu transmettra à la personne qui te la imposéé que c'est idiot, forcer à ignorer des features pour "suivre le programme qui date de l'époque de php4 quand les ternaires ça n'existait pas", c'est mon coup de gueule du jour ^^) tu devra faire des if sans ternaires x)

    echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='" . if(isset($_POST['Nom']) { $_POST['Nom'] } else { '' } . "'> ";
    echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='" . if(isset($_POST['Prenom']) { $_POST['Prenom'] } else { '' } . "'> ";
BOUBOU28
Auteur

J'ai tenter de changer l'ordre de mon code, Carouge 10. Mais le même problème persiste, c'est toujours Array key qui s'affiche et qui demande c'est quoi Nom et Prénom.
J'ai copier coller littéralement, les lignes de codes que vous m'avez envoyer popotte. Voici le message afficher :
Parse error: syntax error, unexpected token "if" in C:\xampp\htdocs\affiche.php on line 10
Il n'a pas l'air d'accepter le IF.

pour le if de popotte, il manque la parenthèse fermante du if
si tu utilises un éditeur de code, il devrait te le signaler

BOUBOU28
Auteur

J'ai rajouter la paranthèse (si c'est bien à cette endroit)
echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='" . if (isset($_POST['Nom'])) { $_POST['Nom'] } else { '' }. "'> ";
echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='" . if (isset($_POST['Prenom']) { $_POST['Prenom'] }) else { '' } . "'> ";

Mais le même message d'erreur s'affiche : syntax error, unexpected 'if' (T_IF)

Oops ^^' ouai j'ai écris trop vite, comme caroube a dit faut fermer la parenthèse if, la y a que la parenthèse isset qui est fermée ^^'

echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='" . if (isset($_POST['Nom'])) { $_POST['Nom']; }. "'> ";
echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='" . if (isset($_POST['Prenom'])) { $_POST['Prenom']; }. "'> ";

*like* :p

BOUBOU28
Auteur

hahahaha, le problème est toujours le même :)
Désolé.
Parse error: syntax error, unexpected token "if" in C:\xampp\htdocs\affiche.php on line 10

BOUBOU28
Auteur

Au final, j'ai trouver la solution. Merci pour votre aide à tout les deux. Je vous envoie, tout de même, une copie du code pour que vous voyez à quoi cela ressemble.
<html>
<head>
<meta charset="UTF-8">
<title>TD1</title>
</head>
<body>
<?php

if (!isset($_POST['Nom']) && !isset($_POST['Prenom'])) {
    echo "<FORM action='affiche.php' method='POST'>";
    echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value=''>";
    echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='' >";
    echo "<INPUT type='SUBMIT' value='et hop!'>";
    echo "</FORM>";
} else {
    if (!empty($_POST['Nom']) && !empty($_POST['Prenom'])) {
        echo '<h3>Informations récupérées en utilisant POST</h3>';
        echo 'Nom : ' . $_POST['Nom'] . ' <br> Prenom : ' . $_POST['Prenom'];
    } else {
        $name = isset($_POST['Nom']) ? $_POST['Nom'] : $name ;
        $prenom = isset($_POST['Prenom']) ? $_POST['Prenom'] : $prenom ;
        echo "<FORM action='affiche.php' method='POST'>";
        echo " Nom : <INPUT type='TEXT' name='Nom' size=10 value='". $name ."'>";
        echo " Prenom : <INPUT type='TEXT' name='Prenom' size=10 value='". $prenom ."' >";
        echo "<INPUT type='SUBMIT' value='et hop!'>";
        echo "</FORM>";
    }
}
?>

</body>
</html>

Voila. Je ne vous souhaite que du bien et merci encore :)
Bonne soirée à vous.

d'accord, et tu le déclares où ton $name et $prenom ?

BOUBOU28
Auteur

En dessous du else. J'ai revue mon prof en php et il m'as dit de faire comme ça

merci pour les conseils utiles!