Php 如果PDO数据库更新成功,则重定向页面
下面是我用来更新数据库的代码的一部分。 它可以工作,但是如果数据库更新成功,我想将用户重定向到另一个页面。 我该怎么做? 我知道Php 如果PDO数据库更新成功,则重定向页面,php,pdo,Php,Pdo,下面是我用来更新数据库的代码的一部分。 它可以工作,但是如果数据库更新成功,我想将用户重定向到另一个页面。 我该怎么做? 我知道标题('Location:../../'),但在哪里使用它 $statement = $dbconnect->prepare(" UPDATE members SET name = :fname, lastname = :lname, phone = :phone WHERE member_id = :memberid "
标题('Location:../../')代码>,但在哪里使用它
$statement = $dbconnect->prepare("
UPDATE members
SET name = :fname, lastname = :lname, phone = :phone
WHERE member_id = :memberid
");
$dbconnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement->execute(
array(
':fname' => "$fname",
':lname' => "$lname",
':phone' => "$phone",
':memberid' => "$memberid"
)
);
} catch(PDOException $e) {
die("ERROR: Could not connect. " . $e->getMessage());
}
甚至尝试了以下操作,但没有重定向
$statement->execute(array(':fname' => "$fname", ':lname' => "$lname", ':phone' => "$phone",':memberid' => "$memberid"));
if ($statement) {
header('Location: http://sitename.com');
} else {
echo 'It failed!';
}
如果您想假设只要没有遇到任何PDO错误,您的更新就成功(我假设没有错误的更新是成功的),您可以这样写:
$statement = $dbconnect->prepare("UPDATE members SET name = :fname, lastname = :lname, phone = :phone WHERE member_id = :memberid");
$dbconnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement->execute(array(':fname' => "$fname", ':lname' => "$lname", ':phone' => "$phone",':memberid' => "$memberid"));
// if there were no errors redirect now
header('Location: ../../');
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
在dev之外的另一个注意事项中,您应该找到一种不同的方法来处理错误:这与没有try/catch几乎相同。您需要检查PDOStatement::execute
执行的结果,并在使用插入值数组(命名参数)执行准备好的语句时使用正确的绑定。请注意,成功的PDO::prepare
调用的结果是PDOStatement
对象,而不是布尔值
以下脚本基于您的代码,是解决您的问题的可能方案:
<?php
try {
$dbconnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $dbconnect->prepare("
UPDATE members
SET name = :fname, lastname = :lname, phone = :phone
WHERE member_id = :memberid
");
if ($statement === false) {
die("ERROR: Could not prepare statement.");
}
$result = $statement->execute(
array(
':fname' => $fname,
':lname' => $lname,
':phone' => $phone,
':memberid' => $memberid
)
);
if ($result) {
header('Location: http://sitename.com');
exit;
}
} catch(PDOException $e) {
die("ERROR: Could not connect. " . $e->getMessage());
}
?>
不,那没用,这是我在问这个问题之前做的第一件事。数据已保存,没有错误。但是重定向没有发生。如果它没有重定向正在发生的事情?白色屏幕?其他人正在做一些事情:检查您的错误日志。另外,将catch改为catch(Throwable$e),这样任何错误都会显示在die()中。我使用javascript重定向,结果显示正确。但是我不知道为什么PHP重定向不起作用!我试图想象可能发生的事情。将重定向设置为Google或StackOverflow.com,然后查看是否触发。如果您使用AJAX提交此表单,它将不会重定向:AJAX调用不会刷新网页,重定向将不起作用。这可以解释为什么数据库正在更新,但页面没有重定向。看看Chrome的网络标签,它会告诉你发生了什么。如果要在表单提交后重定向页面,请定期提交HTML表单而不是JavaScript,页面将按照预期重定向。请确保启用所有错误报告。您可能不知道抛出了一个错误(不是在查询中,但可能是在发送标题时)。我将尝试并回复,谢谢您的时间。