我收到了所有$ _POST的通知

时间:2012-04-03 14:15:23

标签: php

我的应用程序中有几页。在用户下方的第一页(create_session.php)中提交表单并转到下一页(QandATable.php)。

<form action="QandATable.php" method="post" id="sessionForm">

<p>
    <strong>
        Your Session ID: 
    </strong>
    <span id="idFont">
        <?php echo $id; ?>
    </span>
</p>
<input type="hidden" name="id" value="<?php echo $id; ?>" />

<p>
    <strong>
        Date:
    </strong> 
    <input type="text" id="datepicker" name="dateChosen" readonly="readonly" />
<p>
    <strong>
        Start Time:
    </strong> 
    <input type="text" id="timepicker" name="timeChosen" readonly="readonly" />

<p>
    <input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion"/>
</p> 

</form>

现在如果$ _POST ['id']等于1,那么只有1个考试,但如果它超过1,那么有多个考试就是问题发生的地方。

让我说我想要2门考试并将表格提交给QandATable.php,然后第一次考试没有问题,但是在我完成第一次考试然后提交表格(此表格将提交给自己),然后对于第二次考试,我突然收到下面代码中所有$ _POST的通知。

<?php
session_start();

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


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

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

$username="xxx";
$password="xxx";
$database="xxx";

mysql_connect('localhost',$username,$password);

mysql_select_db($database) or die( "Unable to select database");

$insert = array();

for ($i = 1, $n = $_POST['sessionNum']; $i <= $n; ++$i)
{
    $insert[] = "' ". mysql_real_escape_string( $_POST['id'] ) . ($n == 1 ? '' : $i) . "',' ". mysql_real_escape_string( $_POST['timeChosen'] ) . "',' ". mysql_real_escape_string( date("Y-m-d", strtotime( $_POST['dateChosen'] ) ) ) . "'";
}

$sql = "INSERT INTO Session (SessionId, SessionTime, SessionDate) 
VALUES (" . implode('), (', $insert) . ")";

mysql_query($sql);
mysql_close();    
?>

所以我想知道的是,当我参加多项考试时,为什么我会在第一次考试完成后收到所有$ _POST的通知?所有通知都是所有帖子的未定义索引。

1 个答案:

答案 0 :(得分:1)

您收到undefined index错误,因为当您在不发布表单的情况下查看页面时,您要查找的$_POST数据不存在。

在尝试使用之前检查帖子数据是否存在:

if(isset($_POST['sessionNum'], $_POST['id'], $_POST['timeChosen'], $_POST['dateChosen']))
{

  $insert = array();

  for ($i = 1, $n = $_POST['sessionNum']; $i <= $n; ++$i)
  {
    $insert[] = "' ". mysql_real_escape_string( $_POST['id'] ) . ($n == 1 ? '' : $i) . "',' ". mysql_real_escape_string( $_POST['timeChosen'] ) . "',' ". mysql_real_escape_string( date("Y-m-d", strtotime( $_POST['dateChosen'] ) ) ) . "'";
  }

  $sql = "INSERT INTO Session (SessionId, SessionTime, SessionDate) 
  VALUES (" . implode('), (', $insert) . ")";


  mysql_query($sql);

}

如果您知道POST请求中始终存在正确的帖子数据,请使用if($_SERVER['REQUEST_METHOD'] == 'POST')