Pbl avec un echo

Eléphant du PHP | 271 Messages

24 oct. 2006, 00:12

Bonsoir,

Le script ci - dessous doit envoyer le pseudo et un mot familier à un destinataire.

Pour cela le visiteur envoie en post son E.mail /

La première condition
 if (empty($email))  
s'affiche très bien mais la 2ème condition
// je fait une boucle  
while($data = mysql_fetch_assoc($req))  

if( $data['Email_visiteur'] != $email)
ne s'affiche pas.

Je pense que le pbl viens entre le while et le if mais je ne vois pas comment le résoudre;

Si quelqu'un peut m'aider, merci d'avance
Ci - dessous le script entier
<?php

require('session/administration/config.php'); 
if(isset($_POST['email']))    $email=$_POST['email'];
else      $email="";

//je vérifie si le post est vide
{
 if (empty($email))  
    { 
echo"<br /><br /><br /><br /><br /><br />";
echo"<table width=\"80%\" border=\"1\" align=\"center\">";
 echo"<tr>\n";
    echo"<td width=\"487\"> <p align=\"center\"><br /></p>";
     echo"<p align=\"center\">Bonjour<br /><br />Vous souhaitez recevoir vos infos de connection mais<br /> vous avez oublié de taper votre adresse E.mail";
	 echo" <br /><br />";
     echo"<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
    echo"</td>\n";
  echo"</tr>\n";
echo"</table>";
    }
	// Aucun champ n'est vide, je peux lire dans la table 
else     
 {
  
mysql_connect($localhost,$login,$mot) OR die("Erreur !<br/ >" .mysql_error());

// je me  rend sur ma base de données 
mysql_select_db($dbName) OR die("Erreur !<br />" .mysql_error()); 

// je sélectionne le champ, la table et je vérifie si l'email du visiteur existe
$sql = "SELECT Email_visiteur FROM inscriptions WHERE Email_visiteur = '$email'" ;
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());


// je fait une boucle 
while($data = mysql_fetch_assoc($req)) 

if( $data['Email_visiteur'] != $email)

 // Quand la condition est réalisée, c'est à dire que l'adresse ne correspond pas j'affiche l'echo ci - dessous, mais rien ne s'affiche (sic)
{
echo "<br /><br /><br /><br /><br /><br />";
echo "<table width=\"80%\" border=\"1\" align=\"center\">";
 echo "<tr>\n";
    echo "<td width=\"487\"> <p align=\"center\"><br /></p>";
      echo "<p align=\"center\">Bonjour<br /><br />Cette adresse E.mail n'existe pas."; 
	  echo "<br /><br />\n";
	  echo "Pour vous inscrire"; 
	  echo "<a href=\"index3.php?page=inscription/inscription.php\"> cliquez ici</strong></center></a>";
	  echo "<br /><br />\n";
	  echo "<center><a href=\"index3.php?page=contact.php\">Sinon contactez - nous</a></center>"; 
	  echo " <br /><br />";
      echo "<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
     echo "</td>\n";
  echo "</tr>\n";
echo "</table>";
}
else
{
// je sélectionne les champs , la table et je vérifie avec l'email du visiteur existe
$sql = "SELECT nomvisiteur, motfam FROM inscriptions WHERE Email_visiteur = '$email'" ;
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// je fait une boucle 
while($data = mysql_fetch_assoc($req)) 
{ //j'affiche pour vérifier si tout vas bien
echo '<b>'.$data['nomvisiteur']. '</b>' .$data['motfam'].'</b>';      
}
}  
}
}

?>
	
Patience et obstination sont des qualités !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 oct. 2006, 01:19

Salut,
La condition ne peut jamais etre verifiée puisque tu restreins le résultat de la requete aux données dont le mail est égal à $email :
$sql = "SELECT Email_visiteur FROM inscriptions WHERE Email_visiteur = '$email'" ;
les données ne peuvent donc pas être différentes donc jamais passer ce test :
if( $data['Email_visiteur'] != $email) 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 271 Messages

