| 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. | 
 
 | 
 
 
 | 
     | 
 | 
 
| 
 |