Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 [résolu] php/mysql : erreur 0: Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
tipitipi
Résident du forum
Résident du forum


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 394
Localisation: 92

MessagePosté le: Dim 18 Mar 2007 - 13:22 Répondre en citantRevenir en haut

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
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur

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
Modérateur



Sexe: Sexe:Féminin
Messages: 1163
Localisation: Ici, là, pas loin ...

MessagePosté le: Dim 18 Mar 2007 - 13:59 Répondre en citantRevenir en haut

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.

_________________
Image
Image
Voir le profil de l'utilisateurEnvoyer un message privé
tipitipi
Résident du forum
Résident du forum


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 394
Localisation: 92

MessagePosté le: Dim 18 Mar 2007 - 14:24 Répondre en citantRevenir en haut

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
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur
Zonag
Modérateur
Modérateur


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 1298
Localisation: Toulouse

MessagePosté le: Dim 18 Mar 2007 - 14:36 Répondre en citantRevenir en haut

Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ... Rolling Eyes

Essaye de mettre un
Code:
print_r($_POST);
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 ... Wink

_________________
Zonag
Voir le profil de l'utilisateurEnvoyer un message privé
tipitipi
Résident du forum
Résident du forum


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 394
Localisation: 92

MessagePosté le: Dim 18 Mar 2007 - 14:56 Répondre en citantRevenir en haut

Zonag a écrit:
Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ... Rolling Eyes

Heu, je ne suis pas spécialiste... J'ai recopié le texte de mon prof du CNED...

Citation:
Essaye de mettre un
Code:
print_r($_POST);
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 ... Wink

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
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur
gwinyam
Accro à Web-IG
Accro à Web-IG


Ecole d'Ingénieurs
Sexe: Sexe:Masculin
Messages: 216
Localisation: Vernon (27200) - Rouen (76000)

MessagePosté le: Dim 18 Mar 2007 - 16:02 Répondre en citantRevenir en haut

Zonag a écrit:
Bizzare de faire afficher les erreurs MySQL par du javascript mais bon ... Rolling Eyes
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. Wink

_________________
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
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
nimoy
Résident du forum
Résident du forum



Sexe: Sexe:Masculin
Messages: 310

MessagePosté le: Dim 18 Mar 2007 - 16:17 Répondre en citantRevenir en haut

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 ...
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
tipitipi
Résident du forum
Résident du forum


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 394
Localisation: 92

MessagePosté le: Dim 18 Mar 2007 - 20:57 Répondre en citantRevenir en haut

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
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur
Yipyip
Modérateur
Modérateur



Sexe: Sexe:Féminin
Messages: 1163
Localisation: Ici, là, pas loin ...

MessagePosté le: Dim 18 Mar 2007 - 21:24 Répondre en citantRevenir en haut

Et en traçant ton programme, ça donne quoi ? L'erreur apparait à quelle endroit du code ?

_________________
Image
Image
Voir le profil de l'utilisateurEnvoyer un message privé
United
Accro à Web-IG
Accro à Web-IG


Post-BTS
Sexe: Sexe:Masculin
Messages: 225
Localisation: Oise

MessagePosté le: Dim 18 Mar 2007 - 21:43 Répondre en citantRevenir en haut

Citation:
sel = mysql_select_bd("bdetud", $bd);

mysql_select_db Wink
Voir le profil de l'utilisateurEnvoyer un message privé
keldrill
Résident du forum
Résident du forum




Messages: 284

MessagePosté le: Dim 18 Mar 2007 - 21:55 Répondre en citantRevenir en haut

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
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteur
Yipyip
Modérateur
Modérateur



Sexe: Sexe:Féminin
Messages: 1163
Localisation: Ici, là, pas loin ...

MessagePosté le: Dim 18 Mar 2007 - 21:56 Répondre en citantRevenir en haut

United a écrit:
Citation:
sel = mysql_select_bd("bdetud", $bd);

mysql_select_db Wink

Bien vu Smile
avec ça il ne devrais pas y avoir de soucis.

_________________
Image
Image
Voir le profil de l'utilisateurEnvoyer un message privé
nimoy
Résident du forum
Résident du forum



Sexe: Sexe:Masculin
Messages: 310

MessagePosté le: Dim 18 Mar 2007 - 22:11 Répondre en citantRevenir en haut

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.
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
keldrill
Résident du forum
Résident du forum




Messages: 284

MessagePosté le: Lun 19 Mar 2007 - 00:53 Répondre en citantRevenir en haut

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.

_________________
Read The Life Manual
http://indriya.org - http://circle-rock.net
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteur
tipitipi
Résident du forum
Résident du forum


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 394
Localisation: 92

MessagePosté le: Lun 19 Mar 2007 - 01:12 Répondre en citantRevenir en haut

United a écrit:
Citation:
sel = mysql_select_bd("bdetud", $bd);

mysql_select_db Wink

BINGO ! Very Happy Very Happy 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 Embarassed 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
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur
nimoy
Résident du forum
Résident du forum



Sexe: Sexe:Masculin
Messages: 310

MessagePosté le: Lun 19 Mar 2007 - 01:34 Répondre en citantRevenir en haut

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 Wink

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
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
keldrill
Résident du forum
Résident du forum




Messages: 284

MessagePosté le: Lun 19 Mar 2007 - 02:04 Répondre en citantRevenir en haut

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
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteur
nimoy
Résident du forum
Résident du forum



Sexe: Sexe:Masculin
Messages: 310

MessagePosté le: Lun 19 Mar 2007 - 09:21 Répondre en citantRevenir en haut

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.
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
    Sujets complémentaires :
  • FTP erreur 530
  • Erreur sur convocation ?
  • Erreur de note
  • Erreur de note
  • erreur JAVA
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum