Erreur mysql... Mais qu'est ce qui cloche ?????

Erreur mysql... Mais qu'est ce qui cloche ????? - PHP - Programmation

Marsh Posté le 31-05-2005 à 23:41:23    

Salut all,
 
Je suis en train de coder une newsletter, mais des erreurs mysql sont renvoyés, je vous laisse juger :
 

Code :
  1. <?
  2. mysql_connect("***", "***", "****" );
  3. mysql_select_db("****" );
  4. $selection = mysql_query("SELECT count(`mail`) FROM `newsletter` WHERE `mail`='$mail'" );
  5. $result = mysql_fetch_row($selection);
  6. /*récupération de l'email*/
  7. $email=$_POST["email"];
  8. /*Pour un inscription*/
  9. if(isset($_POST["option_news"]) and $_POST["option_news"]=="inscription" )
  10. {
  11.  mysql_query("INSERT INTO `newsletter` ( `id` , `email` ) VALUES ('', '$email');" );
  12.      Header("Location: newsletter/resultatnews.php?erreur=2" );
  13.      exit;
  14. }
  15. /*Pour une désinscription*/
  16. if(isset($_POST["option_news"]) and $_POST["option_news"]=="desinscription" )
  17. {
  18.  if ($result['mail'] == 0)
  19.  {
  20.      mysql_query("DELETE FROM newsletter WHERE email='$email';" );
  21.          Header("Location: newsletter/resultatnews.php?erreur=4" );
  22.          exit;
  23.  }
  24.  else
  25.  {
  26.      Header("Location: newsletter/resultatnews.php?erreur=3" );
  27.  }
  28. }
  29. ?>


 
Et voici les erreurs renvoyés :
 

Code :
  1. Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/**monsite**/newsletter/newsletter.php on line 6
  2. Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/6/f/--monsite--/newsletter/newsletter.php:6) in /var/www/free.fr/6/f/--monsite--/newsletter/newsletter.php on line 15


Message édité par Rastafarie le 31-05-2005 à 23:43:23
Reply

Marsh Posté le 31-05-2005 à 23:41:23   

Reply

Marsh Posté le 31-05-2005 à 23:55:58    

Citation :

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource


 
Ta requete SQL n'est pas valide du coup $resultat n'est pas une variable valide pour mysql_fetch_row
 
'SELECT count(mail) FROM newsletter WHERE mail="'.$mail.'"' devrait meiux se comporter
 

Citation :

Warning: Cannot modify header information - headers already sent


 
Tu utilises la fonction header et l'en tete du document a deja ete envoyé soit explicitement par un autre header soit implicitement par un echo ou un print.

Reply

Marsh Posté le 01-06-2005 à 12:46:22    

Alors j'ai fait ce que tu m'a dit, c'est à dire :

Code :
  1. $selection = mysql_query("'SELECT count(mail) FROM newsletter WHERE mail="'.$mail.'"'" );


Mais une erreur est renvoyé :

Code :
  1. Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/free.fr/6/f/xxxx/newsletter/newsletter.php on line 5


Je ne comprens pas l'interet de tant d'apostrophes et du point devant $mail.
Alors je l'ai un peu changé pour essayer d'enlever l'erreur :

Code :
  1. $selection = mysql_query("SELECT count(mail) FROM newsletter WHERE mail='.$mail.'" );


Mais cette fois on en revient au même problème avec la même erreur du départ :

Code :
  1. Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/xxxx/newsletter/newsletter.php on line 6


 
Pour ce qui est de la seconde erreur, j'ai vu sur un site que on pouvait la virer en mettant un @devant. Ca marche mais je pense que ca "masque" l'erreur mais ca ne la resou pas... je me trompe ?
 
Rastafarie


Message édité par Rastafarie le 02-06-2005 à 15:34:08
Reply

Marsh Posté le 01-06-2005 à 13:03:36    

Code :
  1. $selection = mysql_query("'SELECT count(mail) FROM newsletter WHERE mail="'.$mail.'"'" );


 
Tu as mis des quotes en trop et d'autres mal placées...
 

Code :
  1. $selection = mysql_query("SELECT count(mail) FROM newsletter WHERE mail='".$mail."'" );


 
Pour ce qui est du @ ça ne resoud pas ton problème en effet ...
 
Le . sert à concatener des chaines


Message édité par GaSPaRD77 le 01-06-2005 à 13:04:02
Reply

Marsh Posté le 01-06-2005 à 19:00:20    

J'ai mis exactement ce que tu m'a dit de mettre, c'est à dire :