24 oct. 2006, 19:13

Bonjour,
Merci bcp de l'aide et le probléme est résolu. Mais en voila un autre.
Il affiche l'echo autant de fois qu'il y a d'enregistrement dans la table.

Où et comment je peux faire pour qu'il affiche l'echo 1 seule fois ? J'ai essayé plusieurs solutions sans résultat.

Merci d'avance de l'aide
// je sélectionne le champ, la table
 $sql = "SELECT Email_visiteur FROM inscriptions "; 
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());


// je fait une boucle 
while($data = mysql_fetch_assoc($req)) 

if( $data['Email_visiteur'] != $email)
{ // ici l'echo s'affiche avec autant d'enregistrement dans la table
echo "<br /><br /><br /><br /><br /><br />";
echo "<table width=\"80%\" border=\"1\" align=\"center\">";
 echo "<tr>\n";
    echo "<td width=\"487\"> <p align=\"center\"><br /></p>";
      echo "<p align=\"center\">Bonjour<br /><br />Cette adresse E.mail n'existe pas."; 
	  echo "<br /><br />\n";
	  echo "Pour vous inscrire"; 
	  echo "<a href=\"index3.php?page=inscription/inscription.php\"> cliquez ici</strong></center></a>";
	  echo "<br /><br />\n";
	  echo "<center><a href=\"index3.php?page=contact.php\">Sinon contactez - nous</a></center>"; 
	  echo " <br /><br />";
      echo "<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
     echo "</td>\n";
  echo "</tr>\n";
echo "</table>";
}
Patience et obstination sont des qualités !

Eléphant du PHP | 193 Messages

24 oct. 2006, 19:31

Ta requête cherche les emails de tous les visiteurs. Après ça, pour chacun d'entre eux tu testes si le mail reçu en paramètre est celui de la base, et sinon tu affiches le tableau... donc c'est tout à fait normal!

Que veux-tu faire au juste? Tester l'existence de ce mail dans ta table?
<?php
$sql = "SELECT Email_visiteur FROM inscriptions WHERE Email_visteur = '".$email."'";
?>
Il te reste à tester le nombre de ligne avec mysql_nums_rows(), si tu as 0 ligne c'est que le mail n'existe pas, si tu en as plus c'est qu'il existe.

PS: utiliser des tableaux pour mettre en page une page web n'est pas souvent la meilleure solution.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 oct. 2006, 19:44

Là c'est tout à fait normal... Tu auras autant d'affichages que d'adresses email différentes de celle posté.

Et si tu nous expliquais ce que tu veux faire ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 271 Messages

24 oct. 2006, 21:28

Désolé je ne me suis pas bien expliqué.

Le script dans sa totalité doit renvoyer automatiquement les infos de 2 champs [nom-visiteur] et [motfam] quand la personne inscrite sur le site a oublié l'un ou l'autre. Pour cela il tape dans un formulaire son adresse E.mail d'inscription.

:arrow: Le script reçoit en post une adresse E.mail.

:arrow: Je souhaite qu'il vérifie si l'adresse existe.
Si elle n'existe pas
:arrow: alors il y a un message d'erreur (l'echo qui s'affiche plusieurs fois)

:arrow: Sinon, je souhaite qu'il sélectionne les champs [nom-visiteur] et le [motfam] qui correspond à l'adresse E.mail de la personne inscrite.
:arrow: pour les envoyer automatiquement à cette même adresse E.mail.

