Page 1 sur 1

Problème if

Posté : 18 mai 2011, 10:34
par Ez3kiel
Bonjour,

J'aimerais savoir si quelqu'un peut m'aider ...
Je suis en train de faire un formulaire de contact, si les champs sont remplis, je fais
Header("Location: contact.php?erreur=1");
et sinon je fais
Header("Location: contact.php?erreur=2");
Mais voilà sur ma page de contact quand je fais
<?php
$erreur=$_GET['erreur'];
echo $erreur;

if ($erreur = 2)
{
echo "<script>alert('Tous les champs portant un asterisque sont obligatoires.')</script>";
}

if ($erreur = 1)
{
echo "<script>alert('Mail envoyé')</script>";
}

?>
Il me renvoi les deux Alert(), et si je fais un else if, il me renvoi uniquement le 1er alert(), même si il reconnait que $erreur fait bien 1 (Cf echo $erreur;)

Voilà si vous trouvez ce qui va pas ... :s
Merci d'avance

Re: Problème if

Posté : 18 mai 2011, 11:19
par xTG
= c'est l'affectation.
== c'est la comparaison.

Re: Problème if

Posté : 18 mai 2011, 11:29
par Ez3kiel
Arf, exact j'avais oublié ... Merci !
Cependant j'ai un autre souci, lorsque j'arrive sur ma page contact, en haut il me met
Notice: Undefined index: erreur in C:\Users\Ez3kiel\Documents\EasyPHP\www\webpro-cuber\html\contact.php on line 9
Et dans mon <Head></Head> j'ai du coup :
<?php
$erreur = $_GET['erreur'];
echo $erreur;

if ($erreur == 2)
{
 echo "<script>alert('Tous les champs portant un asterisque sont obligatoires.')</script>";
}

else if ($erreur == 1)
{
echo "<script>alert('Mail envoyé')</script>";
}

?>
La ligne 9 correspondant à
$erreur = $_GET['erreur'];

Re: Problème if

Posté : 18 mai 2011, 13:03
par xTG
C'est que la variable n'existe pas.
Avant d'utiliser une variable il faut tester son existence :
if( isSet($_GET['erreur']) )
  $erreur = $_GET['erreur'];
else
  $erreur = 0;

Re: Problème if

Posté : 18 mai 2011, 16:56
par Ez3kiel
D'accord ça marche merci.
Autre chose, j'aurais aimé savoir si c'est phpment correct d'écrire cela :
	$debutmail  = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
	$domainemail = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
	$finmail = '([a-z0-9])'; // caractères autorisés après le nom de domaine
 
	$regex = $debutmail.'@'.$domainemail.'.'$finmail
	echo $regex;
 
	// test de l'adresse e-mail
	if (preg_match($regex, $email)) [...]
Car il me retourne un "Parse error: syntax error, unexpected T_VARIABLE in C:\Users\Ez3kiel\Documents\EasyPHP\www\webpro-cuber\html\Mail.php on line 22"
(l22 -> " $regex = $debutmail.'@'.$domainemail.'.'$finmail " )
Il me semble qu'on concatène comme cela pourtant ...

Re: Problème if

Posté : 18 mai 2011, 17:24
par moogli
alors coté syntaxe t'a un soucis sur la dernier variable tu n'a pas remis de. puor la concaténation et tu a oublié le ; à la fin ;)
donc
$regex = $debutmail.'@'.$domainemail . '.' .$finmail;
echo $regex;
après si ta version de php est >= 5.2 tu peux simplement utiliser la fonction filter_var pour vérifier la validité (syntaxiquement) d'une adresse. pourquoi l'utiliser pour faire la même chose ? parce qu'en général une fonction native est plus rapide et cela évite de se gourer dans le motif et son utilisation ;) (oui je sais je suis feignant ;) )


@+

Re: Problème if

Posté : 19 mai 2011, 08:06
par xTG
Peu de monde utilise filter_var pour les emails car il valide aussi les emails intranet. ;)

Re: Problème if

Posté : 19 mai 2011, 09:07
par Ez3kiel
Merci !!

Bon, j'en ai fini avec les parse error, maintenant les soucis restants sont de la logique ...

Car j'ai l'impression que mon test de mail ne marche pas ...

Il devrait retourner erreur=3 pour un email non valide, or il passe le filtre et m'envoi le mail ... :(
if (preg_match($regex, $email)) 
	{   
		
	Header("location:contact.php?erreur=3");

	}
	else 
	{   
		if (empty($nom) 
			|| empty($email) 
			|| empty($sujet) 
			|| empty($message))
	
   
	{  
		Header("Location: contact.php?erreur=2");
	} 
	else
	{  
		$mon_mail = "[email protected]";

		$entete = 'From : '.$email;
	
		$Total = $nom. ' : ' .$message;

	//mail($mon_mail, $sujet, $total, $entete);
	Header("Location: contact.php?erreur=1");
	}
	}
Je ne comprend pas pourquoi ...

Re: Problème if

Posté : 19 mai 2011, 10:10
par moogli
motif moisi :/

@+

Re: Problème if

