2011-02-14 165 views
1
<html> 
<head> 
<title> Register </title> 
</head> 
<body> 

Thanks for showing interest, please register below. 
<br> 


<br/> 
<form action="register.php" method="POST"> 
Username: <input type="text" name="username"> 
<br> 

</br> 
Password: <input type="password" name="password"> 
<br> 

</br> 
Age:  <input type="text" name="age"> 
<br> 

</br> 
Car:  <input type="text" name="car"> 
<br> 


<input type="submit" value="register"/> 
<input type="reset" value="Reset fields"/> 
</form> 

<?php 

    //db connect 
    $host="localhost"; 
    $dbuser="site1login"; 
    $dbpass="site1login"; 
    $dbname="login"; 
    $tblname="userdata"; 

    //form post 
    $Username=$_POST['username']; 
    $Password=$_POST['password']; 
    $Age=$_POST['age']; 
    $Car=$_POST['car']; 
    $con = mysql_connect("$host","$dbuser","$dbpass") or die (mysql_error()); 

    mysql_select_db($dbname, $con); 

    $result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES ($Username, $Password, $Age, $Car)" or die(mysql_error())); 
    echo "Success!"; 

?> 

</body> 

</html> 

所以,這是我的代碼 - 我很困惑 - 這是行不通的 - 它說:「成功」,但不插入任何êPHP和MySQL不插入

+3

您的代碼很容易受到SQL注入 – 2011-02-14 18:58:34

+1

雖然單身的回答是正確的,我建議你回聲出在以後的INSERT語句。語句格式錯誤會馬上顯而易見。 – clifgriffin 2011-02-14 18:59:43

+1

您還需要檢查提交,它會在您首次訪問表單時嘗試提交。 – mikelbring 2011-02-14 19:00:21

回答

3

更改以下部分 -

$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES 
      ($Username, $Password, $Age, $Car)" or die(mysql_error())); 
echo "Success!"; 

納入此 -

$result = mysql_query("INSERT INTO userdata (Username,Password,Age,Car) VALUES 
      ('$Username', '$Password', '$Age', '$Car')"); 

if($result) 
{ 
    echo "Success!"; 
} 
else 
{ 
    die(mysql_error()); // Thanks to Pekka for pointing this out. 
} 

如果上述不起作用,請嘗試檢查您的連接參數是否正確以及MySQL是否正在運行。

你也應該測試$resut值來檢查任何成功的查詢執行是否已發生 -

if($result) 
{ 
    // Successful query execution 
} 
else 
{ 
    // Some error occured while executing query. 
    // Show some useful information using echo/print. 
    // Then stop execution after taking other necessary steps 
} 

編輯

如佩卡已經提到的,你的數據庫很容易受到SQL Injection攻擊,因爲你是不要消毒你的輸入。您應該至少使用mysql_real_escape_string方法來確保不會發生這種情況。

0

你需要你的周圍有變數'',所以SQL將是正確的。

1

我想,那UsernamePasswordCar都是字符串,所以應該是:

$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES ('$Username', '$Password', $Age, '$Car')") or die(mysql_error(); 

好建議 - 嘗試使用PDO)

4

正如其他人在我之前指出的,你缺少圍繞字段值的引號。此外,該建設嚴重缺陷:

$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) 
      VALUES ($Username, $Password, $Age, $Car)" or die(mysql_error())); 

or die是查詢參數中。不知道如何可以工作。

取出or die部分,做錯誤處理,像這樣:

$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) 
      VALUES ('$Username', '$Password', '$Age', '$Car')"); 

if (!$result) 
die("SQL Error: ".mysql_error()); 

echo "Success"; 

而且

  • 您的腳本很容易受到SQL injection

  • 您的腳本就一定會執行,無論表單是否提交 - 您想要更改該表單以防止獲得空記錄

0

在你VALUES聲明中,你需要用的用戶名$的單引號。

​​3210

另外,我想從你的電話中刪除or die聲明。然後,我將在if聲明中測試$result

if ($result)