PHP代码未在MYSQL数据库PDO中插入详细信息

PHP代码未在MYSQL数据库PDO中插入详细信息,php,mysql,pdo,Php,Mysql,Pdo,所以我有一段代码,当有人按下“注册”按钮时,我正在执行它 这件事我已经读了10遍了,找不到我做错了什么 问题是:当您单击register时,它不会将详细信息插入数据库(即使它说它已注册用户)。我甚至浏览了我的db.php,在那里我存储了数据库的详细信息 注册页面代码: <?php if(isset($_POST['register'])){ $username = $_POST['username'];

所以我有一段代码,当有人按下“注册”按钮时,我正在执行它

这件事我已经读了10遍了,找不到我做错了什么

问题是:当您单击register时,它不会将详细信息插入数据库(即使它说它已注册用户)。我甚至浏览了我的db.php,在那里我存储了数据库的详细信息

注册页面代码:

    <?php
    if(isset($_POST['register'])){
                            $username = $_POST['username'];
                            $password = $_POST['password'];
                            $email = $_POST['email'];
                            $checkUsername = $odb->prepare("SELECT COUNT(*) FROM users WHERE username = :username");
                            $checkUsername->execute(array(':username' => $username));
                            $countUsername = $checkUsername -> fetchColumn(0);
                            $checkEmail = $odb->prepare("SELECT COUNT(*) FROM users WHERE email = :email");
                            $checkEmail->execute(array(':email' => $email));
                            $countEmail = $checkEmail -> fetchColumn(0);
                            if(!($countEmail == 0))
                            {
                                 echo '<p>This e-mail has been taken.</p>';
                             }
                             elseif(!($countUsername == 0))
                             {
                                  echo '<p>Error - this username has been taken.</p>';
                                }
                             else
                            {
                                try
                                {
                                    $insertUser = $odb -> prepare('INSERT INTO users (username,password,email) VALUES(:username, :password, :email)');
                                    $insertUser -> execute(array(':username' => $username, ':password' => $password, ':email' => $email));
                                    echo 'Sucessfully registered.';
                                }
                                catch (PDOException $e)
                                {
                                    echo 'Error: ' .$e->getMessage();
                                }
                            }
                }
?>

我希望有人知道发生了什么,谢谢

我认为您在PDO数据方面有问题,请检查以下内容:


我是一个MYSQL的家伙,但是我在不使用MYSQL\u real\u escape\u字符串时遇到了相同的错误,这个错误看起来与PDO相同。

您的表单是作为get请求处理的,而不是POST。默认的表单方法是GET,因此可以更改/add
method=“post”
或使用
$\u GET
。发送用户私有用户数据时,使用
POST
是一个更好的选择

备选方案A:

<form method="POST">

选项B(更改变量分配):

if(isset($\u GET['register'])){
$username=$_GET['username'];
$password=$_GET['password'];
$email=$_获取['email'];
$checkUsername=$odb->prepare(“从username=:username的用户中选择COUNT(*));
$checkUsername->execute(数组(':username'=>$username));
$countUsername=$checkUsername->fetchColumn(0);
$checkEmail=$odb->prepare(“从email=:email的用户中选择COUNT(*));
$checkEmail->execute(数组(':email'=>$email));
$countEmail=$checkEmail->fetchColumn(0);
如果(!($countEmail==0)){
回显“此电子邮件已被接收。

”; }elseif(!($countUsername==0)){ 回显“错误-已使用此用户名。

”; }否则{ 试一试{ $insertUser=$odb->prepare('INSERT INTO users(用户名、密码、电子邮件)值(:用户名、密码、电子邮件)'); $insertUser->execute(数组(“:username'=>$username,”:password'=>$password,”:email'=>$email)); echo“成功注册”; }捕获(PDO$e){ 回显“错误:”。$e->getMessage(); } } }
正如前面提到的,密码不应该以纯文本形式存储。MD5和SHA1比这更好,但它们不再是最好的方法。看看这些帖子:



您是在发邮件还是在收邮件?你得到的确切信息是什么<代码>成功注册。当
如果(isset($\u GET['register']){
我想你正在发送一个GET,所以所有值都是空的
$\u POST
未设置。是的,
如果(isset($\u GET['register']){
当我发送
如果(isset($\u POST['register']),如何){
我没有收到回显消息,也没有向数据库添加任何内容?因此,您正在发送
get
not
POST
。更改表单方法或变量分配。此外,您不应该存储纯文本密码。PDO用法正确,变量分配不正确。您应该熟悉
PDO
或者
mysqli
Mysql\uuu
函数已经过时/不安全。我已经在使用mysqli,我知道Mysql已经过时了。但是即使在mysqli中,你也有真正的_escape_字符串。你应该继续讨论这个话题。而且我在第一部分说,发送到PDO的数据可能是错误的。即使这样,一个语句也是正确的,因为变量assig这是不正确的。结束对我的观点的讨论你不应该逃避你应该使用准备好的陈述。我也在这个话题上。我在你的“答案”前10分钟解决了这个问题。至于在
mysqli
中转义,…
因此,对于数据库安全性这一要素,预先准备好的语句只是一种更方便、更不容易出错的方法。
来自mysqli手册。主题结束。甚至对垃圾话都不感兴趣。祝你好运。
<form method="POST">
if(isset($_GET['register'])){
    $username = $_GET['username'];
    $password = $_GET['password'];
    $email = $_GET['email'];
    $checkUsername = $odb->prepare("SELECT COUNT(*) FROM users WHERE username = :username");
    $checkUsername->execute(array(':username' => $username));
    $countUsername = $checkUsername -> fetchColumn(0);
    $checkEmail = $odb->prepare("SELECT COUNT(*) FROM users WHERE email = :email");
    $checkEmail->execute(array(':email' => $email));
    $countEmail = $checkEmail -> fetchColumn(0);
    if(!($countEmail == 0)) {
         echo '<p>This e-mail has been taken.</p>';
    } elseif(!($countUsername == 0)) {
          echo '<p>Error - this username has been taken.</p>';
    } else {
        try {
            $insertUser = $odb -> prepare('INSERT INTO users (username,password,email) VALUES(:username, :password, :email)');
            $insertUser -> execute(array(':username' => $username, ':password' => $password, ':email' => $email));
            echo 'Sucessfully registered.';
        } catch (PDOException $e) {
            echo 'Error: ' .$e->getMessage();
        }
    }
}