解决未定义的索引错误

时间:2013-05-13 10:26:46

标签: php mysql

我的php文件中有以下代码:

$p_adminType = $_POST['adminType'];
$p_adminUserID = $_POST['userID'];
$p_adminUserPass = $_POST['userPass'];
$p_firstName = $_POST['adminFirstName'];
$p_lastName = $_POST['adminLastName'];

然后当我通过点击html文件中的提交按钮执行文件时,我收到一条通知错误说:

Notice: Undefined index: userID in C:\wamp\www\CaNeCo\CaNeCo_Admin_Reg.php on line 19
Notice: Undefined index: userPass in C:\wamp\www\CaNeCo\CaNeCo_Admin_Reg.php on line 20
Notice: Undefined index: adminFirstName in C:\wamp\www\CaNeCo\CaNeCo_Admin_Reg.php on line 21

其中您可以从代码中看到第19,20和21行。我尝试将isset()函数添加到我的代码中,就像我从其他网站/论坛中读到的一样,但是当我这样做时,它并没有解决我的问题。它只隐藏错误消息,变量仍为空。

我该如何解决这个问题?另外,我只是想知道为什么它只发生在5个声明中的3个? $p_adminType = $_POST['adminType'];$p_lastName = $_POST['adminLastName'];只是工作得很好而不是其他3个?有人可以赐教我这个吗?

这是我的html文件:

<form method="post" action="CaNeCo_Admin_Reg.php">
  <table width="400">
  <tr>
      <td><b>Log-in Information:</b></td>
  </tr>
  <tr>
      <td>&nbsp;</td>
  </tr>
  <tr>
      <td>Administrator Type:</td>
      <td>
        <select name="adminType" id="adminType">
        <option value="0">Please Select</option>
        <option value="1">Super Administrator</option>
        <option value="2">Administrator</option>
        <option value="3">Secretary</option>
        <option value="4">Viewer</option>
        </select>
      </td>
  </tr>
  <tr>
      <td>User ID: </td>
      <td><input type="text" name:"userID" id="adminUserID" placeholder="User I.D." maxlength="20" size="35"/></td>
  </tr>
  <tr>
      <td>Password: </td>
      <td><input type="password" name:"userPass" id="adminUserPass" placeholder="Password" maxlength="25" size="35"/></td>
  </tr>
  <tr>
      <td>Repeat Password:</td>
      <td><input type="password" name="repeatPass" id="adminRepeatPass" placeholder="Repeat Password" maxlength="25" size="35"/></td>
  </tr>
  <tr>
      <td>&nbsp;</td>
   </tr>
   <tr>
      <td colspan="25"><b>Personal Information:</b></td>
   </tr>
   <tr>
      <td>&nbsp;</td>
   </tr>
   <tr>
      <td>First Name: </td>
      <td><input type="text" name:"adminFirstName" id="adminFirstName" placeholder="First Name" maxlength="20" size="35"/></td>
   </tr>
   <tr>
      <td>Last Name: </td>
      <td><input type="text" name="adminLastName" id="adminLastName" placeholder="Last Name" maxlength="25" size="35"/></td>
   </tr>
   <tr>
      <td>&nbsp;</td>
   </tr>
   <tr>
      <td colspan="50"><center><input type="submit" value="Submit"/></center></td>
   </tr>
</table>

5 个答案:

答案 0 :(得分:0)

首先检查$ _POST是否保留一些值。

所以在代码上方使用 print_r($ _ POST), 它可以帮助您识别错误,

答案 1 :(得分:0)

可能会抛出未定义的索引,因为您没有在html表单中定义这些名称。您的表单必须如下所示:

<input type='text' name='adminType'/>
<input type='text' name='userID'/>
<input type='text' name='userPass'/>
<input type='text' name='adminFirstName'/>
<input type='text' name='adminLastName'/>

或者您正在使用的任何输入type。您还应该发布您的表单代码以提供更多信息。

检查您的html表单中是否确定了这些名称。

<强>更新

您发布了表单代码并看到了错误。您正在使用:来使用=将值添加到您的输入的name属性中。如果你看一下,你接收到服务器的唯一2个元素是正确发送到服务器的,因为你定义了它们的名称属性,如name={value},但其他3个属性被定义为name:{value}。 HTML中不存在使用:的赋值,并且表单不知道如何使用该属性发送该元素,因此您的服务器永远不会收到具有名为userID的属性的元素,因为userID是未定义为已经说过(name={value})。

