我正在尝试从输入框中获取数据并将其传递给数据库以显示适当的记录和结果,但需要帮助无法获得结果
<html>
<body>
</body>
</html>
<?php>
$prod_name = $_POST["name_of_the_product"];
echo [$prod_name];
$db_host = "localhost";
$db_username = "acwj_price";
$db_pass = "";
$db_name = "acwj_price";
mysql_connect("$db_host","$db_username","$db_pass") or die ("Please Try Again");
mysql_select_db("wikiacwj_price") or die ("no data");
$sql = mysql_query("SELECT * FROM price_comparsion where product_name="prod_name"");
//write the results
while ($row = mysql_fetch_array($sql)) {
echo $row['product_name'];}
?>
</body>
</html>
警告:检测到货物邪教编程!你有大量的语法错误,你有SQL注入漏洞,你有无用的错误处理,等等等等。换句话说,代码是一团糟。
1)echo [$prod_name];
这里的[]
是什么?这是一个完全的语法错误
2) mysql_connect("$db_host" 等... - 为什么""
围绕变量?您正在创建一个新的空字符串,并在其中嵌入另一个字符串 - 完全浪费 CPU 周期。
3) or die ("Please Try Again");
- 告诉您网站的用户重试有什么用?如果您的代码无法登录mysql,用户应该如何解决这个问题?重装不会使无效的 mysql 登录神奇地重新开始工作。如果您是代码的唯一用户,至少要有一个有用的错误消息输出,解释脚本死亡的原因,例如 or die(mysql_error())
.
4)... where product_name="prod_name"")
。您在这里遇到了另一个可怕的语法错误 - 您无法在使用您尝试嵌入的相同类型的引号构建的字符串中嵌入引号。
4a) 也许应该... product_name='$prod_name'"
,所以你实际上是在嵌入传入的表单值吗?
4b) $prod_name
现在是您的 SQL 注入源,您应该拥有 AT MINIMUIM $prod_name = mysql_real_escape_string($_POST['name_of_product'])
,并在连接到数据库后将其放在某个地方,因为 m_r_e_s() 仅在您拥有活动数据库连接时才有效。
我们需要更多的上下文来给你一个可靠的答案,但是回顾你的代码,我发现了以下导致问题的事情:
echo [$prod_name];
不正确 - 应该echo $prod_name;
此外,mysql_connect不正确 - 应该是:mysql_connect($db_host,$db_username,$db_pass) or die ("Please Try Again");
(变量周围不应有引号)
并且 sql 语句不正确 - 应该是:$sql = mysql_query("SELECT * FROM price_comparsion where product_name='" . mysql_real_escape_string($prod_name) . "'");
(更正了引用,更改为传入变量,并添加了mysql_real_escape_string
作为最小SQL错误预防)
注意:这并不反映SQL的最佳实践 - 原始代码中存在各种SQL注入攻击漏洞 - 此代码仅经过修改才能正常工作。 如果你要编写这样的代码,你应该阅读SQL注入预防。 关于StackOverflow有很多很好的信息 - 这里只是一个例子:SQL注入,报价和PHP