Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1689 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Correction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Correction

n°1142459
snarky
Posté le 06-07-2005 à 18:12:49  profilanswer
 

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
mood
Publicité
Posté le 06-07-2005 à 18:12:49  profilanswer
 

n°1142462
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 06-07-2005 à 18:17:21  profilanswer
 

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


Message édité par The-Shadow le 06-07-2005 à 18:18:44
n°1142465
snarky
Posté le 06-07-2005 à 18:19:05  profilanswer
 

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

n°1142469
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 06-07-2005 à 18:22:37  profilanswer
 

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 ;)

n°1142473
esox_ch
Posté le 06-07-2005 à 18:24:58  profilanswer
 

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
n°1142479
dwogsi
Défaillance cérébrale...
Posté le 06-07-2005 à 18:26:33  profilanswer
 

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})/
n°1142487
snarky
Posté le 06-07-2005 à 18:31:26  profilanswer
 

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

n°1142491
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 06-07-2005 à 18:34:03  profilanswer
 

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.

n°1142494
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 06-07-2005 à 18:36:29  profilanswer
 

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

n°1142504
sielfried
Posté le 06-07-2005 à 18:43:59  profilanswer
 

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
mood
Publicité
Posté le 06-07-2005 à 18:43:59  profilanswer
 

n°1142508
snarky
Posté le 06-07-2005 à 18:47:35  profilanswer
 

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:

n°1142510
snarky
Posté le 06-07-2005 à 18:54:29  profilanswer
 

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)

n°1142511
esox_ch
Posté le 06-07-2005 à 18:55:48  profilanswer
 

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
n°1142514
sielfried
Posté le 06-07-2005 à 18:56:39  profilanswer
 

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1142517
snarky
Posté le 06-07-2005 à 18:57:28  profilanswer
 

esox_ch a écrit :

non pas normal :D


 
mauvais copier/coller :ange:

n°1142518
snarky
Posté le 06-07-2005 à 18:58:22  profilanswer
 

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
n°1142519
esox_ch
Posté le 06-07-2005 à 19:00:28  profilanswer
 

aaaa non pas marcher :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1142577
snarky
Posté le 06-07-2005 à 20:19:47  profilanswer
 

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

n°1142583
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 06-07-2005 à 20:27:06  profilanswer
 

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

n°1142591
snarky
Posté le 06-07-2005 à 20:33:06  profilanswer
 

ç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 ^^

n°1142709
esox_ch
Posté le 06-07-2005 à 22:15:49  profilanswer
 

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
n°1142715
snarky
Posté le 06-07-2005 à 22:24:51  profilanswer
 

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
n°1142784
Profil sup​primé
Posté le 07-07-2005 à 00:57:44  answer
 

-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
 

n°1142792
snarky
Posté le 07-07-2005 à 01:54:47  profilanswer
 


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


Message édité par snarky le 07-07-2005 à 02:16:59
n°1142820
snarky
Posté le 07-07-2005 à 03:36:55  profilanswer
 

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

n°1142827
gatsusat
Posté le 07-07-2005 à 04:18:45  profilanswer
 

oué

n°1142828
gatsusat
Posté le 07-07-2005 à 04:20:45  profilanswer
 

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

n°1143240
snarky
Posté le 07-07-2005 à 14:16:57  profilanswer
 

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
n°1143330
sielfried
Posté le 07-07-2005 à 15:21:43  profilanswer
 

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
n°1143333
snarky
Posté le 07-07-2005 à 15:23:31  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Correction

 

Sujets relatifs
[Résolu] Correction Feuille de Style CSS Firefox > IEperceptron - correction d'erreur et descente du gradient
controles des champ et correction du formulaire PHPAlgorithme / méthode de correction ortographique ?
correction pleasejtree correction
Code de correction d'erreurCorrection de mon code...
Correction dans la saisieVB6 : Cette fonction a besoin d'une correction.. help !
Plus de sujets relatifs à : Correction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR