我的应用程序中有几页。在用户下方的第一页(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的通知?所有通知都是所有帖子的未定义索引。
答案 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')
。