【问题标题】:PHP and MySQL query based on user input not working基于用户输入的 PHP 和 MySQL 查询不起作用
【发布时间】:2015-05-19 03:58:54
【问题描述】:

我正在创建一个用户数据库,其中有 4 个字段:ID、用户名、密码和职业。这是一个测试数据库。我尝试查询 db 表并且它工作但我在用户输入和基于它的 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 服务器上

【问题讨论】:

  • 反问:这个网站上线了吗?
  • Blank page 意味着:在打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后将错误报告添加到文件顶部,然后是其余代码,以查看它是否产生任何结果。还要将or die(mysql_error()) 添加到mysql_query()
  • 没有。该网站现在不存在...
  • 好。存储哈希,而不是用于密码存储的字符串文字。另外,错误报告会发出解析错误的信号。
  • 所有的死都让我想哭:'(

标签: php html mysql forms phpmyadmin


【解决方案1】:

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.';
}
?>

【讨论】:

  • 由于某种原因,出现“连接成功”的文字,但查询没有被执行...
  • 已修复...对此感到抱歉。
  • 非常感谢布赖恩!有效!现在我终于可以开始处理我的其余代码了!
  • 没问题,很高兴能帮上忙。我还想建议您清理/验证用户输入。并创建一个 dbconnect.php 文件并使用 require_once('path/to/dbconnect.php');为您的连接。不要忘记 mysql_close($link);
  • 感谢您的时间和帮助。非常感谢。
【解决方案2】:

前三行缺少分号。

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

【讨论】:

  • 哎呀...没注意到。
  • 非常感谢你们抽出宝贵的时间。
  • 0 反对票接受 我注意到我没有在前 3 行中添加分号。这样做后我收到此错误:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '{'', '', '')' 附近使用正确的语法。”有人能解释一下为什么吗?
  • 你在 PHP 的最后一行更改了你的 SQL 语句吗?
  • 我应该如何以及应该改变什么@Dimitry
【解决方案3】:

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

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

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

【讨论】:

  • 这不是解决方案,而是故障排除/调试;更多的评论在我的书中,这已经在“cmets”中进行了概述。
  • 我注意到我没有在前 3 行中添加分号。这样做后我收到此错误:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '{'', '', '')' 附近使用正确的语法。”有人能解释一下为什么吗?
  • 如果我没记错的话,你的 SQL 应该是这样的:mysqli_query("INSERT INTO users (username, password, occupation) VALUES ('$u', '$p', '$o')"); 另请注意我使用 mysqli_query 而不是 mysql_query 因为第二个已弃用并最终会在之后向您抛出更多错误。
  • 没有 Phil M。它不是 mysqli 扩展。我肯定知道这一点,因为当我执行测试查询时,它工作得很好。测试查询没有使用 mysqli。
  • 那你误会了。我不仅更改了命令,还进一步更改了变量以及它们在此字符串模式中的传递方式。再次阅读代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2017-09-23
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多