Verif si textarea vide

Eléphant du PHP | 183 Messages

27 janv. 2008, 16:06

Salut a tous !
J'avais un formulaire de mail qui fonctionnait a merveille, maissuite a une attaque de robot spam, je suis en train de reviser ma copie pour le securisé un peu plus...
En fait l'astuve je l'ai trouvé sur ce forum, mettre un textarea hidden, si il est remplit c'est q'un coui... de robot l'a remplit donc envois pas de mail.
Voila, mais le probleme c'est que ds mon code il sort tjs de la boucle maintenant car php trouve que mon textarea n'est pas vide et il est pourtant desesperement vide, meme apres verif avec var_dump $POST qui me le confirme. Et donc sort tjs de la boucle et plus d'envois de mail... là on peut dire que c'est efficace :-)))
J'ai essayé avec empty, isset mais idem ...
Voici mon code =>
ps : $_session spam contient le vrai texte noter par utilisateur, et $_session message, le textarea invisible qui ne peut etre remplit...
//var_dump($_POST); 
session_start();

if ($_POST["envoyer_x"] or $_POST["envoyer_y"] == 0 ) { //si appuis sur bouton envoyer
 
 if (strlen($_SESSION["message"]) == 0 ) {  //Si textarea vide alors => ok, sinon robot spam a remplit comme un c** le champ invisible
	$_SESSION["mail"]=""; //réinitialisation du message
	$_SESSION["email"] = strip_tags($_POST["email"]);
	$_SESSION["spam"] = strip_tags($_POST["spam"]);
	if ($_POST["email"] =="" and $_POST["spam"] =="") {
		$_SESSION["mail"] = "Vous n'avez renseigné aucun champ !";	
		header("Location:index.php?page=contact");
	}

        if ($_POST["email"] =="") {
		$_SESSION["mail"] = "Veuillez saisir votre email svp !";
		header("Location:index.php?page=contact");
        } else {
		$point = strpos($_POST["email"],".");
		$arobase = strpos($_POST["email"],"@");
	    if ($point=="" || $arobase=="") {
		$_SESSION["mail"] ="Votre email doit comporter un <b>point</b> et un <b>'@'</b><br>";
		header("Location:index.php?page=contact");
            } else {
		$_SESSION["email"]=$_POST["email"];
               if ($_POST["spam"] =="") {
	           $_SESSION["mail"] = "Vous n'avez pas laissé de message !";
                   header("Location:index.php?page=contact");
               	} else {
		$destinataire = "[email protected]";
		$objet = "contact";
		$headers = 'From: ' . $_SESSION["email"] . "\r\n" .
            	'Reply-To: ' . $_SESSION["$email"] . "\r\n" .
	          'X-Mailer: PHP/' . phpversion(); 
		mail($destinataire,$objet,$_SESSION["spam"],$headers);    
		$_SESSION["mail"]= "Votre message a bien été envoyer à"
		header("Location:index.php?page=contact");
		$_SESSION["email"] = "";
		$_SESSION["spam"] = "";
		$_SESSION["message"] = "";
                }
                }
            }
    } 	$_SESSION["message"] = "";
	$_SESSION["mail"]="sortit de la boucle"; //debugage
	exit;
} else {
	$_SESSION["mail"]=="";
	$_SESSION["email"] = $_POST["email"];
	$_SESSION["spam"] = $_POST["spam"];
	$_SESSION["mail"]= "Erreur lors de l'envois de votre message, veuillez ressayer";
	header("Location:index.php?page=contact");
}


Eléphant du PHP | 445 Messages

27 janv. 2008, 16:22

