PHP和MySQL不插入

问题描述:

<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

更改以下部分 -

$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方法来确保不会发生这种情况。

你需要你的周围有变数'',所以SQL将是正确的。

我想,那UsernamePasswordCar都是字符串,所以应该是:

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

好建议 - 尝试使用PDO)

正如其他人在我之前指出的,你缺少围绕字段值的引号。此外,该建设严重缺陷:

$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

  • 您的脚本就一定会执行,无论表单是否提交 - 您想要更改该表单以防止获得空记录

在你VALUES声明中,你需要用的用户名$的单引号。

​​3210

另外,我想从你的电话中删除or die声明。然后,我将在if声明中测试$result

if ($result)