在表单中麻烦PHP验证的语法

时间:2014-09-12 12:11:12

标签: php forms validation

我的目标:我需要验证,如果有人检查了他们获得经济援助的方框,我需要验证他们检查他们收到的类型。

以下是我目前在php验证部分的内容。

if (($_SERVER['REQUEST_METHOD'] == 'POST') && (!empty($_POST['action']))):

    if (isset($_POST['financial_aid'])) { $financial_aid = $_POST['financial_aid']; }

if ($financial_aid === '') :
        $err_financial_aid = '<div class="error">Sorry, this is a required field</div>';
    endif; // input field empty

表单代码:

<p><strong>Are you receiving Financial Aid? </strong><br />
<select name="Financial_Aid" size="1" tabindex="8">
<option value="blank" selected>Please select one</option>
<option value="Yes">Yes, I Receive Financial Aid</option>
<option value="No">No, I Do Not Receive Financial Aid</option>
</select></p>
<p>Please indicate all forms of Financial Aid that you receive:</p>
<p>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("hope", $financial_type)))  { echo "checked"; } ?> " tabindex="9">HOPE Scholarship/HOPE Grant<br>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("pell", $financial_type)))  { echo "checked"; } ?>" tabindex="10">Pell Grant<br>
<input name="financial_type" type="checkbox" value="Yes" tabindex="11">Student Loan<br>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("loan", $financial_type)))  { echo "checked"; } ?>" tabindex="12">Veterans Benefits<br>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("tuition_reimbursement", $financial_type)))  { echo "checked"; } ?>" tabindex="13">Tuition Reimbursement<br>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("tuition_waiver", $financial_type)))  { echo "checked"; } ?>" tabindex="14">Tuition Waiver<br>
<input type="checkbox" name="financial_type" value="<?php ((isset($financial_type)) && (in_array("other_scholarships", $financial_type)))  { echo "checked"; } ?>" tabindex="15"> Other Scholarships </p>

我的第一个想法是我需要另一个if语句。

if ($financial_aid === 'yes') {

} elseif ($hope) { ((isset($financial_type)) && (in_array("hope", $financial_type)))
  return true;
} elseif ($pell) { ((isset($financial_type)) && (in_array("pell", $financial_type)))
  return true;

} elseif ($loan) { ((isset($financial_type)) && (in_array("loan", $financial_type)))
  return true;

} elseif ($veterns) { ((isset($financial_type)) && (in_array("veterns", $financial_type)))
  return true;

}
  elseif ($tuition_reimbursement) { ((isset($financial_type)) && (in_array("tuition_reimbursement", $financial_type)))
  return true;

}
  elseif ($tuition_waiver) { ((isset($financial_type)) && (in_array("tuition_waiver", $financial_type)))
  return true;

}
  elseif ($other_scholarships) { ((isset($financial_type)) && (in_array("other_scholarships", $financial_type)))
  return true;

} else {
   !empty $err_finanical_type=please select one
return false;
}

}

我错过了什么。我只是不知道是什么。有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先让我说,您的检查输入可以增强许多人遗漏的用户体验。

关于PHP验证的问题看起来有3个响应区域:

1)您使用以下方式显示表单代码:

经济援助和是

但你的if语句显示

 $financial_aid === 'yes'

骆驼文字在你的if代码中需要相同才能识别SAME变量,===相同,因为是和yes不一样 - 要注意和保持和谐的事物。

2)缺少每个输入表单字段的id组件。您只使用'name =“financial_type”'。名称用于通过表单提交发送数据项,但使用id =“financial_type”更容易使用javascript或css对每个单选按钮/复选框的不同ID。如果有疑问,只需要同时执行name =“item1”和id =“item2”,然后将其更改为item2,等等。两个世界中最好的,直到您在几个复选框之间选择情况(例如,框1为红色框,2表示蓝色,3表示绿色,这不是此任务的一部分。

3)如果您使用表格提交或使用表格,则不会显示     “button type =”button“onclick =”dosomething()“ dosomething()作为提交触发的位置。

在另一端验证数据可以显示单词“on”,而不是通过已检查或未选中。我发现这与AJAX XMLHttpRequest传输比从表单提交POST更多。如果您的问题是由“on”确认/验证而不是检查或取消选中状态显示...请尝试下面的dosomething()脚本。    该脚本还显示标准类型的字段... lname现有和输入id以及要传输的localStorage数组。发送localStorage和表单提交不会同时工作,而是保留localStorage的发送。需要使用XMLHttpRequest来允许表单字段和localStorage在这种情况下通过catchby.php中的代码在服务器上进行处理

此示例让客户端使用按钮发送...

 <button type="button" onclick="dosomething();" class="btn btn-primary btn-lg">Complete </button>

触发dosomething(),在同一页面中,根据已检查或未选中状态使用“是”或“否”从javascript发送到PHP

<script>
function dosomething() {
    // Start XMLHttpRequest
    var DaData = new XMLHttpRequest();
    // where to pass data to
    var url = "catchby.php";
    // Data items to pass..  lname is a field in the form
    var nm = document.getElementById("lname").value;
    /* financial_type is the id of checkbox input converted to Yes or No avoiding the constant "on" being sent */
    if($('#financial_type').attr('checked')) {
       var cb = "Yes";
      } else {
       var cb = "No";
      }

    /* svdStorage is the name of localStorage that is not part of the form that is other saved input user has entered saved on their client side computer that stays for next web visits... in this case an array that includes any outside the form data to send. */
    var ct = localStorage.getItem('svdStorage');

    // variables to be available in catchby.php via $_REQUEST in code
    var vars = "nname="+nm+"&ftype="+cb+"&scdStuff="+ct;

    DaData.open("POST", url, true);
    DaData.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    // Check onreadystatechange for XMLHttpRequest
    DaData.onreadystatechange = function() {
    if(DaData.readyState == 4 && DaData.status == 200) {
      var return_data = DaData.responseText;
      document.getElementById("status").innerHTML = return_data;
     }
    }
    // OK Send data items and process data transfer
    DaData.send(vars); 
    document.getElementById("status").innerHTML = "Processing...";
   }
   </script>    


Then to receive data being sent here is catchby.php coding...

 <?php
 $customerInformation = "";
 if(!empty( $_REQUEST["name"]))
  {
   $customerInformation .= "Name: ";
   $customerInformation .= $_REQUEST["name"];
   }

   // this net line will show the Yes or No reflecting the checked status instead of just the work "on"
  $customerInformation .= "<br/>The financial requested was: ".$_REQUEST["ftype"];

  // convert localStorage array to data items
  $zscdStuff  = json_decode($_REQUEST["scdStuff"]);
  // determine # of array items
  $length = count($zscdStiff);
  for ($i = 0; $i < $length; $i++) {
  // define items in each line of array
  // then 
  // do what is needed with each line item
 }
 ?>

注意... XMLHttpRequest将同时处理表单项和您要传输的所有其他变量,同步异步,而仅提交表单项。

使用1)完全相同的名称,2)在提交行的每个项目中使用参数id和name参数,3)将检查/取消检查状态转换为显示的文本项目,如“是”和“否”,您的结果将是您所期望的。