<?php
if(isset($_POST['submit'])){
$_POST = array_map( 'stripslashes', $_POST );
extract($_POST);
if($eventName ==''){
$error[] = 'Please enter the Event Name.';
}
if(!isset($error)){
try {
$stmt = $db->prepare('UPDATE event SET eventID = :eventID, eventName = :eventName, eventTime = :eventTime, eventLocation = :eventLocation, postDate = :postDate WHERE eventID = :eventID') ;
$stmt->execute(array(
':eventID' => $eventID,
':eventName' => $eventName,
':eventTime' => $eventTime,
':eventLocation' => $eventLocation,
':postDate' => date('Y-m-d H:i:s')
));
//redirect to index page
header('Location: view-event.php?action=updated');
exit;
} catch(PDOException $e) {
echo $e->getMessage();
}
}
}
?>
和
<?php
//check for any errors
if(isset($error)){
foreach($error as $error){
echo $error.'<br />';
}
}
try {
$stmt = $db->prepare('SELECT eventID,eventName, eventTime, eventLocation, postDate FROM event WHERE eventID = :eventID') ;
$stmt->execute(array(':eventID' => $_GET['eventID']));
$row = $stmt->fetch();
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
HTML表单
<form role="form" method="post" action=''>
<input type="hidden" class="form-control" placeholder="Enter Event Name" name="eventID" value='<?php echo $row['eventID'];?>'>
<input class="form-control" placeholder="Enter Event Name" name="eventName" value='<?php echo $row['eventName'];?>'>
<input class="form-control" placeholder="Enter Event Time" name="eventTime" value='<?php echo $row['eventTime'];?>'>
<input class="form-control" placeholder="Enter Event Location" name="eventLocation" value='<?php echo $row['eventLocation'];?>'>
<input type="submit" class="btn btn-primary" name="submit" value="Edit Event">
</form>
您好, 这是代码。我想将数据更新到mysql数据库。当我点击按钮时,它只是加载到&#34; view-event.php?action = updated&#34;此页面但数据库中没有任何变化。请帮我。
答案 0 :(得分:2)
好的,我在没有create table santax的情况下完成了测试。如果它仍然不起作用,那么它与表定义有关。
除非您想对捕获的异常执行其他操作,否则除了向用户显示错误消息之外,您应该删除 try-catch 块。通过定义error和exception handler,您可以在将来显示用户友好的错误消息/页面。虽然在此期间PHP只会向您显示错误消息并且死亡:正是您在开发过程中所需要的。请查看this和this教程章节,了解如何应用错误以及异常处理和报告。
在更新语句中,您使用了:eventID
标记两次,但只分配了$eventID
一次的值。为了能够执行此操作,您需要激活仿真,作为连接选项的一部分。如果你不这样做,你就会收到例外
SQLSTATE[HY093]: Invalid parameter number
所以,把它放在你的连接选项数组中:
PDO::ATTR_EMULATE_PREPARES => TRUE
祝你好运。