2013-12-19 160 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”]' –