// Remplaces
if(strlen($_SESSION["message"])
// par 
if(strlen($_POST["message"])

Eléphant du PHP | 183 Messages

27 janv. 2008, 16:31

j'ai fais la modif mais pareil...:-/

Eléphant du PHP | 445 Messages

27 janv. 2008, 16:45

Mets des echo après chaque IF et tu verras exactement ou cela bloque.

Eléphant du PHP | 183 Messages

27 janv. 2008, 16:49

Je l'ai fait et la boucle s'arrete aussitot apres avoir verifier si textarea caché est vide = pour php jamais vide ... et donc sort tjs de la boucle ...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 janv. 2008, 17:24

Pour bien se faire comprendre il faut bien parler (à ce qu'il paraît :lol: )

Il n'y a pas de boucle dans ton code mais des instructions conditionnelles.
Tu peux également indenterton code correctement pour l'aérer et faciliter sa lecture.

Ensuite tu utilises des variables de session qui n'ont jamais été affectées des variables POST.

/!\ 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 | 183 Messages

27 janv. 2008, 18:19

tu parle de la variable $-Session['mail'] ??, c'est en fait une variable qui me sert a renvoyer le message d'erreur, ou message email envoyé.
Sinon j'ai pas tout compris a ce que tu m'as dit :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 janv. 2008, 18:29

Attention :
$-Session['mail'] n'est pas $_SESSION['mail']

Je parle de cette ligne
if (strlen($_SESSION["message"]) == 0 )
$_SESSION["message"] n'est pas initialisée (ou affectée).
Puis pour le reste sans reprendre le code et l'indenter par moi même je ne vois rien donc illisible :?

/!\ 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 | 183 Messages

27 janv. 2008, 18:35

Je ne peux pas l'initialiser au depart puisque je veux justement savoir quand le script demarre si la $_SESSION['message'] est vide ou non, ET enf ait apres correction, je test direct sur
if (strlen($_POST["message"]) == 0 ) {
...
}

Eléphant du PHP | 445 Messages

27 janv. 2008, 18:47

Une petite question.

Pourquoi utilises tu les SESSIONS dans ton script ?

Eléphant du PHP | 183 Messages

27 janv. 2008, 18:52

Les sessions sont utiles dans le script car quand il y une erreur, genre email vide ou non valide, l'utilisateur n'a pas a tout retaper ds email et ds la zone de texte (nommé spam)
Mais ce script fonctionnait super bien, je veux juste que si la 2eme zone de texte invisible a l'utilisateur (textarea nommé message) est remplit, que le script s'arrete et donc n'envois pas de mail...
Donc le blocage se trouve là
if (strlen($_POST["message"]) == 0 ) {
...
}
Php arrete tjs le script alors que ma variable $_POST['message'] est pourtout belle et bien vide :-(

d0m
Mammouth du PHP | 1141 Messages

28 janv. 2008, 09:39

as tu reagréd ce qui se trouve dans la variable $_POST["message"] ?
Si
(strlen($_POST["message"])==0)
est faux c'est forcement que
strlen($_POST["message"]) > 1
donc fais des affichages simples avant le test pour voir ce qui s'y trouve :
echo 'la variable existe : ';if(isset($_POST["message"])) echo 'oui';else echo 'non';echo '<BR>';
echo 'nombre de caracteres : '.strlen($_POST["message"]).'<BR>';
echo 'contenu : '.$_POST["message"].'<BR>';
echo 'nombre de caracteres sans espaces vides : '.strlen(trim($_POST["message"])).'<BR>';
echo 'contenu sans espaces vides : '.trim($_POST["message"]).'<BR>';
if (strlen($_POST["message"]) == 0 ) {
...
}

Eléphant du PHP | 183 Messages

28 janv. 2008, 12:20

Salut merci de regarder encore mon billet :-)
Donc j'ai fait un var_dump($_POST) et ça me renvois qu => string(message) = 0 ...
c'est ça le truc, car effet si il sort de la boucle s'est forcement que >1, mais il semble que non ..un vrai casse tete chinois
Bon je continu de chercher..

Eléphant du PHP | 445 Messages

28 janv. 2008, 12:26

Essayes de stocker $_POST["message"]dans une variable puis de tester la variable directement.

d0m
Mammouth du PHP | 1141 Messages

28 janv. 2008, 13:01

Donc j'ai fait un var_dump($_POST) et ça me renvois qu => string(message) = 0 ...
bizarre ce que tu as dans POST.
Pour entrer dans la boucle tu devrais avoir en faisant un var_dump de $POST:

Code : Tout sélectionner

["message"] => string(0) ""
je crois bien que tu n'as pas dans $_POST['message'] ce que tu penses...