1

好的,所以我编写了一个 register.php 脚本,当命令尝试执行时,我得到了一个意外的 T 变量。错误位于第 15 行

('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";

根据第 20 行的 Dreamweaver,我的语法中还有第二个错误

    die('Error: ' . mysql_error());

如果有人可以提供帮助,将不胜感激。先感谢您。

4

5 回答 5

3

停止

直接从 post 插入数据库总是一个坏主意。这就是 PHP 目前坚持使用非常不直观的魔术引号的原因。

您至少应该使用 mysql_real_escape_string() 来转义您的数据。例如:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

$query = "INSERT INTO users VALUES (
    '" . mysql_real_escape_string($_POST["username"]) . "',
    '" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . mysql_real_escape_string($_POST["email"]) . "',
    '2'
)";

mysql_query($query);

您必须这样做的原因是基于安全性。例如,如果某些恶意将用户名字段设置为'); DROP TABLE users;没有先转义您的数据。您最终会盲目地运行以下查询:

INSERT INTO users VALUES (''); DROP TABLE users;

这当然不会为您的应用程序带来好结果。

这是你应该做的最低限度。

实际上,您应该真正转向MySQLi,这是一个更现代的 MySQL 界面。这是一个例子

$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');

$query = "INSERT INTO users VALUES (
    '" . $mysqli->real_escape_string($_POST["username"]) . "',
    '" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . $mysqli->real_escape_string($_POST["email"]) . "',
    '2'
)";

$mysqli->query($query);

你甚至可以在程序风格中使用 MySQL。因此,如果您还没有面向对象编程,那么 MySQLi 将不会有任何问题。

希望有帮助。

于 2012-07-10T10:22:44.240 回答
2
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";

去掉引号..

于 2012-07-10T06:35:00.003 回答
1
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";
于 2012-07-10T06:30:24.940 回答
1
($_POST["username"],$_POST["sha_pass_hash"],$_POST["email"],'2')";

丢失变量周围的单引号:)

于 2012-07-10T06:30:52.177 回答
1

用这个:

('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2')
于 2012-07-10T06:35:39.563 回答