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,页面将按照预期重定向。请确保启用所有错误报告。您可能不知道抛出了一个错误(不是在查询中,但可能是在发送标题时)。我将尝试并回复,谢谢您的时间。