Posté : 24 mai 2011, 14:48
par Ez3kiel
Up ? :oops:

Re: Problème if

Posté : 24 mai 2011, 15:19
par Ryle
S'il envoi le mail, c'est qu'il entre dans le if... s'il entre dans le if, c'est que la variable $email correspond au pattern défini dans $regex... il faut donc probablement revoir le contenu de ta variable $regex pour qu'elle soit plus restrictive :)

Re: Problème if

Posté : 25 mai 2011, 10:52
par Ez3kiel
Apparemment ce n'est pas ça car j'ai essayé avec le FILTER_VAR de moogli, et idem, il me valide "ff" comme adresse mail ... :/
If (!empty($email))
	
		{
			Header("location:contact.php?erreur=4");
		}
		
	else if (filter_var($adrelectro, FILTER_VALIDATE_EMAIL))
	
	{   
	Header("location:contact.php?erreur=3");
	}
	
	else if (empty($nom) 
			|| empty($adrelectro) 
			|| empty($sujet) 
			|| empty($message))
	{  
		Header("Location: contact.php?erreur=2");
	} 
	else
	{  
		$mon_mail = "[email protected]";

		$entete = 'From : '.$adrelectro;
	
		$Total = $nom. ' : ' .$message;
		echo $Total;
		echo $entete;
		echo $sujet;
		//mail($mon_mail, $sujet, $total, $entete);
		Header("Location: contact.php?erreur=1");
	}

?>

Du coup je pensais plus à souci de logique, ou de syntaxe dans mes if ... mais je ne vois pas où. #-o

Re: Problème if

Posté : 25 mai 2011, 14:09
par moogli
tu pourrais nous montrer le formulaire html, parce que la tu n'utilise pas les mêmes variables entre le 1er if et le forlter_var (qui me fait dire que l'erreur est surement la mais comme on a pas le complet ....)


@+

Re: Problème if

Posté : 25 mai 2011, 14:26
par Ez3kiel
Oups ! Oui pardon j'ai fais des modifs entre temps ...

Donc pour ce qui est du formulaire :
        <form action="Mail.php" method="post" id="contactform" >
          <ol>
            <li>
              <label for="name">Nom<span class="red">*</span></label>
              <input name="nom" class="text" />
            </li>
            <li>
              <label for="adrelectro">E-mail <span class="red">*</span></label>
              <input name="adrelectro" class="text"  />
			  <input type="text" name="email" id="email"/>
            </li>
			
            <li>
              <label for="societe">Société</label>
              <input name="societe" class="text" />
            </li>
            <li>
              <label for="sujet">Sujet <span class="red">*</span></label>
              <input name="sujet" class="text" />
            </li>
            <li>
              <label for="message">Message <span class="red">*</span></label>
              <textarea name="message" rows="6" cols="50" ></textarea>
            </li>
			
            <li class="buttons">
			<p><span>Les champs marqués d'un (*) sont obligatoires</span></p>

              <input type="image" name="Valider" id="Valider" src="images/send.gif" class="send" />
			  

              <div class="clr"></div>
            </li>
          </ol>
        </form>
Avec dans le head :
<?php

if( isSet($_GET['erreur']) )
{
  $erreur = $_GET['erreur'];
}
  else
{ 
 $erreur = 0;
}



if ($erreur == 2)
{
 echo "<script>alert('Tous les champs portant un asterisque sont obligatoires.')</script>";
}

else if ($erreur == 1)
{
echo "<script>alert('Mail envoyé')</script>";
}
else if ($erreur == 3)
{
echo "<script>alert('Merci de rentrer une adresse mail valide')</script>";
}
else if ($erreur == 4)
{
echo "<script>alert('Bot pwnd')</script>";
}
?>

Et sur ma page only php :
<?php


	
	$nom= $_POST["nom"];
	$adrelectro = $_POST["adrelectro"];
	$societe = $_POST["societe"];
	$sujet = $_POST["sujet"];
	$message = $_POST["message"];
	$email= $_POST["email"];
	


	If (!empty($email))
	
		{
			Header("location:contact.php?erreur=4");
		}
		
	else if (filter_var($adrelectro, FILTER_VALIDATE_EMAIL))
	
	{   
	Header("location:contact.php?erreur=3");
	}
	
	else if (empty($nom) 
			|| empty($adrelectro) 
			|| empty($sujet) 
			|| empty($message))
	{  
		Header("Location: contact.php?erreur=2");
	} 
	else
	{  
		$mon_mail = "[email protected]";

		$entete = 'From : '.$adrelectro;
	
		$Total = $nom. ' : ' .$message;
		echo $Total;
		echo $entete;
		echo $sujet;
		//mail($mon_mail, $sujet, $total, $entete);
		Header("Location: contact.php?erreur=1");
	}

?>

Re: Problème if

Posté : 25 mai 2011, 16:39
par Ez3kiel
Arrêtez toooooooooooout !

Je suis une bille, qui n'a pas fait attention que filter_var laissait passer si ce n'était pas bon et non l'inverse ... Donc un coup de '!' et c'est bon. 8-|

Merci !