Auteur |
Message |
tipitipi
Résident du forum
Sexe:
Messages: 394
Localisation: 92
|
Posté le:
Dim 18 Mar 2007 - 13:22 |
|
Bonjour,
voici mon problème :
Soit un formulaire form.html et un programme form.php pour entrer les données du formulaire dans une base mysql.
Lorsque je valide mon formulaire, j'obtiens le message "erreur 0:", et pas moyen de m'en dépatouiller...
Une idée svp ?? |
_________________ un chat qui bloggue ? http://tiger.lechat.over-blog.com
Dernière édition par tipitipi le Lun 19 Mar 2007 - 01:13; édité 1 fois |
|
|
|
N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire. |
Yipyip
Modérateur
Sexe:
Messages: 1163
Localisation: Ici, là, pas loin ...
|
Posté le:
Dim 18 Mar 2007 - 13:59 |
|
tipitipi a écrit: |
Soit un formulaire form.html et un programme form.php pour entrer les données du formulaire dans une base mysql.
Lorsque je valide mon formulaire, j'obtiens le message "erreur 0:", et pas moyen de m'en dépatouiller... |
Montre plus exactement ton erreur et ton code. |
_________________
|
|
|
|
tipitipi
Résident du forum
Sexe:
Messages: 394
Localisation: 92
|
Posté le:
Dim 18 Mar 2007 - 14:24 |
|
voici le formulaire :
Code: |
<html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01 Strict//EN"
"http://w3c.org/TR/html4/strict.dtd">
<head>
<title>Saisie d'un étudiant</title>
</head>
<body>
<h1>Saisissez un étudiant</h1>
<form method="POST" action="form.php">
<p>Numéro : <input type="text" name="num" size="5"</p>
<p>Nom : <input type="text" name="nom" size="30"</p>
<p>Prénom : <input type="text" name="prenom" size="20"</p>
<p>Date de Naissance (AAAA-MM-JJ) : <input type="text" name="date" size="10"</p>
<p><input type="submit" value="Enregistrer" name="connect"></p>
</form>
</body>
</html>
|
voici le programme php
Code: |
<html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01 Strict//EN"
"http://w3c.org/TR/html4/strict.dtd">
<head>
<meta http-equiv="Content-Type" content=text/html; charset=iso-8859-1">
</head>
<body>
<?php
$login="PROF"; // nom d'utilisateur utilisé pour la connexion
$pass="PROF"; // mot de passe
$db = @mysql_connect("localhost",$login, $pass); //connexion
if(!$bd) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
$sel = @mysql_bd("bdetud", $bd); // sélection de la base de données
if(!$sel) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
// préparation de la requête SQL d'insertion
// avec le contenu des champs du formulaire
$query = "INSERT INTO tbletud (ETUNUM, ETUNOM, ETUPRE, ETUDATE) VALUES (";
$query = $query."'".$num."','".$nom."','";
$query = $query.$prenom."','".$date."');";
$result = @mysql_query($query); // exécution de la requête
if(!$result) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
else //sinon pas d'erreur
echo <h1>Les données ont été correctement enregistrées</h1>;
?>
</body>
</html>
|
Pour l'erreur, c'est une fenêtre qui s'ouvre et qui affiche "erreur 0: et un bouton OK. |
_________________ un chat qui bloggue ? http://tiger.lechat.over-blog.com |
|
|
|
Zonag
Modérateur
Sexe:
Messages: 1298
Localisation: Toulouse
|
Posté le:
Dim 18 Mar 2007 - 14:36 |
|
Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ...
Essaye de mettre un sur ta deuxième page pour voir si les valeurs sont bien transmises pour commencer.
Et vire les @ devant les appels à mysql histoire qu'il soit un peu plus bavard ... |
_________________ Zonag |
|
|
|
tipitipi
Résident du forum
Sexe:
Messages: 394
Localisation: 92
|
Posté le:
Dim 18 Mar 2007 - 14:56 |
|
Zonag a écrit: |
Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ... |
Heu, je ne suis pas spécialiste... J'ai recopié le texte de mon prof du CNED...
Citation: |
Essaye de mettre un sur ta deuxième page pour voir si les valeurs sont bien transmises pour commencer.
Et vire les @ devant les appels à mysql histoire qu'il soit un peu plus bavard ... |
Où dois-je insérer le code ? J'ai essayé juste après <?php puis juste avant ?> mais dans les deux cas sans succès.
Par ailleurs, avoir viré les @ n'a rien changé. |
_________________ un chat qui bloggue ? http://tiger.lechat.over-blog.com |
|
|
|
gwinyam
Accro à Web-IG
Sexe:
Messages: 216
Localisation: Vernon (27200) - Rouen (76000)
|
Posté le:
Dim 18 Mar 2007 - 16:02 |
|
Zonag a écrit: |
Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ... |
On peut faire ainsi pour éviter de casser la mise en page lors d'une erreur, ceci dit, l'idéal c'est de ne pas avoir d'erreur. |
_________________ eXar 3e année CDIL Rouen
BTS IG option Dév 2006
Egalement morice de CCO
Youpi pour les eXars
Dirigeant d'eXiaStream, radio nationale
Responsable Communication StudioNet.fr |
|
|
|
nimoy
Résident du forum
Sexe:
Messages: 310
|
Posté le:
Dim 18 Mar 2007 - 16:17 |
|
vire le @ de mysql_connect. Il ne retourne pas de "texte" à échapper.
De plus, mysql_bd n'existe pas. mysql_select_db oui
Enfin, rend ton log d'erreur plus verbeux. On ne sait pas quel mysql_error retourne l'erreur dans ton binz.
Dernier point : mysql_query ne retourne pas de texte, donc pas de @ stp ... |
|
|
|
|
tipitipi
Résident du forum
Sexe:
Messages: 394
Localisation: 92
|
Posté le:
Dim 18 Mar 2007 - 20:57 |
|
suite à vos remarques, voilà le fichier modifié. Malheureusement, aucune amélioration et toujours le même message "erreur 0:"
Code: |
<html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01 Strict//EN"
"http://w3c.org/TR/html4/strict.dtd">
<head>
<meta http-equiv="Content-Type" content=text/html; charset=iso-8859-1">
</head>
<body>
<?php
print_r($_POST);
$login="prof"; // nom d'utilisateur utilisé pour la connexion
$pass="prof"; // mot de passe
$db = mysql_connect("localhost",$login, $pass); //connexion
if(!$bd) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
$sel = mysql_select_bd("bdetud", $bd); // sélection de la base de données
if(!$sel) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
// préparation de la requête SQL d'insertion
// avec le contenu des champs du formulaire
$query = "INSERT INTO tbletud (ETUNUM, ETUNOM, ETUPRE, ETUDATE) VALUES (";
$query = $query."'".$num."','".$nom."','";
$query = $query.$prenom."','".$date."');";
$result = mysql_query($query); // exécution de la requête
if(!$result) { // si erreur
echo "<script language=\"javascript\">\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
}
else //sinon pas d'erreur
echo "<h1>Les données ont été correctement enregistrées</h1>";
?>
</body>
</html> |
|
_________________ un chat qui bloggue ? http://tiger.lechat.over-blog.com |
|
|
|
Yipyip
Modérateur
Sexe:
Messages: 1163
Localisation: Ici, là, pas loin ...
|
Posté le:
Dim 18 Mar 2007 - 21:24 |
|
Et en traçant ton programme, ça donne quoi ? L'erreur apparait à quelle endroit du code ? |
_________________
|
|
|
|
United
Accro à Web-IG
Sexe:
Messages: 225
Localisation: Oise
|
Posté le:
Dim 18 Mar 2007 - 21:43 |
|
Citation: |
sel = mysql_select_bd("bdetud", $bd); |
mysql_select_db |
|
|
|
|
keldrill
Résident du forum
Messages: 284
|
Posté le:
Dim 18 Mar 2007 - 21:55 |
|
Code: |
$db = mysql_connect("localhost",$login, $pass); //connexion
if(!$bd) { // si erreur
echo "<script>\n";
echo "alert(\"Erreur".mysql_errno()." : ".mysql_error()."\");\n";
echo "</script>\n";
die();
} |
Tu stockes la ressource de connexion dans $db et ensuite tu testes $bd. Il est donc normal que le bloc soit exécuté et que mysql_errno retourne 0 puisque la connexion s'est sûrement bien effectuée.
Code: |
$sel = mysql_select_bd("bdetud", $bd); // sélection de la base de données |
Même chose ici, tu utilises le descripteur $bd au lieu du $db initialisé. (hormis l'erreur de syntaxe soulignée par United)
nimoy a écrit: |
vire le @ de mysql_connect. Il ne retourne pas de "texte" à échapper.
De plus, mysql_bd n'existe pas. mysql_select_db oui
Enfin, rend ton log d'erreur plus verbeux. On ne sait pas quel mysql_error retourne l'erreur dans ton binz.
Dernier point : mysql_query ne retourne pas de texte, donc pas de @ stp ... |
Le @ sert à éviter l'affichage des erreurs sur la sortie standard. IL a donc bien une utilité devant mysql_connect et devant mysql_query |
_________________ Read The Life Manual
http://indriya.org - http://circle-rock.net
Dernière édition par keldrill le Dim 18 Mar 2007 - 22:01; édité 3 fois |
|
|
|
Yipyip
Modérateur
Sexe:
Messages: 1163
Localisation: Ici, là, pas loin ...
|
Posté le:
Dim 18 Mar 2007 - 21:56 |
|
United a écrit: |
Citation: |
sel = mysql_select_bd("bdetud", $bd); |
mysql_select_db |
Bien vu
avec ça il ne devrais pas y avoir de soucis. |
_________________
|
|
|
|
nimoy
Résident du forum
Sexe:
Messages: 310
|
Posté le:
Dim 18 Mar 2007 - 22:11 |
|
keldrill a écrit: |
Le @ sert à éviter l'affichage des erreurs sur la sortie standard. IL a donc bien une utilité devant mysql_connect et devant mysql_query |
Encore faudrait il que mysql_connect soit verbeux et affiche des erreurs ce qui n'est pas le cas. mysql_error() est là pour ca.
Ensuite, comme je l'ai dit précédemment, on ne sait pas du tout quel mysql_error te renvoie l'erreur. Rajoute un index ou quelque chose dans tes alerts pour qu'on s'y retrouve.
Sinon la dyslexie entre bd & db ne va pas aider. Reprend le temps de vérifier tout tes bd/db pour que ca soit bon. |
|
|
|
|
keldrill
Résident du forum
Messages: 284
|
Posté le:
Lun 19 Mar 2007 - 00:53 |
|
|
|
|
tipitipi
Résident du forum
Sexe:
Messages: 394
Localisation: 92
|
Posté le:
Lun 19 Mar 2007 - 01:12 |
|
United a écrit: |
Citation: |
sel = mysql_select_bd("bdetud", $bd); |
mysql_select_db |
BINGO ! Tout simplement une erreur de frappe, que j'ai d'ailleurs retrouvée un peu plus bas... Merci beaucoup.
Par ailleurs, merci à tout le monde pour les autres conseils, auxquels je n'ai pas compris grand chose, je l'avoue mais qui me fait adorer ce site , qui est souvent bien plus efficace que tous les profs du CNED réunis !
Je vais enfin pouvoir aller dormir sereinement... demain, je retourne en stage. |
_________________ un chat qui bloggue ? http://tiger.lechat.over-blog.com |
|
|
|
nimoy
Résident du forum
Sexe:
Messages: 310
|
Posté le:
Lun 19 Mar 2007 - 01:34 |
|
keldrill a écrit: |
nimoy a écrit: |
Encore faudrait il que mysql_connect soit verbeux et affiche des erreurs ce qui n'est pas le cas. mysql_error() est là pour ca. |
Je te renvoie au manuel de PHP :
http://fr2.php.net/manual/fr/function.mysql-connect.php
http://fr2.php.net/manual/fr/function.mysql-query.php
Manuel de PHP::mysql_connect a écrit: |
Note: Vous pouvez supprimer les messages d'erreur en cas d'échec en faisant précéder le nom de la fonction par @. |
Manuel de PHP::mysql_query a écrit: |
Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée. |
|
Par expérience, je sais que la Doc PHP n'est que trop rarement à jour et surtout contient des "bugs" :
Code: |
ini_set('display_errors', 'On');
ini_set('error_reporting', 'E_ALL');
$id = mysql_connect('sql.heimdall.net', '', '');
mysql_select_db($id, 'pff');
|
Résultat : ici
Désolé pour le header HTTP. Je développe un reverse proxy en ce moment et je lui fait m'afficher le header quand le body est vide.
Bref, on voit clairement que mysql_connect ne renvoie rien. Je suis en PHP 4.4.6 en module, avec patch Suhosin, sur ce site.
Le @ sur le mysql, ne sert strictement à rien.
NB : il y a cependant un unique cas (non documenté bien sûr) ou mysql_connect devient verbeux : lorsque le nom de serveur n'est pas reconnu au niveau DNS (ou qu'on se connecte via le socket ... inexistant).
C'est l'exception mais qui n'existe maintenant quasiment plus sur les plateformes d'hébergement, que ce soit en mutualisé ou en dédié car les socket ont un nombre important de désavantage puis on n'a que trop rarement des serveurs SQL sur les serveurs Web.
On n'explose pas les architectures pour rien : moins il y a de service sur une machine, moins on en ressent la défaillance
Oui en PHP3 (l'ancêtre de cette version) ,c'était verbeux (et en PHP < 4.1) mais ca ne l'est plus et ca le sera de moins en moins.
Tout simplement parce que plus on donne de réponse d'erreur sur une page, plus quelqu'un de malvaillant y trouvera la faille. Il est dans la ROADMAP de PHP6 de ne faire que des erreurs de type vérouillage du système sur l'affichage standard, le reste se passant dans les logs.
Enfin, il n'est pas rare de trouver dans les moteurs évolués actuels ou en cours de dév, une gestion de l'error_log PHP autrement que par les logs ou l'affichage tel qu'il est mais plutôt dans des bases externes (genre SQLite) afin de pouvoir y travailler plus efficacement.[/url] |
Dernière édition par nimoy le Lun 19 Mar 2007 - 10:02; édité 1 fois |
|
|
|
keldrill
Résident du forum
Messages: 284
|
Posté le:
Lun 19 Mar 2007 - 02:04 |
|
Tout dépend de ta configuration d'affichage des erreurs. Active les E_ALL dans ton php.ini et tu verras que mysql_connect envoie ses messages sur la sortie standard (un bête mysql_connect() sans argument sur PHP 5.1.6 par exemple... en l'occurrence un E_WARNING). Donc en gros évidemment en production l'affichage des erreurs est désactivé, mais cela ne veut pourtant pas dire que les fonctions sont silencieuses. Par contre il y a peu d'info sur le comportement de MySQLi dans la doc PHP. |
_________________ Read The Life Manual
http://indriya.org - http://circle-rock.net |
|
|
|
nimoy
Résident du forum
Sexe:
Messages: 310
|
Posté le:
Lun 19 Mar 2007 - 09:21 |
|
le code n'est pas passé donc je le repsote
*message précédent édité*
Comme tu peux le voir, tout est fait pour.
Ton contre exemple tombe exactement dans mon exception puisque '' (ou NULL) ne sera pas reconnu au niveau DNS et, le cas échange, le sera comme localhost sur un fichier socket inexistant. C'est le seul cas de verbosité de la fonction.
Edit: j'ai oublié de précisé que ce comportement était "logique" et n'était pas du à l'extension mysql mais aux fonctions de l'API PHP que l'extension utilise :
- elles émettent un Warning sur les fichiers inexistants (ici la socket)
- elles émettent un Warning sur une résolution de nom impossible
Sachant ca et que les fonctions de l'extension ne doivent pas être verbeuse afin de "forcer" l'utilisation des mysql_error() & co., on comprend tout à fait. |
|
|
|
|
|