Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单未将值插入数据库_Php_Mysql - Fatal编程技术网

PHP表单未将值插入数据库

PHP表单未将值插入数据库,php,mysql,Php,Mysql,我创建的表单有一个问题,我只是出于测试目的,我知道它容易受到SQL注入的攻击 基本上,表单不会插入到数据库中,但它似乎在脚本中返回true 代码如下: form.php <form action="create.php" method="post"> <p>Username: <input type="text" name="username" /> </p> <p>Password

我创建的表单有一个问题,我只是出于测试目的,我知道它容易受到SQL注入的攻击

基本上,表单不会插入到数据库中,但它似乎在脚本中返回true

代码如下:

form.php

   <form action="create.php" method="post">
        <p>Username: <input type="text" name="username" />
        </p>
        <p>Password: <input type="password" name="password" />
        </p>
        <p><input type="submit" value="Create" name= "cre" />
        </p>
    </form>
create.php

<?php
session_start();
$dbname = "obsidian";

if(isset($_POST['cre'])){


    $username = $_POST['username'];
    $password = $_POST['password'];

    $mysqli = new mysqli('localhost','admin1', 'password1','obsidian' ) or die('Failed to connect to DB' . $mysqli->error );

    $hashed_password = password_hash($password,PASSWORD_DEFAULT);

         $registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
        if($registerquery = true)
        {
            echo "<h1>Success</h1>";
            echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
        }
        else
        {
            echo "<h1>Error</h1>";
            echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
        }       
     }   


  ?>
我得到了成功消息,但正如我所说的,这些值不会被插入到数据库中


任何帮助都会很好。

您错过了将SQL查询实际交给数据库的步骤

$mysqli->query($registerquery);
必须先运行,然后才能插入

您还可以将if语句更改为以下内容

if ($mysqli->query($registerquery))

此外,您当前正在使用一个=,它设置$registerquery而不是检查其值。

您错过了将SQL查询实际交给数据库的步骤

$mysqli->query($registerquery);
必须先运行,然后才能插入

您还可以将if语句更改为以下内容

if ($mysqli->query($registerquery))

此外,您当前正在使用一个=,它设置$registerquery而不是检查其值。

您在这里所做的一切:

$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
正在设置字符串,然后稍后将该字符串设置为true。这总是会变成真的。这有两个问题:

您需要执行存储在字符串中的SQL语句,以便数据库中发生任何事情。 您并不是真正检查返回值==,而是使用=,它只是设置变量。一个非常常见的错误。
此外,您可能不应该再使用mysqli内置函数,因为它们很快就会被弃用。我建议在进一步移动之前切换到。

您在这里所做的一切:

$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
正在设置字符串,然后稍后将该字符串设置为true。这总是会变成真的。这有两个问题:

您需要执行存储在字符串中的SQL语句,以便数据库中发生任何事情。 您并不是真正检查返回值==,而是使用=,它只是设置变量。一个非常常见的错误。 此外,您可能不应该再使用mysqli内置函数,因为它们很快就会被弃用。我建议在进一步移动之前切换到。

您必须查询数据库。试试这个:

$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";

if ($mysqli->query($registerquery))
{
    // success.
}
else
{
    // failed.
}
以下是文档:

您必须查询数据库。试试这个:

$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";

if ($mysqli->query($registerquery))
{
    // success.
}
else
{
    // failed.
}

以下是文档:

这定义了一个查询,但没有运行它:

这不是对成功的测试。只需将变量设置为true:

    if($registerquery = true)

=是赋值,==用于相等性测试。

这定义了一个查询,但不运行它:

这不是对成功的测试。只需将变量设置为true:

    if($registerquery = true)

=是赋值,==用于相等性测试。

正式地说,您应该这样做:

if(isset($_POST['cre'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
  $mysqli = new mysqli('localhost','admin1', 'password1','obsidian' ) or die('Failed to connect to DB' . $mysqli->error );

  $hashed_password = password_hash($password,PASSWORD_DEFAULT);

  $registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
  $stmt=$mysqli->prepare($registerquery);
  if($stmt->execute())
    {
        echo "<h1>Success</h1>";
        echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
    }
    else
    {
        echo "<h1>Error</h1>";
        echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
    }       
    $stmt->close();
 }   
那就足够了。如果需要绑定参数并使用不同的值对同一查询进行多次调用,则第一次调用更好


关于。-

正式地说,你应该这样做:

if(isset($_POST['cre'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
  $mysqli = new mysqli('localhost','admin1', 'password1','obsidian' ) or die('Failed to connect to DB' . $mysqli->error );

  $hashed_password = password_hash($password,PASSWORD_DEFAULT);

  $registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
  $stmt=$mysqli->prepare($registerquery);
  if($stmt->execute())
    {
        echo "<h1>Success</h1>";
        echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
    }
    else
    {
        echo "<h1>Error</h1>";
        echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
    }       
    $stmt->close();
 }   
那就足够了。如果需要绑定参数并使用不同的值对同一查询进行多次调用,则第一次调用更好


关于。-

您从未实际在数据库上运行Insert查询。。。。您很容易受到影响,您是否会在=和==?警告:使用mysqli时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为这样会创建严重的错误。如果您在处理此类低级数据库调用时遇到问题,我强烈建议您采用适合您的风格和需要的类调用。感谢帮助人员-抱歉,我是新手。您从未在数据库上实际运行Insert查询。。。。您很容易受到影响,您是否会在=和==?警告:使用mysqli时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为这样会创建严重的错误。如果您在处理此类低级数据库调用时遇到问题,我强烈建议您采用适合您的风格和需要的类调用。感谢各位的帮助-抱歉,我是新手。他实际上并没有检查它。请注意,并进行编辑。最重要的一点是,他根本没有执行任何SQL语句。我不确定这是否值得投反对票。我没有投反对票。不知道是谁做的,但我的答案也被否决了,所以我将其删除,因为周围显然有太多愚蠢的人。我否决了用户的答案,因为他的答案中只有5个字。大约30秒后,所有其他人的答案都同时被否决……谢谢。我想这就解释了:他实际上并不是在检查它,而是经过适当的记录和编辑。最重要的一点是,他根本没有执行任何SQL语句。我不确定这是否值得投否决票,我投了
不要投反对票。不知道是谁做的,但我的答案也被否决了,所以我将其删除,因为周围显然有太多愚蠢的人。我否决了用户的答案,因为他的答案中只有5个字。大约30秒后,所有其他人的答案都同时被否决……谢谢。我想这就解释了:是的,它仍然需要准备、绑定参数和执行调用。是的,它仍然需要准备、绑定参数和执行调用。