2013-12-19 162 views
1

所以我想驗證地址表單字段和P.O.框表單字段。到目前爲止,我有這樣的:嵌套PHP如果循環

if (empty($_POST["po"]) && empty($_POST["address"])) 
{ 
    $poErr = "Please enter a P.O. Number OR address"; 
    $addressErr = "Please enter a P.O. Number OR address"; 
    if (!preg_match("/[0-9]{1,}$/",$po)) 
    { 
     $po = test_input($_POST["po"]); 
     $poErr = "Please enter only a number for P.O. Box."; 
    } 
    if (!preg_match("([0-9]{1,} [\s\S]*?)",$address)) 
    { 
     $address = test_input($_POST["address"]); 
     $addressErr = "Address must be only letters, numbers or one of the following _ - . , : ' \""; 
    } 
} 

test_input只是檢查特殊字符。

我想要做的是看P.O.框和地址是空的,如果是的話,那麼我會告訴它顯示一個錯誤到html中,爲一個字段或另一個字段輸入一個值,結果很好。之後我想要做的是確定哪一個被填充,然後驗證其中一個和/或兩個字段,如果其中一個或兩個都恰好被填充。

這是我的HTML我想要的「PO」和「地址」值保持如果有是窗體上的另一個錯誤:

<div class="form-group"> 
     <label class="control-label" for="address">Your Mailing Address **</label> 
     <input class="form-control" type="text" name="address" id="address" placeholder="Your Mailing Address" value="<?php echo $address; ?>"> 
     <br /><span class="error"><?php echo $addressErr; ?></span> 
    </div><!--form group address--> 

    <div class="form-group"> 
     <label class="control-label" for="po">Your P.O. Box (Number only) **</label> 
     <input class="form-control" type="text" name="po" id="po" placeholder="#" value="<?php echo $po; ?>"> 
     <br /><span class="error"><?php echo $poErr; ?></span> 
    </div><!--form group address-->   
+0

你能否提一下你所面臨的錯誤。請確保在'$ po'和'$ address'中獲得正確的值。 – Roopendra

+0

要清楚,唯一的錯誤是當表單字段未填寫。我沒有通過這段代碼獲得我想要的結果。我只是無法適當地嵌套if,以確定是否填充了一個或兩個字段並驗證填充的字段。 當我測試,以確保兩個領域都是空的,這是正確的代碼的唯一部分。 –

回答

0

你的條件是錯誤的。如果兩個字段都是空的,那麼你可以檢查單個字段。 如果兩個字段都是空的,那麼它會進入該條件。而且你想保留值,如果在形式上錯誤然後更改$po$_POST['po']$address$_POST['address']

$poErr = $addressErr = ''; 
if (empty($_POST["po"]) && empty($_POST["address"])) { 
    $poErr = "Please enter a P.O. Number OR address"; 
    $addressErr = "Please enter a P.O. Number OR address"; 
} else { 
    if (!empty($_POST["po"]) && !preg_match("/[0-9]{1,}$/", $_POST["po"])) { 
     $po = test_input($_POST["po"]); 
     $poErr = "Please enter only a number for P.O. Box."; 
    } 
    if (!empty($_POST["address"]) && !preg_match("([0-9]{1,} [\s\S]*?)", $_POST["address"])) { 
     $address = test_input($_POST["address"]); 
     $addressErr = "Address must be only letters, numbers or one of the following _ - . , : ' \""; 
    } 
} 

你想保留值形式表單提交後,請更改以下字段: -

<input class="form-control" type="text" name="address" id="address" placeholder="Your Mailing Address" value="<?php echo (isset($_POST["address"])) ? $_POST["address"] : ''; ?>"> 
<input class="form-control" type="text" name="po" id="po" placeholder="#" value="<?php echo (isset($_POST["po"])) ? $_POST["po"] : ''; ?>"> 
+1

這是我一直在尋找的最接近的。放置不正確的值標記每個字段的正確錯誤。 –

+0

抱歉 - 輸入正確的值時,如果沒有錯誤,則顯示「請輸入P.O.編號或地址」錯誤。 –

+0

一切正常,現在唯一的問題是,在提交表單時出現另一個表單上的錯誤(爲了測試目的而完成),值不會保留。 –

0

需要用戶

if($_POST["po"]=='') 

這可能幫助你

,你也可以改變像

if ($_POST['po']=='' && $_POST['address']=='') 
{ 
    echo $poErr = "Please enter a P.O. Number OR address"; 
    echo $addressErr = "Please enter a P.O. Number OR address"; 
} 
else 
{ 
     if (!preg_match("/[0-9]{1,}$/",$po)) 
     { 
      echo $po = test_input($_POST["po"]); 
      echo $poErr = "Please enter only a number for P.O. Box."; 
     } 
     if (!preg_match("([0-9]{1,} [\s\S]*?)",$address)) 
     { 
      echo $address = test_input($_POST["address"]); 
      echo $addressErr = "Address must be only letters, numbers or one of the following _ - . , : ' \"";    
     } 
} 
結構

您使用了&&這意味着如果兩者都是空的然後條件工作。否則您需要使用||。意味着如果任何一個是空的,那麼它的工作

1

如果兩個字段都是空的,它將處於第一個條件,並且如果任何字段不爲空,它將在下面的其他部分處理。

if (empty($_POST["po"]) && empty($_POST["address"])) 
{ 
    $poErr = "Please enter a P.O. Number OR address"; 
    $addressErr = "Please enter a P.O. Number OR address"; 
}else { 

    if (!preg_match("/[0-9]{1,}$/",$_POST["po"])) 
    { 
     $po = test_input($_POST["po"]); 
     $poErr = "Please enter only a number for P.O. Box."; 
    } 
    if (!preg_match("([0-9]{1,} [\s\S]*?)",$_POST["address"])) 
    { 
     $address = test_input($_POST["address"]); 
     $addressErr = "Address must be only letters, numbers or one of the following _ - . , : ' \""; 
    } 
} 
+0

當我在字段中輸入無效文本(基於正則表達式)時,它會將錯誤代碼引發到地址和郵箱的HTML中。我希望能夠看到哪一個被填充,然後驗證該字段(或者兩者都填充了)。 –

+0

可能是你提供了'preg_match'的空輸入'''''po'改爲'$ _POST [「po」]' –