durum sorun yaratır eğer php | kullanırken veya (|)

4 Cevap php

ben böyle bir şey yaptım:

  <form action="validate.php" method="get">
Id :<input type="text" name="pID"/><br/><br/>
Name :<input type="text" name="pName"/><br/><br/>
Description :<input type="text" name="pDesc"/><br/><br/>
Price :<input type="text" name="pPrice"/><br/><br/>
<input type="submit" name="pSub"/>
</form>

Benim validate.php içerir:

<?php 

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){
            if(is_numeric($_GET['pID']) || is_numeric($_GET['pPrice']))
            {
                echo "</br>Your ID :".$_GET["pID"]."</br>";
                echo "Name is :".$_GET["pName"]."</br>";
                echo "Description :".$_GET["pDesc"]."</br>";
                echo "and Price :".$_GET["pPrice"]."</br>";
            }
            else{echo "Pls See That ID and Price are Numerical";}
}else{
echo "Fill up All The Values";
}
?>

düzgün çalışmıyor,

1st if conditions doesn't work properly ie. if i left blank "Name" input field message should have come saying "Fill up All The Values "...... instead its showing the list of inputs

formu (PHP) doğrulamak için başka bir yol yoktur

4 Cevap

Yanlış operatörünü kullanıyorsunuz: || "mantıksal VEYA" anlamına gelir; Aradığınız gibi görünüyor ne &&, yani "mantıklı AND" olduğunu.

Kod told tam olarak ne alakası var (see the documentation); Eğer intended başka bir şey bilgisayarınızla ilgili olmadığı gerçeği:

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice']))

"Pid boş değil YA pname boş YA ... değilse" anlamına gelir; kısa sürede alanlardan bir veya daha fazla boş değil gibi, koşul true değerlendirir.

Sen ne demek almak için neler yapabiliriz:

  • yerine OR AND (&&)
  • if (!(empty($_GET['pID']) || empty($_GET['pID'] ...)) kullanın - tüm ifade reddedildiği unutmayın in parentheses

(Bu iki çözüm eşdeğer neden görmek için De Morgan's laws okuyun)

Bu yanlış

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){}

Bunu böyle yapmak gerekir:

if (!empty($_GET['pID'], $_GET['pName'], $_GET['pDesc'], $_GET['pPrice'])){}

Ve tüm OR'lar yapmaya gerek yok. Ayrıca, daha iyi verilen değerlerin herhangi birinin boş olup olmadığını kontrol edin ve bu konuda hata atmak istiyorum.

Size bu gibi etrafında koşullarını değiştirmesi muhtemelen iyidir:


if(empty($_GET['pID']) || empty($_GET['pName']) || empty($_GET['pDesc']) || empty($_GET['pPrice'])) {
   echo "Please fill up all the values";
} else {
   // Do other validation.
}

Bu şekilde, size başka bir şey yapmadan önce girişler doğru olduğunu biliyorum. Açıkçası ben bu test ettik, ama beklendiği gibi çalışması gerekir. Girişlerin HERHANGİ boş değildi ne önce diyordun ek doğrulama yapmak, soruyordu. Diğer Commenters biri açıklandığı gibi bunu yapmak istiyorsa, kullanıyor olmalıdır && | | ziyade.

Etrafını Değişen sadece biraz daha net yapar!

Bu kod ile bir mantık sorunu var. | Kullanımı | Bu durumda bu girdilerin HERHANGİ bir değer içeriyorsa, o zaman ilk koşul bir araya geldi demektir. Tüm girdilerinin! Boş ise ilk koşul sadece bir araya geldi böylece ne yapmak istediğiniz, bir AND değil OR.

Uzun zaman oldu beri, AND operatörü PHP için ne emin hatırlamıyorum, ama muhtemelen && bulunuyor.