Correction

Correction - PHP - Programmation

Marsh Posté le 06-07-2005 à 18:12:49    

Code :
  1. ...
  2. else // Il s'agit d'une désinscription.
  3. {
  4. include('sql.php');
  5. $search_mail_exist = mysql_query("SELECT newsletter_id, newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail' AND newsletter_send='1'" ) or die("erreur lors de la vérification" );
  6. $mail_exist = mysql_fetch_row($search_mail_exist);
  7. if($mail_exist[0] != 0) //on regarde si le mail existe.
  8.  {
  9.  // Si oui :
  10.  echo $mail_exist[0], ' le mail existe et est activé.<br />';
  11.  $search_mail_exist = mysql_query("SELECT newsletter_id, newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail' AND newsletter_send='1'" ) or die("erreur lors de la vérification" );
  12.  while($newsletter_id = mysql_fetch_array($search_mail_exist))
  13.   {
  14.   $unregister = "REPLACE newsletter(`newsletter_id`, `newsletter_mail`, `newsletter_send`) VALUES(".$newsletter_id['newsletter_id'].", '$newsletter_mail', '0')";
  15.   mysql_query($unregister) or die("echec lors de la désinscription à la newsletter" );
  16.   //header("location: http://sn4rky.free.fr/index.php" );
  17.   }
  18.  }
  19. else
  20.  {
  21.  // Si non :
  22.  echo $newsletter_mail, ' n\'est pas utilisé';
  23.  }
  24. }


 
lorsqu'un mail existe, je lui demande de me l'indiquer puis d'effectue une action.
il m'indique parfaitement ce que je lui demande, mais bloque au niveau du while.
pourquoi n'arrive t'il pas a m'afficher la suite ?
 
si je rajoute

Code :
  1. $search_mail_exist = mysql_query("SELECT newsletter_id, newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail' AND newsletter_send='1'" ) or die("erreur lors de la vérification" );


 
au dessus du while ça marche parfaitement
serait un probleme de portée de ma variable ?


Message édité par snarky le 07-07-2005 à 02:16:08
Reply

Marsh Posté le 06-07-2005 à 18:12:49   

Reply

Marsh Posté le 06-07-2005 à 18:17:21    

Ce serait pas plutot ?
$newsletter_id == mysql_fetch_array($search_mail_exist)


Message édité par The-Shadow le 06-07-2005 à 18:18:44
Reply

Marsh Posté le 06-07-2005 à 18:19:05    

The-Shadow a écrit :

Ce serait pas plutot ?
$newsletter_id == mysql_fetch_array($search_mail_exist)


 
en tps normal avec un = ça marche tres bien

Reply

Marsh Posté le 06-07-2005 à 18:22:37    

Je n'affirmais rien, j'utilise jamais while, trop évasif à mon gout, je préfère un foreach, mais je te faisais une suggestion qui me semblait plus logique, ça se trouve, je t'ai dit n'importe quoi, enfin, tu peux essayer quand même, tu ne risques pas grand chose ;)

Reply

Marsh Posté le 06-07-2005 à 18:24:58    

Oui desolé Shadow mais tu as faux :p. Le but de la syntaxe avec = est que le tableau retournera false une fois arrivé a la fin = >
 
while($var = FALSE) => Arret


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2005 à 18:26:33    

Non non c'est bien ca :
$newsletter_id = mysql_fetch_array($search_mail_exist)
 
Parce qu'ici il s'agit de répéter les instruction tant que l'attirubtion d'une valeur à $newsletter_id par mysql_fetch_assoc() et non pas si les deux on le même valeur.
 
Edit:
Posté en même temp qu esox_ch... Pour dire la même chose...


Message édité par dwogsi le 06-07-2005 à 18:27:38

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 06-07-2005 à 18:31:26    

