【问题标题】:Redirect page if PDO database update is success如果 PDO 数据库更新成功,则重定向页面
【发布时间】:2021-01-04 23:43:56
【问题描述】:

这是我用来更新数据库的部分代码。 它有效,但如果数据库更新成功,我想将用户重定向到另一个页面。 我怎样才能做到这一点 ? 我知道header('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!';
}

【问题讨论】:

  • 确保启用所有错误报告。可能会抛出您不知道的错误(不是在查询中,而是可能在发送标头中)。

标签: php pdo


【解决方案1】:

您需要检查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());

}

?>

【讨论】:

  • 我会尝试并回复,谢谢您的时间。
【解决方案2】:

如果你想假设你的更新是成功的,只要你没有遇到任何 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 几乎相同。

【讨论】:

  • 不,那没有用,这是我在这里问这个问题之前尝试的第一件事。数据被保存,没有错误。但没有发生重定向。
  • 如果它没有重定向发生了什么?白屏?其他人正在做某事:检查您的错误日志。还将你的 catch 更改为 catch(Throwable $e) 这样任何错误都会显示在你的 die()
  • 我使用 javascript 重定向,结果显示正确。但是我不知道为什么PHP重定向不起作用!
  • 我试图想象会发生什么。将重定向设置为 Google 或 StackOverflow.com 并查看是否触发。如果您使用 AJAX 提交此表单,它将不会重定向:AJAX 调用不会刷新网页并且重定向将不起作用。这可以解释为什么您的数据库正在更新但页面没有重定向。查看 Chrome 的网络标签,它会告诉你发生了什么。如果您希望页面在表单提交后重定向,请执行常规 HTML 表单提交而不是 JavaScript,页面将按照您的预期重定向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2020-07-20
  • 1970-01-01
相关资源
最近更新 更多