$ _POST olarak ayarlanmışsa


102

Bir sayfada, başka bir sayfaya gönderilen bir formum var. Orada, giriş postasının doldurulup doldurulmadığını kontrol eder. Öyleyse bir şeyler yapın ve doldurulmazsa başka bir şey yapın. Boş bir form göndersem bile neden her zaman ayarlandığını söylediğini anlamıyorum. Eksik veya yanlış olan ne?

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
Formunuzda bulunan tüm metin benzeri girdiler ve metin alanları, değerleri boş dizeler olsa bile sunucuya gönderilecektir.
hypeJunction

Yanıtlar:


224

Çoğu form girişi, doldurulmasa bile her zaman ayarlıdır, bu nedenle boşluğu da kontrol etmelisiniz.

Yana !empty()ikisi için zaten kontrol eder, bu kullanabilirsiniz:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}

10
Bu karşılaştırma tablosu, php.net/manual/en/types.comparisons.php
A Star

2
Önemsiz bir şey ... !Bu gibi durumlarda (daha kolay okunması, daha az hata olasılığı vb.) if (empty()) {/* No */} else {/* Yes */}
Operatörden kaçınmanın

25

!emptyBunun yerine kullanın isset. isset doğru döndürür $_POSTçünkü $_POSTdizi süper küreseldir ve her zaman vardır (set).

Veya daha iyi kullanın $_SERVER['REQUEST_METHOD'] == 'POST'


2
İKİSİNİ kullandığınızı issetve !emptyhatayı önlemek için bahsetmelisiniz . DÜZENLEME: Hata! Görünüşe göre her gün Öğreniyor, sonra Ref
Touki

1
Denedim ve ikisi de iyi çalışıyor. $ _SERVER ['REQUEST_METHOD'] == 'POST' neden daha iyi? Tam olarak ne yapıyor? belirli bir girdiye atıfta bulunabilir mi yoksa forma genel mi?
Nrc

3
$_SERVER['REQUEST_METHOD']kullanıcının formu göndermesini sağlar. $_POSTbu durumda bile boş olabilir. Şu formu düşünün:, <form method="post"></form>bunu göndermek eyleme hiçbir şey göndermeyecek, ancak istek türü olacaktır post. Yoksa Kıvrık yapılabilir: curl -X POST http://example.com/processor.php. İşlemci gibi kod içeriyorsa echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, göreceksinizPOST true
Nemoden

5

Php.net'ten isset

Var varsa ve NULL dışında bir değere sahipse TRUE, aksi takdirde FALSE döndürür.

boş alan küme olarak kabul edilir. Tüm boş seçenekleri kontrol etmek için empty () kullanmanız gerekir.


2

Formu boş gönderirseniz, $ _POST ['posta'] yine de gönderilir, ancak değer boştur. Alanın boş olup olmadığını kontrol etmek için kontrol etmeniz gerekir

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

Kodu kopyalayıp yapıştırıyorum ve çalışmadığını düşünüyorum. Kontrol ettin mi
Nrc

2

Aşağıdaki özniteliği giriş metni formuna ekleyin: required="required" . Form doldurulmamışsa, kullanıcının formu göndermesine izin vermeyecektir.

Yeni kodunuz şöyle olacaktır:

<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

Şunları kullanabilirsiniz:

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

Alternatif olarak, empty () kullanın

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

İle göre PHP Tür Karşılaştırma tabloları kesinlikle haklısın. Basit bir boole, boş dizgeyi kontrol etmek için boş işlevin işini yapar.
viery365

Bunun eski bir cevap olduğunu biliyorum ama ilk yöntem tanımsız indeks bildirimine neden olabilir.
ICE

1
@ICE Kolayca değişkenleri adýnýnönüne atlanabilir @yani: @$_POST['username']. Bunu fark ettiğin için teşekkürler.
CONvid19

2

!empty()Bunun yerine kullanın isset(). Çünkü isset()sizin durumunuzda her zaman doğru olacaktır.

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

1

Belki bunu deneyebilirsin:

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
Kodunuzun neden OP'nin sorusunu yanıtladığını açıklamalısınız.
Markus

1

Bunun step2.php'deki HTML Formunuz olduğunu düşünelim

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>

Veritabanınız için buna ihtiyacınız olduğunu düşünüyorum, böylece HTML Form Değerinizi php Değişkenine atayabilirsiniz, şimdi Real Escape String'i kullanabilirsiniz ve aşağıda sizin

step2_check.php

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

$ Db Veritabanı Bağlantınızdır.


1

Önce FORM'un, ardından alanın gönderilip gönderilmediğini kontrol edin. Ayrıca bilgisayar korsanlarını önlemek için alanı sterilize etmelisiniz.

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

Gönderilen soruyu cevaplamak için: isset ve empty birlikte üç koşul verir. Bu, Javascript tarafından bir ajax komutu ile de kullanılabilir.

$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

Bunu deneyebilirsiniz:

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

Cevabınızı açıklamanız gerekiyor. SO sadece soruları yanıtlamak için değil, insanları eğitmek için de var
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

Deneyebilirsin,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.