PHP表单-文本框或下拉列表必需


PHP Form - Text Box or Dropdown List Required

我想知道是否有人可以帮助我这个。我有一个php联系人表单与两个必填字段。用户需要填写文本字段,或者从下拉列表中选择一个选项。其中一个需要填写。以下是我的文件:

    // previous requisition number
if(trim($_REQUEST['prevReqNum']) === '')  {
    $prevReqNumError = '<span class="error">Please enter your previous requisition number.</span>';
    $hasError = true;
} else if (!preg_match("/^([1]-)?[a-z0-9]{6}$/i", trim($_REQUEST['prevReqNum']))) {
    $prevReqNumError = '<span class="error">You entered an invalid requisition number.</span>';
    $hasError = true;
// assigned engineer
} else if(empty($_POST['engineer'])) {
$engineerError = '<span class="error">Please select the engineer that you were working with.</span>';
$hasError = true; }
else{
$engineer = $_POST['engineer'];
}

,这里是HTML:

         <p><label for="prevReqNum">*Previous Requisition Number:&nbsp;</label><input type="text" size="40" name="prevReqNum" id="prevReqNum" value="<?php if(isset($_POST['prevReqNum'])) echo $_POST['prevReqNum'];?>" placeholder=" eg. 000000" /> <?php if($prevReqNumError != '') { ?><span class="error"><?=$prevReqNumError;?></span><?php } ?>
             or <label for="engineer">Assigned Engineer: </label><select name='engineer' id="engineer" size="1">
              <option value="" selected="selected">Select</option>
              <option <?php echo $engineer=='Dexter'?'selected':''; ?> >Dexter</option>
              <option <?php echo $engineer=='Jake'?'selected':''; ?> >Jake</option>
              <option <?php echo $engineer=='Mo'?'selected':''; ?> >Mo</option>
              <option <?php echo $engineer=='Richard'?'selected':''; ?> >Richard</option>
            </select> <?php if($engineerError != '') { ?><span class="error"><?=$engineerError;?></span><?php } ?></p>  

所以用户要么填写申请号,要么选择和他们一起工作的工程师。我把申请号码文本框弄好了。当我留空时,我得到一条错误信息。但是当我不选中工程师下拉菜单时,我没有得到任何错误信息。请原谅我,我不是一个程序员,所以我不确定这里有什么问题。谢谢你!

您应该能够将其添加到PHP中。看起来你只需要检查一个工程师和一个prereqnum,如果它们都不存在,返回一个错误消息。这只是遵循其他验证。

if (empty($_POST['engineer']) && trim($_REQUEST['prevReqNum']) === '') {
    $prevReqNumError = '<span class="error">Please choose an engineer or enter a requisition number.</span>';
    $hasError = true;
}

下面将整理潜在的错误。

<?php
$reqNumber=trim($_POST['prevReqNum']);
$engineer=$_POST['engineer'];
if(empty($reqNumber) && empty($engineer)){
$prevReqNumError = '<span class="error">Please enter your previous requisition number or select an engineer.</span>';
$hasError = true;
}
else{
if(!empty($reqNumber))  {
if (!preg_match("/^([1]-)?[a-z0-9]{6}$/i", $reqNumber)) {
$prevReqNumError = '<span class="error">You entered an invalid requisition number.</span>';
$hasError = true;
}
else{
  if(empty($_POST['engineer'])){
    $engineerError = '<span class="error">Please select the engineer that you were working with.</span>';
    $hasError = true;
  }  
  }
}
}
?>

主要问题是逻辑的布局。仔细看,你有:

if
else if
else if
else

一旦PHP匹配了"if",其他测试将被跳过。

你想用if/else表示前一个请求号,另一个if/else表示指定的工程师,因为如果其中一个错误,你想抛出一个错误。

我想帮忙。这会有帮助的。

Add Form "action" and "onsubmit" in <form></form> tag.
<form method="POST" action="Give Here" onsubmit="return CheckValidation()">
<p>
    <label for="prevReqNum">*Previous Requisition Number:&nbsp;</label>
    <input type="text" size="40" name="prevReqNum" id="prevReqNum" value="<?php if(isset($_POST['prevReqNum'])) echo $_POST['prevReqNum'];?>" placeholder=" eg. 000000" />
    <span class="error InvalidRegdNo" style="display:none;">You entered an invalid requisition number.</span>
    <span class="error EmptyRegdNo" style="display:none;">Please enter your previous requisition number.</span>             
    OR <label for="engineer">Assigned Engineer: </label>
    <select name='engineer' id="engineer" size="1">
        <option value="" selected="selected">Select</option>
        <option <?php echo $engineer=='Dexter'?'selected':''; ?> >Dexter</option>
        <option <?php echo $engineer=='Jake'?'selected':''; ?> >Jake</option>
        <option <?php echo $engineer=='Mo'?'selected':''; ?> >Mo</option>
        <option <?php echo $engineer=='Richard'?'selected':''; ?> >Richard</option>
    </select>
    <span class="error SelectEngineer" style="display:none;">Please select the engineer that you were working with.</span>
    <span class="error SelectAtleastOne" style="display:none;">Please select atleast engineer or type registration no.</span>
</p>
</form>
<script>
    function CheckValidation()
    {
        var RegNo=$('#prevReqNum').val();
        var Engineer=$('#engineer').val();
        /*First Check Valid Registration Number*/
        if (!preg_match("/^([1]-)?[a-z0-9]{6}$/i", trim(RegNo)))
        {
            $('.InvalidRegdNo').show();
            return false;
        }
        if(RegNo=="" && Engineer=="")
        {
            $('.SelectAtleastOne').show();
            return false;
        }
    }
</script>