查询没有发送到数据库

查询没有发送到数据库

问题描述:

尴尬的问题在这里,因为它显然是如此简单的事情出错了。 (对于任何声称'重复'的人,我已经花了3个小时在这里查找相关问题并将许多答案付诸实践,但无济于事,因此需要这个问题。)查询没有发送到数据库

我在使用PHP和MySQL制作用户注册表单的过程中,一切都很好,但是,我没有看到数据库中的值?所以显然它不提交罚款。

问题

为什么不将它提交?

我已经做了var_dump($ _ POST);其结果是:

array(4) { ["name"]=> string(14) "Foo Bar" ["email"]=> string(18) "[email protected]" ["password"]=> string(8) "foobar123" ["submit"]=> string(8) "Register" } 

我也做了print_r($ query);在查询什么是通过,结果是:

INSERT INTO user_info (name, email, password) VALUES ('Foo Bar', '[email protected]', '$2y$10$36UQIGc6OwFrNs/TBfc6letRlrrdRGGoj.lh65puJElDJER08ozQe') 

表user_info已存在,我的连接到数据库是好的。 我试过对列名使用后向逗号,我也试过不使用逗号作为值,但似乎没有提交。

下面的代码:

HTML -

<form method="post" name="register-form" action="database.php"> 
    Name:  <input type="text" name="name"><br> 
    Email:  <input type="email" name="email"><br> 
    Password: <input type="password" name="password"> 
      <input type="submit" name="submit" value="Register" /> 
</form> 

PHP -

<?php 

require 'dbconnect.php'; 

function registerUser() { 
    $username = $_POST['name']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $hash = password_hash($password, PASSWORD_BCRYPT); 


    $mysqli = mysqli_init(); 
    $query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
    $mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

    var_dump($_POST); 
    print_r($query); 
} 

if(isset($_POST['submit']) === TRUE){ 
    registerUser(); 
} 

?> 

dbconnect.php

<?php 

$dbserver = 'localhost'; 
$dbusername = 'foo'; 
$dbpassword = 'bar'; 
$dbdatabase = 'usersdb'; 

$con = mysqli_connect($dbserver, $dbusername, $dbpassword, $dbdatabase); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
?> 

我开始认为这可能是权限相关但它在我的本地主机上使用XAMPP所以它肯定不会是?任何帮助将不胜感激!谢谢。

+0

使用'mysql_real_escape_string'不成为SQL注入的目标。 – 2014-08-30 11:17:28

+0

您可以从Workbench运行相同的查询(使用相同的登录凭据)吗? – thebjorn 2014-08-30 11:18:25

+0

@KeVin我知道这会弹出,我忘记提及的问题,我最初确实有mysql_real_escape_string,但我拿出来,所以我可以使其尽可能基本 – 2014-08-30 11:18:43

在函数registerUser中没有定义$con。 创建一个连接,您的数据将被插入。

function registerUser($con) { 
    $username = $_POST['name']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $hash = password_hash($password, PASSWORD_BCRYPT); 


    $mysqli = mysqli_init(); 
    $query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
    $mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

    var_dump($_POST); 
    print_r($query); 
} 
+0

阅读代码中的评论$ con是在dbconnect .php – 2014-08-30 11:23:39

+0

为什么downvote请解释 – 2014-08-30 11:23:48

+0

您必须在downvoting之前知道变量范围。为了使用dbconnect.php中的$ con,您必须使用全局变量 – 2014-08-30 11:24:58

的问题就在这里:

$mysqli = mysqli_init(); 
$query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
$mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

您需要mysqli_init后建立使用mysqli_real_connect连接或使用构造new mysqli(),而不是这两个的。另外$mysqli->query使用$mysqli对象,并且只接受一个参数,即查询。如果您在其他地方指定了连接,则需要使用mysqli_query。见http://php.net/manual/de/mysqli.query.php

这是解决方案:

在DBCONNECT。php这条线充分利用

$ con = mysqli_connect($ dbserver,$ dbusername,$ dbpassword,$ dbdatabase);

$的mysqli =新的mysqli($ DBSERVER,$数据库用户名,$ DBPASSWORD,$ dbdatabase);

和reaplace database.php中的与该内容:

需要 'dbconnect.php';

$username = $_POST['name']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$hash = password_hash($password, PASSWORD_BCRYPT); 

如果(isset($ _ POST [ '提交'])=== TRUE){// $ mysqli的= mysqli_init(); $ query =“INSERT INTO user_info(name,email,password)VALUES('$ username','$ email','$ hash')”; $ mysqli-> query($ query); //在DBCONNECT引用$ CON连接到数据库

var_dump($_POST); 
print_r($query); 

}

这应该工作

+0

警告:mysqli :: query():第30行的无效对象或资源mysqli - 第30行是$ mysqli-> query($ query); // $ db在dbconnect中引用以连接到db – 2014-08-30 12:46:44

+0

需要'dbconnect.php'; $ username = $ _POST ['name']; $ email = $ _POST ['email']; $ password = $ _POST ['password']; $ hash = password_hash($ password,PASSWORD_BCRYPT);如果(isset($ _ POST ['submit'])=== TRUE){ $ query =“INSERT INTO user_info(name,email,password)VALUES('$ username','$ email','$散列')“; $ mysqli-> query($ query); var_dump($ _ POST); print_r($ query); } – 2014-08-30 12:52:35

+0

请尝试此代码,并跳过后; – 2014-08-30 12:56:53