problème enregistrement dans une base de donné

Sam67
Invité n'ayant pas de compte PHPfrance

27 janv. 2016, 20:09

Bonjour,
J'ai un problème survenu lors d'un enregistrement d'un formulaire dans la bdd.

voici l'erreur:

Image

Et voici le code :

Code : Tout sélectionner

<?php mysql_connect ('*****','*****','*****') or die ('erreur de connexion'); mysql_select_db('phpmembre') or dir ('erreur de trouver la base'); $query='select * from conx'; $result=mysql_query ($query); while($rows=mysql_fetch_row($result)) { $id=$rows[1]; $pseudo=$rows[2]; $skype=$rows[3]; $email=$rows[4]; $theme=$rows[5]; $comments=$rows[6]; $date_message=$rows[7]; } $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>"; $msg_ok = "Votre demande a bien été prise en compte."; $message = $msg_erreur; // vérification des champs if (empty($_POST['pseudo'])) $message .= "Votre pseudo<br/>"; if (empty($_POST['email'])) $message .= "Votre email<br/>"; if (empty($_POST['theme'])) $message .= "Votre theme<br/>"; if (empty($_POST['comments'])) $message .= "Votre message<br/>"; // si un champ est vide, on affiche le message d'erreur if (strlen($message) > strlen($msg_erreur)) { echo $message; } else { foreach($_POST as $index => $valeur) { $$index = mysql_real_escape_string(trim($valeur)); } $sql = "INSERT INTO conx VALUES ('".$id."', '".$pseudo."', '".$skype."', '".$email."', '".$theme."', '".$comments."', '".$date_message."')"; $res = mysql_query($sql); if ($res) { echo $msg_ok; } else { echo mysql_error(); } } ?>
Merci de votre aide :)

Avatar du membre
Mammouth du PHP | 1609 Messages

27 janv. 2016, 20:24

Bonsoir, le message est très clair les variables $id et $date_message ne sont pas définies à la ligne 58 qui est je pense la requête d'insertion.
Je suppose que ces deux variables ne sont pas présentes dans $_POST.

EDIT :
D'ailleurs, généralement la colonne d'id est définie en auto increment et n'a donc pas à être incluse dans la requête d'insertion.
Modifié en dernier par Saian le 27 janv. 2016, 20:41, modifié 1 fois.
Développeur web depuis + de 20 ans

Mammouth du PHP | 2703 Messages

27 janv. 2016, 20:25

il faudrait le code du formulaire en méthode post qui pointe vers cible.php

Sam67
Invité n'ayant pas de compte PHPfrance

27 janv. 2016, 20:29

Bonjour voilà le code du formulaire:

Code : Tout sélectionner

<form id="commande" method="post" action="cible.php"> <img id="icon-caddie" src="Images/caddie.png" height="90px" width="110px"></img> <table><tbody> <tr><td> <input style="width: 247px; height: 40px" class="input" placeholder="Nom / pseudo *" type="text" name="pseudo" /> <br/></td><td> <input style="width: 247px; height: 40px" class="input" placeholder="Email *" type="email" name="email"/><br/> </td></tr> </tbody></table> <table><tbody> <tr><td> <input style="width: 247px; height: 40px" class="input" placeholder="Pseudo Skype (optionnel)" type="text" name="skype"/><br/></td><td> <input style="width: 247px; height: 40px" class="input" placeholder="Le thème de votre site *" type="text" name="theme"/><br/> </td></tr> </tbody></table> <textarea style="width: 700px; height: 150px" rows="8" id="comments" class="input" name="comments" type="text" placeholder="Veuillez nous décrire votre commande et à fournir un maximum de détails comme les couleurs voulues, etc... *" ></textarea> <br> <input class="bouton" type="submit" name="valider" value="Commander"/> </form>

Eléphant du PHP | 51 Messages

27 janv. 2016, 20:38

Il manque la valeur "id" qu'attend la DB. Elle n'est pas dans le formulaire et elle ne va pas se créer toute seule.

Sam67
Invité n'ayant pas de compte PHPfrance

27 janv. 2016, 20:52

Merci pour votre aide, pourrez-vous me donnez mon code corriger si vous avez le temps :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

28 janv. 2016, 00:21