(je n'ai pas encore travailler sur la fonction mail)

Mon soucis est : comment le message d'erreur peut - il s'afficher qu'un seule fois. Je précise que le script s'exécute correctement si l'adresse E. mail existe.
Merci de l'aide.
Ci - dessous le script en entier
<?php

require('session/administration/config.php'); 
if(isset($_POST['email']))    $email=$_POST['email'];
else      $email="";

//je vérifie si le post est vide
{
 if (empty($email))  
    { 
echo"<br /><br /><br /><br /><br /><br />";
echo"<table width=\"80%\" border=\"1\" align=\"center\">";
 echo"<tr>\n";
    echo"<td width=\"487\"> <p align=\"center\"><br /></p>";
     echo"<p align=\"center\">Bonjour<br /><br />Vous souhaitez recevoir vos infos de connection mais<br /> vous avez oublié de taper votre adresse E.mail";
	 echo" <br /><br />";
     echo"<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
    echo"</td>\n";
  echo"</tr>\n";
echo"</table>";
    }
	// Aucun champ n'est vide, je peux lire dans la table 
else     
 {
  
mysql_connect($localhost,$login,$mot) OR die("Erreur !<br/ >" .mysql_error());

// Je me rend sur la base
mysql_select_db($dbName) OR die("Erreur !<br />" .mysql_error()); 

// je sélectionne le champ, la table 
$sql = "SELECT Email_visiteur FROM inscriptions "; 
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());


// je fait une boucle
while($data = mysql_fetch_assoc($req)) 

if( $data['Email_visiteur'] != $email)
{ // le tableau ci - dessous s'affiche autant de fois qu'il y a d'enregistrement
echo "<br /><br /><br /><br /><br /><br />";
echo "<table width=\"80%\" border=\"1\" align=\"center\">";
 echo "<tr>\n";
    echo "<td width=\"487\"> <p align=\"center\"><br /></p>";
      echo "<p align=\"center\">Bonjour<br /><br />Cette adresse E.mail n'existe pas."; 
	  echo "<br /><br />\n";
	  echo "Pour vous inscrire"; 
	  echo "<a href=\"index3.php?page=inscription/inscription.php\"> cliquez ici</strong></center></a>";
	  echo "<br /><br />\n";
	  echo "<center><a href=\"index3.php?page=contact.php\">Sinon contactez - nous</a></center>"; 
	  echo " <br /><br />";
      echo "<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
     echo "</td>\n";
  echo "</tr>\n";
echo "</table>";
}
else
{
// je sélectionne les champs , la table qui correspondent à l'adresse envoyé en post
$sql = "SELECT nomvisiteur, motfam FROM inscriptions WHERE Email_visiteur = '$email'" ;
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// je fait une boucle 
while($data = mysql_fetch_assoc($req)) 
{ // affichage provisoire pour vérifier si le script s'exécute correctement
echo '<b>'.$data['nomvisiteur']. '</b>' .$data['motfam'].'</b>'; 
}
}  
}
}

?>
	
Patience et obstination sont des qualités !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 oct. 2006, 21:40

Dans ce cas c'est beaucoup plus simple.

Tu effectue une requête avec l'e-mail en POST si tu as un résultat alors le mail existe => tu envoie un mail à la personne
sinon tu affiche le message d'erreur :
<?php

require('session/administration/config.php'); 
$email = (isset($_POST['email'])) ? $_POST['email'] : "" ;


//je vérifie si le post est vide

