基于用户输入的 PHP 和 MySQL 查询不起作用


PHP and MySQL query based on user input not working

我正在创建一个用户数据库,其中有 4 个字段:ID、用户名、密码和职业。这是一个测试数据库。我尝试查询数据库表并且它有效,但是在用户输入和基于它的MySQL查询时遇到很多麻烦。我在Linux(Debian,Ubuntu)中运行Apache服务器。

我有 2 页。第一个是裸测试索引页。这是有文本框的地方,供人们输入简单的信息以在数据库中注册他们的信息。这是它的代码:

<html>
<form action="reg.php" method="POST">
  Username:
  <input type="text" name="u">Password:
  <input type="password" name="p">Occupation:
  <input type="text" name="o">
  <input type="submit" value="register">
</form>
</html>

单击提交按钮后。它转到 reg.php 文件。这就是它变得复杂的地方。页面变为空白!!数据库中不显示或输入任何内容。普通查询效果很好,但是当添加用户交互时,会出现问题。以下是 reg.php 的代码:

<?php
$un = $_POST["u"]
$pk = $_POST["p"]
$ok = $_POST["o"]
$u = mysql_real_escape_string($un);
$p = mysql_real_escape_string($pk);  
$o = mysql_real_escape_string($ok);    
$link = mysql_connect('localhost', 'root', 'randompassword');
if (!$link){
die(' Oops. We Have A Problem Here: ' . mysql_error());
}
if ($link){
echo 'connected succesfully';
}
mysql_select_db("forum") or die(' Oops. We Have A Problem Here: ' . mysql_error());
$data = mysql_query("INSERT INTO users (username, password, occupation) VALUES ('{$u}', '{$p}', '{$o}')");
?>

任何人都可以要求我更正此代码以使其工作吗?非常感谢您的时间。非常感谢。

编辑:我注意到我没有在前 3 行添加分号。这样做之后,我收到此错误:"您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,了解在第1行的'{'、''、')'附近使用的正确语法。有人可以解释为什么吗?

编辑:该网站只是在我的本地机器上...在 Linux 上的 Apache 服务器上

前三行缺少分号。

$un = $_POST["u"];
$pk = $_POST["p"];
$ok = $_POST["o"];

mysql_real_escape_string()需要数据库连接。试试这个....

<?php
$un = $_POST["u"];
$pk = $_POST["p"];
$ok = $_POST["o"];
$link = mysql_connect('localhost', 'root', 'randompassword');
if (!$link){
  die(' Oops. We Have A Problem Here: ' . mysql_error());
}
if ($link){
  echo 'connected succesfully';
}
mysql_select_db("forum") or die(' Oops. We Have A Problem Here: ' . mysql_error());
$u = mysql_real_escape_string($un);
$p = mysql_real_escape_string($pk);
$o = mysql_real_escape_string($ok);
$sql = "INSERT INTO users (username, password, occupation) VALUES ('$u', '$p', '$o')";
$ins_sql = mysql_query($sql);
IF($ins_sql) {
  echo 'Inserted new record.';
}ELSE{
  echo 'Insert Failed.';
}
?>

尝试将其添加到脚本的顶部:

error_reporting(E_ALL);
ini_set("display_errors", 1);

这样,您将看到语法上甚至在SQL中犯的所有错误。