Merci pour votre aide, pourrez-vous me donnez mon code corriger si vous avez le temps :)
Bonjour Sam67,
Le but d'un forum d'entraide comme PHPfrance, n'est pas de fournir la solution sur un plateau mais de t'aider à ce que tu puisses le faire toi même pour que tu soit capable ensuite de le refaire.
Essaye donc de le faire toi-même et dis nous si ça marche ou pas :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Sam67
Invité n'ayant pas de compte PHPfrance

29 janv. 2016, 19:31

Bonsoir,
pouvez-vous me dire ou je dois rajouter la valeur id, si c'est dans la cible.php ou le formulaire en html.
Merci de votre aide et comme dit je débute :p

Sam67
Invité n'ayant pas de compte PHPfrance

29 janv. 2016, 19:38

Re, désoler pour le double poste.
Mais j'ai trouvé la solution mais maintenant j'ai ce message d'erreur :
Image

Pouvez-vous m'aider svp ?

Avatar du membre
Mammouth du PHP | 1609 Messages

29 janv. 2016, 19:50

J'imagine qu'il s'agit de cette ligne :
$date_message=$rows[7];
Le message dit que l'index 7 (offset 7) n'existe pas (undefined). $rows[7] n'est donc pas défini.

Je vois que tu as commencé par $rows[1] pour l'id.
Donc à moins que ce ne soit pas la première colonne de la table, je penses que tu as du rater l'épisode expliquant que le premier index du tableau c'est 0. :P

http://php.net/manual/fr/function.mysql-fetch-row.php
mysql_fetch_row() va rechercher une ligne dans le résultat associé à l'identifiant de résultat spécifié. La ligne est retournée sous la forme d'un tableau. Chaque colonne est enregistrée sous la forme d'un tableau commençant à la position 0.
J'imagine que si tu commences par 0 en finissant par 6 tu ne devrais plus avoir d'erreur.
Développeur web depuis + de 20 ans

Sam67
Invité n'ayant pas de compte PHPfrance

29 janv. 2016, 19:55

Merci :D mais maintenant j'ai de nouveau le bug de l'id et date_message qui sont pas défini, pouvez-vous m'aider ?

Avatar du membre
Mammouth du PHP | 1609 Messages

29 janv. 2016, 20:17

Comme je te l'ai déjà dis dans mon premier message généralement la colonne d'id est définie en auto increment et n'a donc pas à être incluse dans la requête d'insertion. Comment est définie la colonne id sur ta table ? si elle n'est pas en auto increment mets la en auto increment (sinon on est pas sorti de l'auberge ^^).

Pour ce qui est de $date_message, tu veux mettre quoi dedans ? la date du moment où le message est envoyé j'imagine non ? ce n'est donc pas un champ du formulaire. La variable $date_message ne va pas se renseigner toute seule, c'est à toi de le faire. Renseignes toi sur la fonction php date et les formats date mysql.

Il y a d'ailleurs un problème dans ton code si le SELECT du début retourne une ou plusieurs lignes alors l'insert se fera avec le $date_message de la dernière ligne car en sortie du while $date_message aura la valeur de la dernière ligne...
De plus tu fais un select et une boucle sur les résultats mais tu ne fais rien du tout avec. Quel est l'intérêt ? bref va falloir potasser un peu.
Développeur web depuis + de 20 ans

Sam67
Invité n'ayant pas de compte PHPfrance

29 janv. 2016, 21:04

Oulah, ça en fait beaucoup et pour la boucle je me suis inspiré d'un formulaire sur internet et il le mettait :?
Et j'ai bien mis mon id en auto incrément. Sinon pour le date_message j'ai pas bien compris :c

Désoler pour toute ces questions

Sam67
Invité n'ayant pas de compte PHPfrance

31 janv. 2016, 16:48

désoler double-post,
mais je fais un petit up, pour savoir si quelqu'un pourrais m'expliquer plus précisément ou se trouve l'erreur et où là corriger merci :)

Mammouth du PHP | 881 Messages

31 janv. 2016, 18:15

Et puis ... personne ne te l'a écrit, mais ton code utilise les commande mysql il est temps de passer à mysqli , d'autres modif seront à faire. Si t'as des problèmes dans cette mise à jour, il te faudra ouvrir un autre sujet SI tes recherches n'ont pas fourni la réponse. N'oublie pas l'excellent manuel PHP http://php.net/manual/fr/
Soyez artisans de paix