Page 1 sur 2

Verif si textarea vide

Posté : 27 janv. 2008, 16:06
par laplumaencre
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");
}


Posté : 27 janv. 2008, 16:22
par h0_noMan
// Remplaces
if(strlen($_SESSION["message"])
// par 
if(strlen($_POST["message"])

Posté : 27 janv. 2008, 16:31
par laplumaencre
j'ai fais la modif mais pareil...:-/

Posté : 27 janv. 2008, 16:45
par h0_noMan
Mets des echo après chaque IF et tu verras exactement ou cela bloque.

Posté : 27 janv. 2008, 16:49
par laplumaencre
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 ...

Posté : 27 janv. 2008, 17:24
par Truc
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.

Posté : 27 janv. 2008, 18:19
par laplumaencre
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:

Posté : 27 janv. 2008, 18:29
par Truc
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 :?

Posté : 27 janv. 2008, 18:35
par laplumaencre
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 ) {
...
}

Posté : 27 janv. 2008, 18:47
par h0_noMan
Une petite question.

Pourquoi utilises tu les SESSIONS dans ton script ?

Posté : 27 janv. 2008, 18:52
par laplumaencre
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 :-(

Posté : 28 janv. 2008, 09:39
par d0m
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 ) {
...
}

Posté : 28 janv. 2008, 12:20
par laplumaencre
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..

Posté : 28 janv. 2008, 12:26
par h0_noMan
Essayes de stocker $_POST["message"]dans une variable puis de tester la variable directement.

Posté : 28 janv. 2008, 13:01
par d0m
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...