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";
}

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";
}

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'


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.


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"]) != "") { .. }

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";    
}

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'];
}

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";
}

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"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

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.


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";
   } 
}

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."!";

0

Vous pouvez essayer ceci:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

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";
}
?>

0

Tu peux essayer,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.