PHP和mysql没有INSERTing

时间:2011-02-14 18:54:16

标签: 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>

所以,这是我的代码 - 我很困惑 - 它不起作用 - 它说“成功”,但没有插入任何东西

5 个答案:

答案 0 :(得分: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

  • 的攻击
  • 无论表单是否已提交,您的脚本将始终执行 - 您希望更改该脚本以防止获取空记录

答案 1 :(得分: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
}

修改

正如Pekka所提到的,您的数据库容易受到SQL Injection攻击,因为您没有清理输入。您应该使用至少mysql_real_escape_string方法来确保不会发生这种情况。

答案 2 :(得分:1)

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

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

好建议 - 尝试使用PDO;)

答案 3 :(得分:0)

您需要用''包围变量,以便SQL正确。

答案 4 :(得分:0)

VALUES语句中,您需要将$ Username包装在单引号中。

VALUES ('$Username', '$Password', $Age, '$Car')"

另外,我会从您的通话中删除or die声明。然后,我会在$result语句中测试if

if ($result)