2014-08-30 155 views
0

尷尬的問題在這裏,因爲它顯然是如此簡單的事情出錯了。 (對於任何聲稱'重複'的人,我已經花了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

回答

1

在函數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

0

的問題就在這裏:

$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

0

這是解決方案:

在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