<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>
所以,这是我的代码 - 我很困惑 - 它不起作用 - 它说“成功”,但没有插入任何东西
答案 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)
我想,Username
,Password
和Car
是字符串,所以它应该是:
$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)