if (empty($email))  
{ 
	echo"<br /><br /><br /><br /><br /><br />";
	echo"<table width=\"80%\" border=\"1\" align=\"center\">";
	 echo"<tr>\n";
	    echo"<td width=\"487\"> <p align=\"center\"><br /></p>";
	     echo"<p align=\"center\">Bonjour<br /><br />Vous souhaitez recevoir vos infos de connection mais<br /> vous avez oublié de taper votre adresse E.mail";
	     echo" <br /><br />";
	     echo"<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
	    echo"</td>\n";
	  echo"</tr>\n";
	echo"</table>";
}
// Aucun champ n'est vide, je peux lire dans la table 
else     
{

	mysql_connect($localhost,$login,$mot) OR die("Erreur !<br/ >" .mysql_error());
	// Je me rend sur la base
	mysql_select_db($dbName) OR die("Erreur !<br />" .mysql_error()); 
	
	// je sélectionne le champ, la table 
	$sql = "SELECT nomvisiteur, motfam FROM inscriptions WHERE Email_visiteur = '".$email."'"; 
	$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	
	// je fait une boucle
	if($data = mysql_fetch_assoc($req)) 
	{ 
		mail($email,"Titre mail",'',$data['nomvisiteur']. ' ' .$data['motfam']);
	}
	else
	{			
		echo "<br /><br /><br /><br /><br /><br />";
		echo "<table width=\"80%\" border=\"1\" align=\"center\">";
		 echo "<tr>\n";
		    echo "<td width=\"487\"> <p align=\"center\"><br /></p>";
		      echo "<p align=\"center\">Bonjour<br /><br />Cette adresse E.mail n'existe pas."; 
		      echo "<br /><br />\n";
		      echo "Pour vous inscrire"; 
		      echo "<a href=\"index3.php?page=inscription/inscription.php\"> cliquez ici</strong></center></a>";
		      echo "<br /><br />\n";
		      echo "<center><a href=\"index3.php?page=contact.php\">Sinon contactez - nous</a></center>"; 
		      echo " <br /><br />";
		      echo "<p align=\"center\"><a href=\"index3.php\">Pour retourner à la page d'accueil</center></a></p>";
		     echo "</td>\n";
		  echo "</tr>\n";
		echo "</table>";
	}

}
?>
Pense à vérifier la valeur POST['email']... protèger avec addslashes par exemple.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

24 oct. 2006, 21:47

Pour faire ça, tu pourrais simplifier : tu n'es d'abord pas obligé d'afficher toutes les adresses qui ne correspondent pas, ce que tu veux, c'est ce qui surtout ce qui correspond, donc simplifions :
<?php
require('session/administration/config.php');
$email = (isset($_POST['email'])) ? $_POST['email'] : "";

//je vérifie si le post est vide
if (empty($email))
{
?>
<br /><br /><br /><br /><br /><br />
<table width="80%" border="1" align="center">
  <tr>
    <td width="487">
      <p align="center"><br />
      </p>
      <p align="center">Bonjour<br />
      <br />
      Vous souhaitez recevoir vos infos de connection mais<br />
      vous avez oublié de taper votre adresse E.mail<br />
      <br />
      <p align="center"><a href="index3.php">Pour retourner à la page d'accueil</center></a></p>
    </td>
  </tr>
</table>
<?php
}
// Aucun champ n'est vide, je peux lire dans la table
else
{

    mysql_connect($localhost,$login,$mot) or die("Erreur !<br/ >" .mysql_error());

    // Je me rend sur la base
    mysql_select_db($dbName) OR die("Erreur !<br />" .mysql_error());

    // je cherche les correspondances existantes.
    $sql = "SELECT nomvisiteur, motfam FROM inscriptions WHERE Email_visiteur = '". $email ."'";
    /* Exécution de la requête */
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    /* On compte le nombre de lignes retournées */
    $nb = mysql_num_rows($req);
    /* S'il y a au moins une ligne, on boucle sur les résultats */
    if($nb > 0)
    {

        // je fait une boucle
        while($data = mysql_fetch_assoc($req))
        {
            echo '<b>'.$data['nomvisiteur']. '</b>' .$data['motfam'].'</b>';
        }
    }
    else 
    {
        /* Aucun résultat n'a été retourné */
?>
<p>Cette adresse n'existe pas dans la liste enregistrée.</p>
<?php
    }
}
?>
Ça ne te semble pas plus clair comme ça ? Et en plus on fait pas 5000 requêtes, on en fait une seule pour tout le traitement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 271 Messages

24 oct. 2006, 22:05

Ca marche !!!!!!!!!

Merci beaucoup de votre aide.
Patience et obstination sont des qualités !

Eléphant du PHP | 271 Messages

24 oct. 2006, 22:30

Un grand merci à Vighneshvara modérateur pour la fonction mail.
Patience et obstination sont des qualités !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 oct. 2006, 23:08

Un grand merci à Vighneshvara modérateur
ça c'est moi \:D/
pas trop dur le copier coller pour Vighnesh-machin :langue:

Sinon pour faire plus propre tu peux jetter un oeil à CECI

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute