[RESOLU] Problème sérieux avec $_POST

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème sérieux avec $_POST

Re: [RESOLU] Problème sérieux avec $_POST

par AB » 09 févr. 2013, 17:54

Je sais pas trop ce que tu fais comme test mais c'est pourtant simple, testes cela :
<?php
echo 'empty($_POST)=>';
var_dump(empty($_POST));//empty($_POST)=>bool(true) 
echo '<br>';
echo 'isset($_POST)=>';
var_dump(isset($_POST));//isset($_POST)=>bool(true) 
echo'<br>';
echo 'empty($_POST[\'toto\'])=>';
var_dump(empty($_POST['toto']));//empty($_POST['toto'])=>bool(true) 
echo'<br>';
echo 'isset($_POST[\'toto\'])=>';
var_dump(isset($_POST['toto']));//isset($_POST['toto'])=>bool(false) 
echo'<br>';
?>

Re: [RESOLU] Problème sérieux avec $_POST

par xTG » 09 févr. 2013, 12:02

Il n'a jamais parlé de la fonction empty(teste l'existence + le vide) mais de la fonction isset (teste l'existence).
Donc tout ce qu'il dit est vrai. :)

Re: [RESOLU] Problème sérieux avec $_POST

par bobspongieux » 09 févr. 2013, 10:09

Franchement, après test, ce que tu viens de dire est faux. Ou alors j'y comprend rien. Mais quand j'envoie pas de $_POST, et que je teste avec empty après, ça me répond false, que ce sois pour $_POST ou $_POST['flag']. Toujours.

Re: Problème sérieux avec $_POST

par AB » 08 févr. 2013, 17:51

Donc, solution finale, utiliser deux fichiers distincts. Résolu.
Apparemment $_POST contient toujours une valeur qui n'est ni null ni false ni "" ni 0, isset répond toujours true pour un $_POST, et empty répond toujours false pour un $_POST.
$_POST est une supergloale et à ce titre elle est toujours définie donc isset retourne toujours vrai
Par contre ce n'est évidemment pas vrai pour le contenu de cette variable qui est un tableau. Si $_POST est vide empty retourne "true".

Re: Problème sérieux avec $_POST

par bobspongieux » 08 févr. 2013, 16:52

Donc, solution finale, utiliser deux fichiers distincts. Résolu.
Apparemment $_POST contient toujours une valeur qui n'est ni null ni false ni "" ni 0, isset répond toujours true pour un $_POST, et empty répond toujours false pour un $_POST.

Re: Problème sérieux avec $_POST

par bobspongieux » 08 févr. 2013, 16:51

Vos deux réponses ne fonctionnent pas.
J'ai même tenté ça
if((isset($_POST['flag']))&&($_POST['flag']==1)&&!empty($_POST['flag'])){ $form_sent=true; } else { $form_sent=false; }
J'ai abandonné de tester si le $_POST était rempli ou vide, apparemment personne n'a la solution sur le web, j'utilise désormais deux fichiers distincs. 16h bloqué sur ça au taff, f*ck it.
Bonne soirée.

Re: Problème sérieux avec $_POST

par fabb63 » 07 févr. 2013, 20:33

Bonjour,

tout à fait d'accord avec la réponse précédente.
Par ailleurs

Code : Tout sélectionner

if(isset($_POST['flag'])){ if($_POST['flag']==1) { $form_sent=true; } else { $form_sent=false; }} else { $form_sent=false; }
devrait plutôt s'écrire

Code : Tout sélectionner

if((isset($_POST['flag']))&&($_POST['flag']==1)) $form_sent=true; else $form_sent=false;
non ?

Re: Problème sérieux avec $_POST

par xTG » 07 févr. 2013, 20:00

Normal...
Tu ne gères que le cas où $_POST est rempli.

Ton traitement de formulaire doit être de la sorte :
if( !empty($_POST) ){
  // vérification des champs
}else{
  // ici on ne fait rien
}

Problème sérieux avec $_POST

par bobspongieux » 07 févr. 2013, 18:21

Bonjour,
Je suis entrain de réaliser un formulaire simple en PHP/MySQL.
J'aimerais pouvoir afficher un message lorsque l'utilisateur n'a pas rentré un champ. Le système du champ obligatoire de base quoi.
En cherchant un peu, je trouve deux manières apparemment fonctionnelles de le faire : grâce à la fonction isset, et grâce à un <input type="hidden"...>.
Je crée donc un <input type="hidden" name="flag" id="flag" value="1"> entre mes deux balises <form>.
Je crée une valeur $form_sent définie ainsi :
if(isset($_POST['flag'])){ if($_POST['flag']==1) { $form_sent=true; } else { $form_sent=false; }} else { $form_sent=false; }
Je crée aussi une condition sur l'écriture du message d'avertissement, définie ainsi :
if($pseudo==NULL && $form_sent=true){ echo "Nom d'utilisateur disponible";} else if($pseudo==false && $form_sent == true){ echo "Veuillez entrer un pseudo"; }
J'utilise une variable $pseudo qui vaut NULL si l'utilisateur a rentré un pseudo inexistant dans la BDD, et qui vaut false si l'utilisateur n'a pas entré de pseudo :
if(isset($_POST['pseudo'])){
$req=$bdd->prepare('SELECT pseudo WHERE pseudo=?');
$req->execute(array(htmlspecialchars($_POST['pseudo']))) or die(print_r($req->errorInfo()));
if (!$req['pseudo']) {$pseudo=NULL;} else{$pseudo=htmlspecialchars($_POST['pseudo']);
$reponse->closeCursor();}
} else{$pseudo=(bool) false;}
Mon problème est que "Nom d'utilisateur disponible" s'affiche en fin de ligne, même si on n'a jamais envoyé le formulaire, ce qui me semble carrément impossible.
Ci-joint le fichier original : https://mega.co.nz/#!etAHTZAK!PbvgUSsau ... 2DECQtlDmg

Merci d'avance à vous tous,
bobspongieux