2017-08-09 19 views
0

這是用戶需要輸入他/她的名字,姓氏,用戶名,電子郵件,密碼和重新鍵入他/她的密碼註冊的示例代碼。出於某種原因,我不能將任何數據插入到我的數據庫中。我似乎無法插入數據在我的數據庫中使用php與mysql wamp

<?php 
session_start(); 
$db = mysql_connect("localhost", "janrex", "webdev", "cuisine"); 

if(isset($_POST['SI'])) 
{ 
    $firstname = mysql_real_escape_string($_POST['f_name']); 
    $lastname = mysql_real_escape_string($_POST['l_name']); 
    $username = mysql_real_escape_string($_POST['u_name']); 
    $email = mysql_real_escape_string($_POST['email']); 
    $pass1 = mysql_real_escape_string($_POST['pass1']); 
    $pass2 = mysql_real_escape_string($_POST['pass2']); 

    if($pass1 == $pass2) 
    { 
     $sql = mysql_query($db, "INSERT INTO users(fname, lname, uname, email, password) VALUES ('$f_name', '$l_name', '$u_name', '$email', '$pass1')"); 
     header("location: home.php"); 
    } 
    else 
    { 
     header("location: error.php"); 
    } 

} 

?> 
+6

**不要**使用**過時和不安全的** _mysql _ * - 函數。從PHP 5.5(2013年)開始,它們已被棄用,並且在PHP 7中(2015年)完全刪除。改用MySQLi或PDO。 2.您對** [SQL Injections](http://php.net/manual/en/security.database.sql-injection.php)廣泛開放,並且確實應該使用[Prepared Statements](http:/ /php.net/manual/en/mysqli.quickstart.prepared-statements.php)而不是連接你的查詢,如果你使用上面提到的MySQLi或PDO,可以使用它們。 –

+0

'mixed mysql_query(string $ query [,resource $ link_identifier = NULL])' –

+0

你有'mysql_query()'參數的順序倒退。查詢是第一個,'$ db'是第二個(也是可選的)。 – Barmar

回答

1

首先驗證你的MySQL登錄數據。 wamp中的默認MySQL沒有密碼,並且用戶名是root。此外,米蘭聲稱不使用MySQL函數使用mysqli,改進了MySQL接口。試試這個:

<?php 
session_start(); 

// I prefer using oop 
$mysql = new mysqli('localhost', 'root', '', 'database'); 
// Ofcourse replace them with you own details! 

if(isset($_POST['SI'])){ 
    $firstname = $mysql->real_escape_string($_POST['f_name']); 
    $lastname = $mysql->real_escape_string($_POST['l_name']); 
    $username = $mysql->real_escape_string($_POST['u_name']); 
    $email = $mysql->real_escape_string($_POST['email']); 
    $pass1 = $mysql->real_escape_string($_POST['pass1']); 
    $pass2 = $mysql->real_escape_string($_POST['pass2']); 

    if($pass1 == $pass2){ 
     $sql = $mysql->query("INSERT INTO users(fname, lname, uname, email, password) VALUES (\"$firstname\", \"$lastname\", \"$username\", \"$email\", \"$pass1\")"); 
     header("location: home.php"); 
    } 
    else 
     header("location: error.php"); 
} 

看看它是否適合你!

+0

第17行有未定義的變量。我是否刪除了變量上的斜槓? – PotatoREX

+0

您在我現在修復的查詢中使用了不同的變量。試試吧...... –

+0

並且一定要使用安全。嘗試散列數據並使用安全功能; –

2

請嘗試以下代碼和插入值數據庫

 session_start(); 
    $db = mysqli_connect("localhost", "janrex", "webdev", "cuisine"); 

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


     $firstname = mysqli_real_escape_string($_POST['f_name']); 
     $lastname = mysqli_real_escape_string($_POST['l_name']); 
     $username = mysqli_real_escape_string($_POST['u_name']); 
     $email = mysqli_real_escape_string($_POST['email']); 
     $pass1 = mysqli_real_escape_string($_POST['pass1']); 
     $pass2 = mysqli_real_escape_string($_POST['pass2']); 

    if($pass1 == $pass2) 
    { 
     $sql = mysqli_query($db, "INSERT INTO users(fname, lname, uname, email, password) VALUES ('".$f_name."', '".$l_name."', '".$u_name."', '".$email."', '".$pass1."')"); 
     header("location: home.php"); 
    } 
    else 
    { 
     header("location: error.php"); 
    } 

} 
+1

此代碼是廣泛開放的'SQL注入' –

+0

其添加一行但它不存儲任何數據。 – PotatoREX

0

看起來你有多個問題。您最好使用mysqli或PDO和準備好的語句。然後你可以使用mysqli_real_scape_string API。以下代碼是將mysqli與佔位符和準備好的語句一起使用的示例。

<?php 
session_start(); 
if(isset($_POST['SI'])) 
{ 
    $_user = 'root'; 
    $_password= 'root'; 
    $_db = 'localtest'   
    $_host = 'localhost'; 
    $_port = 3306; 

    $link = new mysqli($_host, $_user, $_password, $_db); 
    // Check connection 
    if($link === false){ 
     die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 

     $firstname = $_POST['f_name']; 
     $lastname = $_POST['l_name']; 
     $username = $_POST['u_name']; 
     $email = $_POST['email']; 
     $pass1 = $_POST['pass1']; 
     $pass2 = $_POST['pass2']; 
    if($pass1 == $pass2) 
    {  
     $stmt = $link-> prepare("INSERT INTO users(fname, lname, uname, email, password) VALUES (?, ?, ?, ?, ?)"); 
     /* Bind parameters, s - string, b - blob, i - int, etc */ 
     $stmt -> bind_param("sssss", $firstname, $lastname, $username, $email, $pass1); 
     $stmt -> execute(); 
     $link->close(); 
     header("location: home.php"); 
    } 
    else 
    { 
     header("location: error.php"); 
    } 
} 
1

最好的方法。轉到phpmyadmin 127.0.0.1/phpmyadmin或localhost/phpmyadmin(在wamp或xampp上),然後轉到所需的表格並單擊插入選項卡。然後根據需要添加值,然後單擊開始。它會顯示一個查詢副本,將其粘貼到您的代碼中,並用所需的變量替換數據。完成!

-1

我知道它爲什麼會發生,因爲我面臨同樣的問題。 當你插入一個值時,你已經創建了一個唯一的列(可能是用戶標識列) ,但是默認值被添加到該列。但是由於該列是唯一的,因此它不能包含兩個具有相同值的單元格。從執行查詢你的命令。

只刪除列和try.it將工作

+2

格式化缺少大寫字母,並且沒有遵守標點間距。考慮到對問題本身的評論,可能有多個問題比答案中提到的多。答案是一個猜測 - 最好能夠要求提供有關該問題的更多細節。 –

相關問題