on donne des cours a shadow et moua dans tout ça d'ou viens mon probleme ? :'(

Reply

Marsh Posté le 06-07-2005 à 18:34:03    

esox_ch a écrit :

Oui desolé Shadow mais tu as faux :p. Le but de la syntaxe avec = est que le tableau retournera false une fois arrivé a la fin = >
 
while($var = FALSE) => Arret


Bah je le saurais comme ça, pas de quoi être désolé, c'était autant une question qu'une réponse. :D
Perso, dans ton cas, je ferais un tout bête mysql_num_rows et une boucle for, ça te permet de choper direct là ou ça merde sans avoir à refaire ton code.

Reply

Marsh Posté le 06-07-2005 à 18:36:29    

Euh, comme j'ai dis, j'utilise pas While, j'aime pas, mais c'est normal que la fermeture de la connexion se retrouve dans la boucle ?
Encore une fois, c'est autant une question qu'une réponse. :D

Reply

Marsh Posté le 06-07-2005 à 18:43:59    

snarky a écrit :


lorsqu'un mail existe, je lui demande de me l'indiquer puis d'effectue une action.
il m'indique parfaitement ce que je lui demande, mais bloque au niveau du while.
pourquoi n'arrive t'il pas a m'afficher la suite ?


 
Tu fais déjà un mysql_fetch_row sur ton résultat, donc forcément. Je suppose que ton truc retourne qu'une seule ligne, que capte mysql_fetch_row, et ensuite mysql_fetch_array cherche les lignes d'après et n'en trouve pas.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 06-07-2005 à 18:43:59   

Reply

Marsh Posté le 06-07-2005 à 18:47:35    

sielfried a écrit :

Tu fais déjà un mysql_fetch_row sur ton résultat, donc forcément. Je suppose que ton truc retourne qu'une seule ligne, que capte mysql_fetch_row, et ensuite mysql_fetch_array cherche les lignes d'après et n'en trouve pas.


 
en effet ptite erreur, j'avais carrement pas fait attention a ça.
je vais corriger sa merci  :jap:

Reply

Marsh Posté le 06-07-2005 à 18:54:29    

j'ai tjr le meme soucis par contre
si j'enleve
 
 
    * $search_mail_exist = mysql_query("SELECT newsletter_id, newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail' AND newsletter_send='1'" ) or die("erreur lors de la vérification" );
 
du dessus du while, il n'arrive pas a m'affiche la valeur de id du mail ($newsletter_id)

Reply

Marsh Posté le 06-07-2005 à 18:55:48    

The-Shadow a écrit :

Euh, comme j'ai dis, j'utilise pas While, j'aime pas, mais c'est normal que la fermeture de la connexion se retrouve dans la boucle ?
Encore une fois, c'est autant une question qu'une réponse. :D


 
non pas normal :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2005 à 18:56:39    

Tu fais des trucs un peu affreux aussi...
 
$newsletter_id = $newsletter_id['newsletter_id'];  
 
 [:mlc]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 06-07-2005 à 18:57:28    

esox_ch a écrit :

non pas normal :D


 
mauvais copier/coller :ange:

Reply

Marsh Posté le 06-07-2005 à 18:58:22    

sielfried a écrit :

Tu fais des trucs un peu affreux aussi...
 
$newsletter_id = $newsletter_id['newsletter_id'];  
 
 [:mlc]


 
oui pour l'instant c'est un peu affreux  :whistle:  
mais sa devrait tout de meme marcher non ?


Message édité par snarky le 06-07-2005 à 19:11:46
Reply

Marsh Posté le 06-07-2005 à 19:00:28    

aaaa non pas marcher :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2005 à 20:19:47    

bon ben, en faite, j'avais utiliser mysql_fetch_row au mieux de mysql_num_rows :D

Reply

Marsh Posté le 06-07-2005 à 20:27:06    

snarky a écrit :

mauvais copier/coller :ange:


Bah quand tu cites un code sur un forum, la plupart du temps, l'Elite HFR te trouve le point virgule en trop, alors si toi tu déplaces carrément des lignes entières pendant ton copier/coller, ça va pas être facile de t'aider. :D

Reply

Marsh Posté le 06-07-2005 à 20:33:06    

ça demontre que j'ai pas de soucis avec les ";" :p
et puis mon soucis venait en fin de compte du resultat que j'attendais et non de la maniere dont je voulais obtenir ce resultat, d'où mon erreur d'emploi de la mauvaise fonction :whitsle:
 
et puis comme ça, ça m'aura permis de m'auto-corrigé tout en ameliorant mon code grâce aux réflexions des gens ^^

Reply

Marsh Posté le 06-07-2005 à 22:15:49    

Oui mais si tu nous donnes un code juste on pourra corriger des choses qui sonte effectuvement fausses dasn ton code :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2005 à 22:24:51    

esox_ch a écrit :

Oui mais si tu nous donnes un code juste on pourra corriger des choses qui sonte effectuvement fausses dasn ton code :D


 
pas fausses mais pas correctes  :lol:  
 

Code :
  1. <?php
  2. //récupération des variables :
  3. include('sql.php');
  4. $newsletter_mail = htmlentities(trim($_POST['newsletter_mail']),ENT_QUOTES,'UTF-8');
  5. if($_POST['newsletter_abo'] == 1) // Il s'agit d'une inscription.
  6. {
  7. if(isset($newsletter_mail))
  8.  {
  9.  if(!eregi("^[-._a-z0-9]*@[a-z0-9]{3,}\.[a-z]{2,6}$",$newsletter_mail)) // vérification du mail :
  10.   {
  11.   // Email invalide :
  12.   echo'L\'adresse E-mail que vous avez inscrit n\'est pas valide : ', $newsletter_mail;
  13.   }
  14.  else
  15.   {
  16.   // Email valide :
  17.   $search_mail_exist = mysql_query("SELECT newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail'" );
  18.   $exist = mysql_num_rows($search_mail_exist);
  19.   // On verifie si le mail existe déja ou pas.
  20.   if($exist)
  21.    {
  22.    // Si oui :
  23.    $search_mail_send =  mysql_query("SELECT newsletter_send FROM newsletter WHERE newsletter_mail='$newsletter_mail'" );
  24.    $send = mysql_fetch_array($search_mail_send);
  25.    if($send['newsletter_send'] == 1)
  26.     {
  27.     // Si oui : Le mail est déja utilisé.
  28.     echo $newsletter_mail ,' est déjà utilisé.';
  29.     }
  30.    else
  31.     {
  32.     //Si non : On procède à une réinscription.
  33.     $search_mail_send =  mysql_query("SELECT newsletter_id FROM newsletter WHERE newsletter_mail='$newsletter_mail'" );
  34.     while($newsletter_id = mysql_fetch_array($search_mail_send))
  35.      {
  36.      $register = "REPLACE newsletter(`newsletter_id`, `newsletter_mail`, `newsletter_send`) VALUES(".$newsletter_id['newsletter_id'].", '$newsletter_mail', '1')";
  37.      mysql_query($register);
  38.      header("location: http://sn4rky.free.fr/index.php" );
  39.      }
  40.     }
  41.    }
  42.   else
  43.    {
  44.    // Si non : On procède à une inscription.
  45.    $register = "INSERT INTO newsletter(`newsletter_mail`) VALUES('$newsletter_mail')";
  46.    mysql_query($register);
  47.    header("location: http://sn4rky.free.fr/index.php" );
  48.    }
  49.   }
  50.  }
  51. }
  52. else // Il s'agit d'une désinscription.
  53. {
  54. $search_mail_exist = mysql_query("SELECT newsletter_id, newsletter_mail FROM newsletter WHERE newsletter_mail='$newsletter_mail' AND newsletter_send='1'" );
  55. $exist = mysql_num_rows($search_mail_exist);
  56. if($exist) //on regarde si le mail existe.
  57.  {
  58.  // Si oui :
  59.  while($newsletter_id = mysql_fetch_array($search_mail_exist))
  60.   {
  61.   $unregister = "REPLACE newsletter(`newsletter_id`, `newsletter_mail`, `newsletter_send`) VALUES(".$newsletter_id['newsletter_id'].", '$newsletter_mail', '0')";
  62.   mysql_query($unregister);
  63.   header("location: http://sn4rky.free.fr/index.php" );
  64.   }
  65.  }
  66. else
  67.  {
  68.  // Si non :
  69.  echo $newsletter_mail, ' n\'est pas utilisé';
  70.  }
  71. }
  72. ?>


 
voici mon code final
j'ai mis en place les htmlentities mais je suis pas sur de la manière donc il faut les mettres  :whistle:


Message édité par snarky le 07-07-2005 à 02:28:49
Reply

Marsh Posté le 07-07-2005 à 00:57:44    

-mysql_close() ne te sers à rien, php ferme la connexion automatiquement à la fin du script
-pour l'htmlentities, regarde la doc php du l'utilise mal et ne sert à rien pour une variable numérique
- if($exist === 1) : if($exist) suffit
- si ton include ne contient pas de sortie html, mets le en debut de script une fois pour toute
- ta verification de mail est mauvaise : une adresse en toto@titi.com est valide, mais toto@toto.tutu.com non
- les die() de partout c'est horrible
- y a surement d'autres truc, la j'ai regardé en diagonale
 

Reply

Marsh Posté le 07-07-2005 à 01:54:47    


 
oki oki merchi bien, je vais faire les arrangements necessaires  :hello:


Message édité par snarky le 07-07-2005 à 02:16:59
Reply

Marsh Posté le 07-07-2005 à 03:36:55    

rho@bond.edu.au est un mail valide non ?

Reply

Marsh Posté le 07-07-2005 à 04:18:45    

oué

Reply

Marsh Posté le 07-07-2005 à 04:20:45    

il existe une regexp qui fait 200 lignes et elle valide tout type d'adresse email donc là pour ton cas, c'st de verifier kil y a au moins un . dans le domaine de l'adresse mail
 
par exemple un mail peut etre :  
 
president.jacques.chirac@elysee.gouv.fr

Reply

Marsh Posté le 07-07-2005 à 14:16:57    

Code :
  1. ...
  2. $exist = mysql_num_rows($search_mail_exist);
  3. if($exist)
  4. {
  5. ...


 
est ce que ça serait pas mieux, si je m'étais directement la valeur de $exist dans le if() ?
 

Code :
  1. ...
  2. if(mysql_num_rows($search_mail_exist))
  3. {
  4. ...


Message édité par snarky le 07-07-2005 à 14:17:49
Reply

Marsh Posté le 07-07-2005 à 15:21:43    

Si t'as plus besoin du flag après, alors c'est un peu plus rapide oui. [:spamafote]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-07-2005 à 15:23:31    

bah vu que c'est une variable créée a l'occasion pour faire le test. alors autant l'enlever ^^ merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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