我有一个带有文本框的表单,需要一个日期值(date1)。当date1被更新并提交(发布到同一页面)时,它会毫无问题地更新会话值,但不会更新date2。
当date1被更新时,date2不更新。Date2将通过向date1添加30天来获得一个值。
总结: Date1 - session变量在提交表单后得到更新。Date2 -提交表单后会话变量不更新。但两者都有日期& &;数据库中的Date2更新。
我花了好几天试图找到这个问题。我知道如何让date1更新会话变量,但date2我不能弄清楚。
注意:我回显会话变量。这就是为什么我知道页面上没有更新。下面的代码中没有回显。
if(isset($_POST['submit'])){
$memberid = $_SESSION['memberid'];
$date1 = $_POST['date1'];
$date2 = $_SESSION['date2'];
if(empty($_POST['date1'])){
$errordate1[] = 'Select a Date';
$_SESSION['date1'];
} else {
echo $_SESSION['date1'] = $_POST['date1'];
}
if(empty($_POST['date2'])){
$_SESSION['date2'];
} else {
echo $_SESSION['date2'] = $_POST['date2'];
}
if(!isset($errordate1)){
$date1 = date('Y-m-d', strtotime($_POST['date1']));
$date2 = date('Y-m-d', strtotime($date1 . " +30 days"));
echo $date2; // I do not get the updated date.
//die($date2); // if I uncomment this line I get the updated value for date2.
try {
$_SESSION['date2'] = $_POST['date2'];
$stmt = $db->prepare('UPDATE theDates SET date1 = :date1, date2 = :date2, WHERE
memberid=:memberid');
$stmt->execute(array(':date1'=>$date1, ':date2'=>$date2, ':memberid'=>$memberid));
header('Location: profile.php');
exit;
} catch(PDOException $e) {
$errordate1[] = $e->getMessage();
}
}
}
HTML -我为date2添加了一个隐藏值用于测试。我想我应该试一试,看看试着让东西起作用会发生什么。
<form method="post" action="prof.php">
<input name="date1" type="text" value="<?php if(isset($errordate1)){ echo $_POST['date1']; } ?>" />
<input name="date2" type="hidden" value="<?php echo $_SESSION['date2']; ?>" />
<input type="submit" name="submit" value="Submit">
</form>
终于找到了一种方法来让这个工作,而不是依靠一群孩子。在修改代码的整个过程中,我使用了:
$_SESSION['date2'] = $_POST['date2'];
但这是错误的。而是:
$_POST['date2'] = $date2;
代码:
if(!isset($errordate1)){
$date1 = date('Y-m-d', strtotime($_POST['date1']));
$date2 = date('Y-m-d', strtotime($date1 . " +30 days"));
if(isset($_POST['date2'])) {
$_POST['date2'] = $date2;
}
}