Code :
  1. $selection = mysql_query("SELECT count(mail) FROM newsletter WHERE mail='".$mail."'" );


 
Mais toujours le même message d'erreur :

Code :
  1. Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/xxxxx/newsletter/newsletter.php on line 6


 
J'avou de pas du tout savoir quoi faire alors de l'aide serait le bienvenue. J'ai fait des recherches sur cette erreur mais j'ai lu qu'elle pouvait dire beaucoup de choses... ?!
 
Rastafarie


Message édité par Rastafarie le 02-06-2005 à 15:33:37
Reply

Marsh Posté le 01-06-2005 à 19:39:31    

hmm dans ta variable $mail, t as despecialisé tout les caracteres tendancieux ?
 
Conseil : met ta requete dans une variable $query, et affiche la. Tu peux avoir des surprises, crois moi.
 
Sinon le warning d'apres c'est normal, car la premiere erreur envoie un message d'erreur ... et ca ecrit dans ta page du coup.
 
Ben;)

Reply

Marsh Posté le 02-06-2005 à 09:47:57    

Je suis pas trop sur d'avoir compris ce que t'a dis. Du coup j'ai tout viré dans la page et j'ai mis ça :

Code :
  1. $query = mysql_query("SELECT count(mail) FROM newsletter WHERE mail='".$mail."'" );
  2. echo "$query";


Bon point : Plus de message d'erreur  :bounce:  
Mauvais point : Rien d'autre ne s'affiche... c'est tout blanc  :heink:  
 
Je rappele que c'est une newsletter que je fais. Et l'objectif c'est de regarder dans la BDD si le mail entré dans le formulaire est déja présent ou pas...
Donc si d'autres solutions existent je suis partant... Mais j'aimerais bien savoir qu'est ce qui cloche dans ce script quand même  :cry:  
 
Rastafarie

Reply

Marsh Posté le 02-06-2005 à 10:00:01    

C'est pas echo"$query" qu'il faut faire, c'est:
 
$query = "SELECT count(mail) FROM newsletter WHERE mail='".$mail."'";
puis  
echo $query;
puis
mysql_query($query);

Reply

Marsh Posté le 02-06-2005 à 10:13:58    

Ce qui donne en tout :

Code :
  1. mysql_connect("localhost", "xxxx", "xxxx" );
  2. mysql_select_db("xxxx" );
  3. $query = mysql_query("SELECT count(mail) FROM newsletter WHERE mail='".$mail."'" );
  4. echo "$query";
  5. mysql_query($query);
  6. mysql_close();


 
He bien figure toi que ca affiche toujours rien... Ca sert à quoi au juste mysql_query ?
Et puis dans mon script tout en haut, celui du départ, vous voyez rien qui cloche ?
 
Et si je devrais ajouter ce que je viens décrire dans le script final (du haut)... ou devrais-je le mettre ?
 
Rastafarie


Message édité par Rastafarie le 02-06-2005 à 10:16:00
Reply

Marsh Posté le 02-06-2005 à 10:16:21    

mysql_query c'est pour executer la requete.
 
Remplace echo "$query" par echo $query;

Reply

Marsh Posté le 02-06-2005 à 10:16:21   

Reply

Marsh Posté le 02-06-2005 à 14:53:30    

Ca change rien... toujours rien ne s'affiche. J'espere ne pas devoir finir par devoir prendre un script tout pret tout beau... mais fait par un autre  :pfff:  
 
Rastafarie

Reply

Marsh Posté le 02-06-2005 à 14:54:47    

Bah je comprends plus rien alors

Reply

Marsh Posté le 02-06-2005 à 15:08:21    

Et dans le script du départ tu vois rien qui merde ?
 
Rastafarie

Reply

Marsh Posté le 02-06-2005 à 15:10:45    

Bah non,
bon alors mets un echo "test";
au tout début pour voir si il s'affiche ou pas

Reply

Marsh Posté le 02-06-2005 à 15:13:02    

Ouai il s'affiche :)
 
rastafarie

Reply

Marsh Posté le 02-06-2005 à 15:14:40    

Code :
  1. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$mail."'";
  2. echo $query;
  3. mysql_query($query);

Ecrit ça et si ça marche pas ou que tu as une erreur ben ça veut dire que c'est ta requête qui est mauvaise


Message édité par Destampy le 02-06-2005 à 15:15:38
Reply

Marsh Posté le 02-06-2005 à 15:15:51    

Bon alors jje me suis dit que ca pourrait m'aider à m'aider (hehe la phrase).
 
Parralelement a la newslette, je fais un systeme de sondage (en fait je commence:))
Ca donne ca :

