PDO if语句验证

时间:2013-12-24 01:27:09

标签: php pdo

我在这里做错了什么?在我添加代码的最后一部分IF(){}语句之前,所有数据都是子语句。如果信息提交正确,我想把它放在哪里,因为它说谢谢!,否则,显示我设置的错误。

<form method="POST">
    <input type="text" name="username" placeholder="username"><br />
    <input type="password" name="password" placeholder="password"><br />
    <input type="submit">
</form>

<?php
    if(isset($_POST['username'], $_POST['password'])){
        require 'core/db.php';

        $conn = dbConnect()->prepare("INSERT INTO users (username, password) VALUES (?,?)");

        $conn->bindParam(1, $_POST['username']);
        $conn->bindParam(2, $_POST['password']);
        $conn->execute();

        if($conn === true){
            echo 'Thanks!';
            header('Location: index.php');
            exit;
        } else{
            echo 'something went wrong';
        }
    }
?>

2 个答案:

答案 0 :(得分:2)

$conn不应该检查true$connPDOStatement的实例。您应该检查$conn->execute()的返回值。

if($conn->execute() === true){
  header('Location: index.php');
  exit;
} else{
  echo 'something went wrong';
}

正如@mjayt所指出的,你不应该在header调用之前输出内容。你绝对可以使用输出缓冲ob_start()...ob_end_flush()输出,但我不认为这里真的需要echo

答案 1 :(得分:2)

if($conn->execute()){
  header('Location: index.php?success=true');
  exit;
} else{
  echo 'something went wrong';
}

我会这样做,echo不起作用,它会破坏header()重定向,因为你正在向浏览器发送内容。即使它确实如此,你也不会看到它,因为它会将你重定向到另一页。我通常会在重定向中添加一个标志,这样我就可以在那里显示成功消息。