Page 1 sur 1

Message d'erreur au démarrage du programme

Posté : 25 févr. 2017, 10:42
par quattro
Bonjour
Toujours dans le cas d'un de mes devoirs, j'ai un bout de code(ci-après), qui me permet à l'aide d'un Formulaire, de chercher une ville dans une BDD, si elle existe biensur.
Mon soucis est que, lorsque je démarre le programme, étant donné que le formulaire est vide il me met une erreur :
Notice: Undefined index: ville_nom!
Je n’arrive pas a me dépatouiller de ça. Je comprend l'erreur (je pense) mais je ne sais pas ou placé du code pour rectifier cela.

Code : Tout sélectionner

<!-- Formulaire --> <div id="cadre1"> <h1>Chercher une ville</h1> <form method="post"> <p>Nom de la ville : <input type="text" name="ville_nom" /></p> <p><input type="submit" value="valider" /></p> </form> </div> <?php // 1. connection à la base $mysqli = new mysqli('localhost','root','','projet_villes'); // 2. Vérification de la connexion if (mysqli_connect_errno()) { echo "Echec de connexion, veuillez vérifier le login ou le Mdp : " . mysqli_connect_error(); exit(); } // 4. récupération du POST $city_name = $_POST['ville_nom']; // 5. cherche la ville if ($result = $mysqli->query ('SELECT ville_id,ville_nom FROM villes WHERE ville_nom LIKE ("'.$city_name.'")')); while ($row = $result->fetch_array()){ $ville_id = $row['ville_id']; $ville_nom = $row['ville_nom']; $villes[$ville_id] = $ville_nom; } ?> <ul><?php foreach ($villes as $id => $noms):?> <li><a href="index.php"><?php echo $noms ?></a></li> <?php endforeach ?> </ul>

Re: Message d'erreur au démarrage du programme

Posté : 25 févr. 2017, 16:33
par @rthur
Bonjour,

Avant d'utiliser une variable, il faut que tu vérifie qu'elle existe par exemple avec isset()

Dans ton cas, il faut donc que tu vérifies si ta variable en $_POST existe, si ce n'est pas le cas, c'est que le formulaire n'a pas été envoyé et donc tu ne dois pas effectuer ton traitement PHP

Re: Message d'erreur au démarrage du programme

Posté : 25 févr. 2017, 19:58
par quattro
j'ai rajouter en 3. le code :

Code : Tout sélectionner

if (mysqli_connect_errno()) { echo "Echec de connexion, veuillez vérifier le login ou le Mdp : " . mysqli_connect_error(); exit(); } // 3. Vérification de l'existance de la variable en $_POST if (empty($_POST['ville_nom'])) {echo 'le champ est vide';} // 4. récupération du POST $city_name = $_POST['ville_nom']; // 5. cherche la ville if ($result = $mysqli->query ('SELECT ville_id,ville_nom FROM villes WHERE ville_nom LIKE ("'.$city_name.'")')); while ($row = $result->fetch_array()){ $ville_id = $row['ville_id']; $ville_nom = $row['ville_nom']; $villes[$ville_id] = $ville_nom; }
mais il me met tjrs les messages d'erreurs : Notice: Undefined variable: villes et Warning: Invalid argument supplied for foreach()
je pense qu'en fait il test bien que mon $_POST est vide au demarrage, il me le dit "echo 'c'est vide'" mais il continue en acedant dans la BDD..

Re: Message d'erreur au démarrage du programme

Posté : 25 févr. 2017, 20:12
par or 1
c'est bien ce que fait ce code :
if (empty($_POST['ville_nom']))
{echo 'le champ est vide';}
or, ce n'est pas ce qui est voulu. il faut donc faire quelques changements pour arriver au résultat escompté.

Re: Message d'erreur au démarrage du programme

Posté : 27 févr. 2017, 22:35
par quattro
bonjour
je bloque vraiment ; voici mon code :

Code : Tout sélectionner

<!-- Formulaire --> <div id="cadre1"> <h1>Chercher une ville</h1> <form method="post"> <p>Nom de la ville : <input type="text" name="ville_nom" /></p> <p><input type="submit" value="valider" /></p> </form> </div> <?php // 1. Vérification du $_POST, si vide if (empty($_POST['ville_nom'])) // si oui {echo 'le champ est vide, tapez une ville ';} else { // 2. si non, connection à la base $mysqli = new mysqli('localhost','root','','projet_villes'); // 3. Vérification de la connexion if (mysqli_connect_errno()) { echo "Echec de connexion, veuillez vérifier le login ou le Mdp : " . mysqli_connect_error(); exit(); } // 4. récupération du POST $city_name = $_POST['ville_nom']; // 5. recherche de la ville si existante if ($result = $mysqli->query ('SELECT ville_id,ville_nom FROM villes WHERE ville_nom LIKE ("'.$city_name.'")')); while ($row = $result->fetch_array()){ $ville_id = $row['ville_id']; $ville_nom = $row['ville_nom']; $villes[$ville_id] = $ville_nom; }} ?> <ul><?php foreach ($villes as $id => $noms):?> <li><a href="index.php"><?php echo $noms?></a></li> <?php endforeach ?> </ul>
Je comprend que si il verifie que mon POST est vide il me dit bien "le champ est vide, tapez une ville", mais ensuite il va directement sur ma boucle FOREACH et c'est là qu'il me trouve l'erreur "Notice: Undefined variable: villes".. je n'arrive pas a lui interdire d'aller là tant que le champ est vide..

Re: Message d'erreur au démarrage du programme

Posté : 28 févr. 2017, 08:34
par reg35
Salut,

Arthur et or1 t'ont pourtant bien aiguillé, limite donner la réponse.

tu fais

Code : Tout sélectionner

// 3. Vérification de l'existance de la variable en $_POST if (empty($_POST['ville_nom'])) {echo 'le champ est vide';}
empty() ne vérifie pas l'existence d'une variable mais vérifie juste que cette variable ne soit pas vide.

il faut que tu utilise isset() qui vérifie l'existence de ta variable, tu peux cumuler les 2 vérifications également si besoin.

Code : Tout sélectionner

// 3. Vérification de l'existance de la variable en $_POST if (isset($_POST['ville_nom']) AND empty($_POST['ville_nom'])) {echo 'le champ est vide';}
Cadeaux.

Re: Message d'erreur au démarrage du programme

Posté : 28 févr. 2017, 12:03
par moogli
salut,

@reg35 empty n’émet pas d'erreur et retour true si la variable n'existe pas
Détermine si une variable est considérée comme vide. Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE. La fonction empty() ne génère pas d'alerte si la variable n'existe pas.
Retourne FALSE si var existe et est non-vide, et dont la valeur n'est pas zéro.

Ce qui suit est considéré comme étant vide :

"" (une chaîne vide)
0 (0 en tant qu'entier)
0.0 (0 en tant que nombre à virgule flottante)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
$var; (une variable déclarée, mais sans valeur)
une variable ou index qui n'existe sont considéré comme étant null et donc vide. empty retourne donc true lorsque l'on test un truc qui n'existe pas :)

donc dans if (isset($_POST['ville_nom']) AND empty($_POST['ville_nom'])) le isset et redondant est redondant

if (empty($_POST['ville_nom']))
{echo 'le champ est vide';}
suffit

@quattro : il faut utiliser l'alternative else

si le champs est vide tu fais rien mais s'il n'est pas vide tu bosses.
d'ailleurs tu le fais déjà mais juste pour la requête SQL
il faut que tout le reste soit dans ton else, l'accolade fermante doit être à la dernière ligne du script que tu indiques (dans un passage php ;) ).

le plus simple c'est de faire l'affichage dans la boucle while pas besoin du tableau intermédiare.
pense aussi à utiliser mysqli_free_result ou dans ton cas la version poo $result ->free().

@+

Re: Message d'erreur au démarrage du programme

Posté : 28 févr. 2017, 20:15
par quattro
Oufff.
Je crois que je tiens le bon bout. En tout cas cela fonctionne. Je peu continuer la suite;
Merci à vous.

Code : Tout sélectionner

<!-- Formulaire --> <div id="cadre1"> <h1>Chercher une ville</h1> <form method="post"> <p>Nom de la ville : <input type="text" name="ville_nom" /></p> <p><input type="submit" value="valider" /></p> </form> </div> <?php // 1. Vérification du $_POST, si vide if (empty($_POST['ville_nom'])) // si oui {echo 'le champ est vide, tapez une ville ';} else { // 2. si non, connection à la base $mysqli = new mysqli('localhost','root','','projet_villes'); // 3. Vérification de la connexion if (mysqli_connect_errno()) { echo "Echec de connexion, veuillez vérifier le login ou le Mdp : " . mysqli_connect_error(); exit(); } // 4. récupération du POST $city_name = $_POST['ville_nom']; // 5. recherche de la ville si existante if ($result = $mysqli->query ('SELECT ville_id,ville_nom FROM villes WHERE ville_nom LIKE ("'.$city_name.'")')); while ($row = $result->fetch_array()){ $ville_id = $row['ville_id']; $ville_nom = $row['ville_nom']; $villes[$ville_id] = $ville_nom; echo '<ul>'; echo '<li><a href="index.php"></a>'.$ville_id. '-' .$ville_nom.'</li>'; echo '</ul>'; //var_dump($villes); } /* Libération des résultats */ $result->free(); /* Fermeture de la connexion */ $mysqli->close(); } ?>

Re: Message d'erreur au démarrage du programme

Posté : 01 mars 2017, 10:59
par moogli
de rien ;)

pense à cliquer sur le bouton résolus a gauche du titre lorsque c'est le cas stp ;)

je le fait pour toi :)

@+