Code :
  1. <div class="menu-item">
  2.              <?
  3.    $ip = $_SERVER['REMOTE_ADDR'];
  4.    mysql_connect("localhost", "xxx", "xxxxx" );
  5.              mysql_select_db("xxxxx" );
  6.    $query = mysql_query("SELECT * FROM sondage_ip WHERE ip='$ip'" );
  7.    $result = mysql_query($query);
  8.    $num = mysql_num_rows($result);
  9.    if($num)
  10.    {
  11.    echo "Il n'est possible de voter qu'une seule fois.";
  12.    exit;
  13.    }
  14.    mysql_close();
  15.    ?>
  16.      </div><p>


 
Et l'erreur mysql renvoyé est toujours la meme :

Code :
  1. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/xxxxxx/menus.php on line 167


Message édité par Rastafarie le 02-06-2005 à 15:33:11
Reply

Marsh Posté le 02-06-2005 à 15:15:59    

Destampy a écrit :

Code :
  1. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$mail."'";
  2. echo $query;
  3. mysql_query($query);

Ecrit ça et si ça marche pas ou que tu as une erreur ben ça veut dire que c'est ta requête qui est mauvaise


 
justement il a dis que ca marchait pas

Reply

Marsh Posté le 02-06-2005 à 15:19:00    

Destampy, je viens d'eesayer ce que tu m'a dit et ca m'écrit :

Code :
  1. SELECT count(mail) FROM newsletter WHERE mail=''


 
Normal que mail='' ne soit pas rempli puisque j'ai appelé la page directement et j'ai pas rempli le formulaire... enfin je pense


Message édité par Rastafarie le 02-06-2005 à 15:19:54
Reply

Marsh Posté le 02-06-2005 à 15:20:48    

[:alana21]


Message édité par Destampy le 03-06-2005 à 10:14:54
Reply

Marsh Posté le 02-06-2005 à 15:21:03    

Rastafarie a écrit :

Destampy, je viens d'eesayer ce que tu m'a dit et ca m'écrit :

Code :
  1. SELECT count(mail) FROM newsletter WHERE mail=''


 
Normal que mail='' ne soit pas rempli puisque j'ai appelé la page directement et j'ai pas rempli le formulaire... enfin je pense


 
Bah oui mais essaye avec le formulaire

Reply

Marsh Posté le 02-06-2005 à 15:21:32    

:jap:


Message édité par Destampy le 02-06-2005 à 15:39:35
Reply

Marsh Posté le 02-06-2005 à 15:31:59    

alors mon formulaire renvoi vers newsletter.php :

Code :
  1. <form method="post" action="newsletter/newsletter.php">


 
Et dans newsletter.php... j'ai maintenant tout ça :

Code :
  1. mysql_connect("localhost", "xxx", "xxxxx" );
  2. mysql_select_db("xxxx" );
  3. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$mail."'";
  4. echo $query;
  5. mysql_query($query);
  6. //récupération de l'email
  7. $email=$_POST["email"];


 
et ca me renvoi :

Code :
  1. SELECT count(mail) FROM newsletter WHERE mail=''


Message édité par Rastafarie le 02-06-2005 à 15:32:24
Reply

Marsh Posté le 02-06-2005 à 15:33:07    

Rastafarie a écrit :

alors mon formulaire renvoi vers newsletter.php :

Code :
  1. <form method="post" action="newsletter/newsletter.php">


 
Et dans newsletter.php... j'ai maintenant tout ça :

Code :
  1. mysql_connect("localhost", "xxx", "xxxxx" );
  2. mysql_select_db("xxxx" );
  3. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$mail."'";
  4. echo $query;
  5. mysql_query($query);
  6. //récupération de l'email
  7. $email=$_POST["email"];



 
Oui bah c'est pas bon....
 

Code :
  1. //récupération de l'email
  2. $email=$_POST["email"];
  3. mysql_connect("localhost", "xxx", "xxxxx" );
  4. mysql_select_db("xxxx" );
  5. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$email."'";
  6. echo $query;
  7. mysql_query($query);


 
ca c'est bon

Reply

Marsh Posté le 02-06-2005 à 15:37:06    

T'es assis sur ta t^te ou pas?? ;) .Pour pouvoir effectuer ta requête tu es obligé de récupérer le mail avant de la faire sinon c'est sûr que ça marche po :pfff:  

Reply

Marsh Posté le 02-06-2005 à 15:37:15    

Code :
  1. SELECT count(mail) FROM newsletter WHERE mail='test'


 
Ouaiiiiiiiiiiss  
 
Je vais tester maintenant le script entier et je vous tiens au courant... merci ;)
 
