-1

我正在尝试从输入框中获取数据并将其传递到数据库以显示适当的记录和结果,但需要帮助无法获得结果

<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>
4

2 回答 2

6

警告:检测到货物崇拜计划!你有大量的语法错误,你有 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() 仅在您有活动的数据库连接时才有效。

于 2012-04-21T22:40:44.277 回答
2

我们需要更多的上下文来给你一个可靠的答案,但是查看你的代码我发现了以下导致问题的事情:

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 Injection, Quotes and PHP

于 2012-04-21T22:48:11.957 回答