答案 2 :(得分:0)

你的HTML应该是这样的: -

   <form method="post" action="CaNeCo_Admin_Reg.php">
   <table width="400">
    <tr>
        <td><b>Log-in Information:</b></td>
    </tr>
    <tr>
       <td>&nbsp;</td>
    </tr>
    <tr>
     <td>Administrator Type:</td>
     <td>
       <select name="adminType" id="adminType">
       <option value="0">Please Select</option>
       <option value="1">Super Administrator</option>
       <option value="2">Administrator</option>
       <option value="3">Secretary</option>
       <option value="4">Viewer</option>
       </select>
    </td>
  </tr>
  <tr>
   <td>User ID: </td>
   <td><input type="text" name="userID" id="adminUserID" placeholder="User I.D."         maxlength="20" size="35"/></td>
 </tr>
  <tr>
  <td>Password: </td>
  <td><input type="password" name="userPass" id="adminUserPass" placeholder="Password" maxlength="25" size="35"/></td>
 </tr>
  <tr>
     <td>Repeat Password:</td>
    <td><input type="password" name="repeatPass" id="adminRepeatPass" placeholder="Repeat Password" maxlength="25" size="35"/></td>
  </tr>
  <tr>
     <td>&nbsp;</td>
   </tr>
    <tr>
    <td colspan="25"><b>Personal Information:</b></td>
   </tr>
    <tr>
  <td>&nbsp;</td>
  </tr>
   <tr>
     <td>First Name: </td>
       <td><input type="text" name="adminFirstName" id="adminFirstName" placeholder="First Name" maxlength="20" size="35"/></td>
     </tr>
   <tr>
   <td>Last Name: </td>
   <td><input type="text" name="adminLastName" id="adminLastName" placeholder="Last Name" maxlength="25" size="35"/></td>
  </tr>
  <tr>
     <td>&nbsp;</td>
  </tr>
  <tr>
    <td colspan="50"><center><input type="submit" value="Submit"/></center></td>
  </tr>
</table>

答案 3 :(得分:-1)

对于现有的cheking index,你可以使用像array_key_exists或isset这样的php函数,如果找不到索引你必须将init变量设为空(null或空字符串):

if (array_key_exists('adminType', $_POST)) {
    $p_adminType = $_POST['adminType'];
} else {
    $p_adminType = '';
}
if (array_key_exists('userID', $_POST)) {
    $p_adminUserID = $_POST['userID'];
else {
    $p_adminUserID = '';
}
if (array_key_exists('userPass', $_POST)) {
    $p_adminUserPass = $_POST['userPass'];
else {
    $p_adminUserPass = '';
}
if (array_key_exists('adminFirstName', $_POST)) {
    $p_firstName = $_POST['adminFirstName'];
else {
    $p_firstName = '';
}
if (array_key_exists('adminLastName', $_POST)) {
    $p_lastName = $_POST['adminLastName'];
else {
    $p_lastName = '';
}

答案 4 :(得分:-1)

顺便说一句,这些名字似乎很混乱。

我认为你应该改写这些陈述:

$p_adminType = $_POST['adminType'];
$p_adminUserID = $_POST['userID'];
$p_adminUserPass = $_POST['userPass'];
$p_firstName = $_POST['adminFirstName'];
$p_lastName = $_POST['adminLastName'];

进入:

$p_adminType = $_POST['type'];
$p_adminUserID = $_POST['userID'];
$p_adminUserPass = $_POST['userPass'];
$p_adminFirstName = $_POST['firstName'];
$p_adminLastName = $_POST['lastName'];

或:

$p_type = $_POST['adminType'];
$p_userID = $_POST['adminUserID'];
$p_userPass = $_POST['adminUserPass'];
$p_firstName = $_POST['adminFirstName'];
$p_lastName = $_POST['adminLastName'];

或:

$p_type = $_POST['type'];
$p_userID = $_POST['userID'];
$p_userPass = $_POST['userPass'];
$p_firstName = $_POST['firstName'];
$p_lastName = $_POST['lastName'];

或:

$p_adminType = $_POST['adminType'];
$p_adminUserID = $_POST['adminUserID'];
$p_adminUserPass = $_POST['adminUserPass'];
$p_adminFirstName = $_POST['adminFirstName'];
$p_adminLastName = $_POST['adminLastName'];