一尘不染

提交表格,mysql和php

sql

我是php和sql以及所有其他东西的新手,我在youtube上观看了有关php论坛的教程,想知道为什么在提交表单时此代码不回显“成功”。我还想知道为什么在我提交表单之前,它会回显失败。我已成功连接到数据库。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <form action="register.php" method="POST">
            Username: <input type="text" name="username">
            <br/>
            Password: <input type="password" name="password">
            <br/>
            Confirm Password: <input type="password" name="confirmPassword">
            <br/>
            Email: <input type="text" name="email">
            <br/>
            <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
        </form>
    </body>
</html>
<?php
    require('connect.php');
    $username = $_POST['username'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];
    $email = $_POST['email'];

    if(isset($_POST["submit"])){
        if($query = mysql_query("INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysql_error();
        }
    }
?>

Connect.php

<?php

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

?>

阅读 112

收藏
2021-05-16

共1个答案

一尘不染

这里有些错误。

您正在使用错误的 标识符 作为列中的
标识符

(并用引号引起来):

('id', 'username', 'password', 'email')

删除它们

(id, username, password, email)

或使用反引号

(`id`, `username`, `password`, `email`)

mysql_error() 应该向您抛出一个错误,但这不是因为:

  • 您正在混合使用MySQL APImysqli_进行连接,然后mysql_在查询中进行连接。

这两个不同的API不会相互混合。

mysqli_专门使用并将您当前的查询更改为:

if($query = mysqli_query($connect, "INSERT...

并更改mysql_error()mysqli_error($connect)

作为该块的重写:

if(isset($_POST["submit"])){
    if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
        echo "Success";
    }else{
        echo "Failure" . mysqli_error($connect);
    }
}

只是为了测试错误,请
按照我上面概述的方法进行更改,同时使列中的引号保持现在的样子。然后,您将看到My​​SQL将引发的错误。然后,您可以按照上面已经概述的方法进行操作,并删除列名周围的引号,或将其替换为反引号。

您看到的教程可能很好地使用了反引号,但可能没有足够的区别,让您不能说它们确实是反引号而不是单引号。

但是,您当前的代码可以进行 SQL注入 。使用 mysqli
预处理语句
,或 与准备语句PDO
他们更安全


我注意到您可能以纯文本形式存储密码。如果是这种情况,强烈建议不要这样做。

我建议您使用 CRYPT_BLOWFISH 或PHP
5.5的password_hash()函数。对于PHP <5.5,使用password_hash() compatibility pack


另外,不要这样做:

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

就像手册中指出的那样,您应该检查错误。

$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link));

因此,在您的情况下:

$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect));

编辑: 我更改action="register.php"为,action=""因为您正在同一页面中使用整个代码。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <form action="" method="POST">
            Username: <input type="text" name="username">
            <br/>
            Password: <input type="password" name="password">
            <br/>
            Confirm Password: <input type="password" name="confirmPassword">
            <br/>
            Email: <input type="text" name="email">
            <br/>
            <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
        </form>
    </body>
</html>
<?php
    require('connect.php');
    $username = $_POST['username'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];
    $email = $_POST['email'];

    if(isset($_POST["submit"])){
        if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysqli_error($connect);
        }
    }
?>
2021-05-16