Si isset $ _POST

101

J'ai un formulaire sur une page qui se soumet à une autre page. Là, il vérifie si le courrier d'entrée est rempli. Si c'est le cas, faites quelque chose et s'il n'est pas rempli, faites autre chose. Je ne comprends pas pourquoi il dit toujours qu'il est défini, même si j'envoie un formulaire vide. Qu'est-ce qui manque ou qui ne va pas?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}
Nrc
la source
6
Toutes les entrées de type texte et zones de texte présentes dans votre formulaire seront soumises au serveur même si leurs valeurs sont des chaînes vides.
hypeJonction

Réponses:

224

La plupart des entrées de formulaire sont toujours définies, même si elles ne sont pas remplies, vous devez donc également vérifier le vide.

Comme il !empty()vérifie déjà les deux, vous pouvez utiliser ceci:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
oopbase
la source
10
Ce tableau de comparaison est très utile pour des choses comme celle-ci php.net/manual/en/types.comparisons.php
A Star
2
Petite chose ... Je pense qu'il est préférable d'éviter l' !opérateur dans des cas comme celui-ci (plus facile à lire, moins de risques d'erreur, etc.) et d'inverser la logique ...if (empty()) {/* No */} else {/* Yes */}
MrWhite
25

Utilisez à la !emptyplace de isset. isset retourne true pour $_POSTcar le $_POSTtableau est superglobal et existe toujours (défini).

Ou mieux utiliser $_SERVER['REQUEST_METHOD'] == 'POST'

Nemoden
la source
2
Vous devez mentionner que l'utilisation des deux issetet !emptypour éviter les erreurs. EDIT: Oups, il apprend apparemment tous les jours alors Réf
Touki
1
J'ai essayé et les deux fonctionnent bien. Pourquoi $ _SERVER ['REQUEST_METHOD'] == 'POST' est-il meilleur? Que fait-il exactement? peut-il se référer à une entrée spécifique ou est-il générique au formulaire?
Nrc
3
$_SERVER['REQUEST_METHOD']s'assure que l'utilisateur a soumis le formulaire. $_POSTpeut être vide même dans ce cas. Considérez ce formulaire <form method="post"></form>:, le soumettre n'enverra rien à l'action, mais le type de demande sera post. Ou il peut être fait avec boucle: curl -X POST http://example.com/processor.php. Si le processeur contient du code comme echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, vous verrezPOST true
Nemoden
5

Depuis php.net , isset

Renvoie TRUE si var existe et a une valeur autre que NULL, FALSE sinon.

l'espace vide est considéré comme un ensemble. Vous devez utiliser empty () pour vérifier toutes les options nulles.

janenz00
la source
2

Si vous envoyez le formulaire vide, $ _POST ['mail'] sera toujours envoyé, mais la valeur est vide. Pour vérifier si le champ est vide, vous devez vérifier

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }
mboldt
la source
Je copie coller le code et je pense que ça ne marche pas? L'avez-vous vérifié?
Nrc
2

Ajoutez l'attribut suivant au formulaire de saisie de texte: required="required". Si le formulaire n'est pas rempli, il ne permettra pas à l'utilisateur de soumettre le formulaire.

Votre nouveau code sera:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}
Kushan Mehta
la source
2

Vous pouvez simplement utiliser:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

Sinon, utilisez empty ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}
CONvid19
la source
Selon les tableaux de comparaison de types PHP, vous avez tout à fait raison. Un simple booléen fait le travail de la fonction vide pour vérifier la chaîne vide.
viery365
Je sais que c'est une vieille réponse, mais la première méthode peut provoquer un avis d'index non défini.
ICE
1
@ICE Il peut être facilement contournée en préfixant les variables avec @, à savoir: @$_POST['username']. Merci d'avoir remarqué cela.
CONvid19
2

Utilisez à la !empty()place de isset(). Parce que isset()cela reviendra toujours vrai dans votre cas.

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}
Nadim Tareq
la source
1

Peut-être que vous pouvez essayer celui-ci:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }

Nica
la source
1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>
Asep Nurjaman
la source
3
Vous devez expliquer pourquoi votre code répond à la question du PO.
Markus
1

Pensons qu'il s'agit de votre formulaire HTML à l'étape2.php

step2.php

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

Je pense que vous en avez besoin pour votre base de données, vous pouvez donc attribuer la valeur de votre formulaire HTML à la variable php, maintenant vous pouvez utiliser Real Escape String et ci-dessous doit être votre

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

Où $ db est votre connexion à la base de données.

AleksAnderson IT
la source
1

Vérifiez si le FORMULAIRE a été soumis en premier, puis le champ. Vous devez également désinfecter le terrain pour éviter les pirates.

form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}
Debbie Kurth
la source
0

Pour répondre à la question posée: définir et vider ensemble donne trois conditions. Cela peut également être utilisé par Javascript avec une commande ajax.

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";
Vinnarien
la source
0

Vous pouvez essayer ceci:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
Akash ujjwal
la source
Vous devez expliquer votre réponse. SO existe non seulement pour répondre aux questions, mais pour éduquer les gens
Machavity
0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>
Thilina
la source
0

Tu peux essayer,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Vimukthi Guruge
la source