提交表单,mysql和php

时间:2014-12-29 00:54:10

标签: php mysql sql

我是php和sql以及所有这些东西的新手,我正在关于php的论坛上观看关于youtube的教程,并想知道为什么这段代码没有回应"成功"提交表格时。我也想知道为什么它在我提交表格之前就会回复失败。我已成功连接到数据库。

<!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!");

?>

2 个答案:

答案 0 :(得分:4)

这里有一些问题。

您在列中使用了错误的identifiers(并且是引号):

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

删除它们

(id, username, password, email)

或使用反引号

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

mysql_error()应该给你一个错误,但它不是因为:

  • 您将MySQL API与mysqli_混合以进行连接,然后将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 injection开放。使用mysqli with prepared statementsPDO with prepared statements它们更安全


我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。

我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能。对于PHP&lt; 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);
        }
    }
?>

答案 1 :(得分:0)

:它会回显;失败'所以执行这段代码

 else{
            echo "Failure" . mysql_error();
        }

每当$ _POST [“submit”])未设置,并且无论何时打开您的页面都不会设置(即使您从谷歌搜索结果的书签导航到它),或者您在GET中提交FORM时模式