Rastafarie

Reply

Marsh Posté le 02-06-2005 à 15:39:04    

Par contre un truc que j'ai toujours pas compris :

Code :
  1. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$email."'";


 
Pourquoi tant d'apostrophes ? Et un point AVANT et APRES mail ?
 
Rastafarie


Message édité par Rastafarie le 02-06-2005 à 15:39:55
Reply

Marsh Posté le 02-06-2005 à 15:39:36    

Rastafarie a écrit :

Par contre un truc que j'ai toujours pas compris :

Code :
  1. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$email."'";


 
Pourquoi tant d'apostrophes ?
 
Rastafarie


 
Parce que tu concaténe avec le contenu de la variable

Reply

Marsh Posté le 02-06-2005 à 15:41:19    

Ok encore merci pour tout. (destampy ta un pv ;))
 

Reply

Marsh Posté le 03-06-2005 à 17:24:07    

Arf... de problèmes en problèmes !
 
J'ai continué un peu le script ne la newsletter, cette fois il n'y a pas de message d'erreur :

Code :
  1. <?
  2. $email=$_POST["email"];
  3. mysql_connect("localhost", "xxxx", "xxxx" );
  4. mysql_select_db("xxxx" );
  5. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$email."'"; 
  6. $resultat = mysql_query($query);
  7. //Pour un inscription
  8. if ($resultat == "0" )
  9. {
  10.      if(isset($_POST["option_news"]) and $_POST["option_news"]=="inscription" )
  11.      {
  12.      mysql_query("INSERT INTO newsletter (id, email) VALUES ('', '$email');" );
  13.          Header("Location: resultatnews.php?erreur=2" );
  14.          exit;
  15.      }
  16.  else
  17.  {
  18.      Header("Location: resultatnews.php?erreur=5" );
  19.   exit;
  20.      }
  21. }
  22. else
  23. {
  24.      Header("Location: resultatnews.php?erreur=1" );
  25.  exit;
  26. }
  27. ?>


 
Mais par contre quand je rentre un email qui est déja dans la bdd, ca me le rerentre quand meme !
 
Rastafarie

Reply

Marsh Posté le 03-06-2005 à 17:33:56    

Faudrait peut être parcourir le résultat de la requête, non?

Reply

Marsh Posté le 03-06-2005 à 17:35:36    

Comment ça ?

Reply

Marsh Posté le 03-06-2005 à 17:36:28    

Bah tu fais un select count(mail)....
après il faut regarder la valeur du count peut être, non tu es pas d'accord?

Reply

Marsh Posté le 03-06-2005 à 17:38:28    

Ben si tu le dis je vais essayer d'être d'accors avec toi  :D  
Et  commment je fais pr regarder cette valeur ? (dsl je débute hein :()
 
Rastafarie

Reply

Marsh Posté le 03-06-2005 à 17:40:00    

Reply

Marsh Posté le 03-06-2005 à 17:48:31    

Bon alors je sais pas si c'est ok ce que je viens de faire...

Code :
  1. ...
  2. $query = "SELECT count(mail) FROM newsletter WHERE mail='".$email."'"; 
  3. $resultat = mysql_query($query);
  4. $num_rows = mysql_num_rows($resultat);
  5. //Pour un inscription
  6. if ($resultat == "0" )
  7. ...etc...


 
en tout cas ca ramène cet erreur :

Code :
  1. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/xxxxxxx/newsletter/newsletter.php on line 7


 
Ca vient donc de la ligne que j'ai ajouté...


Message édité par Rastafarie le 03-06-2005 à 17:59:36
Reply

Marsh Posté le 03-06-2005 à 17:52:33    

Bah c'est que ta requête s'execute pas bien.

Reply

Marsh Posté le 03-06-2005 à 17:54:33    

Pourtant tout le code que j'ai est là ! Ya rien d'autre... en quoi et pourquoi ne pourrait t'elle pas s'executer ?
 
Rastafarie

Reply

Marsh Posté le 03-06-2005 à 17:55:18    

Une fonction extrêmement utile, à mettre entre toutes les mains: "mysql_error()"
 
mets une ligne  
 

Code :
  1. echo mysql_error();


 
juste après ta requête sur ta base de données, tout deviendra plus clair.  ;)

Reply

Marsh Posté le 03-06-2005 à 18:00:28    

Ben ca m'écrit une ligne en plus quand je met ça :

Code :
  1. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/6/f/xxxxx/newsletter/newsletter.php on line 7
  2. Unknown column 'mail' in 'field list'


 
Rastafarie

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed