【问题标题】:Simple PHP search query [closed]简单的 PHP 搜索查询 [关闭]
【发布时间】:2013-05-25 04:55:49
【问题描述】:

我正在尝试制作一个简单的搜索查询脚本,它将从表单中提取结果并相应地从数据库中返回结果。

'connect.php'

<?php

$strServer = "http://server33.000webhost.com";
$strDatabase = "******";
$strUser = "******";
$strPwd = "******";

$strDB = mysql_connect($strServer, $strUser, $strPwd) or die ("Could not connect to database"); print mysql_error();
$database = mysql_select_db("$strDatabase", $strDB); print mysql_error();   
?>

'search.php'

<?php

ini_set ('display_errors', 1);

include ('connect.php'); print mysql_error();

$query = ('SELECT * FROM 'properties' WHERE ('type' = '$_POST['type']') OR ('area' = '$_POST['area']')');
$result = mysql_query($query) or die ("Couldn't execute query."); print mysql_error();

while($r = mysql_fetch_array($result)) 
{
echo $r['type'];
echo $r['area'];
}
?>

我搜索了无数的论坛和教程,但看不出我做错了什么。请帮帮我!提前致谢

【问题讨论】:

  • 好吧,$query 行上有冲突的引号,您正在使用 mysql_* 函数,并且您的 SQL 查询容易受到 SQL 注入的攻击。
  • 他使用单引号作为查询字符串,同样用于 SQL。这里有一个问题:'SELECT * FROM 'properties' ...',应该是'SELECT * FROM \'properties\' ...'

标签: php mysql forms search


【解决方案1】:

我建议您像这样更改您的查询

$query = "SELECT * FROM `properties` 
          WHERE (`type` = '".mysql_escape_string($_POST['type'])."') 
          OR (`area` = '".mysql_escape_string($_POST['area'])."')";

并尽量避免使用mysql_*函数,最好使用mysqli并尝试使用mysql_escape_string进行帖子并获取值

【讨论】:

  • 有什么理由不赞成它..??
  • 您将未经处理的参数放入查询中。它容易受到 SQL 注入的攻击。在回答 OP 的问题时,您至少应该谈谈他的脚本存在的巨大安全漏洞。
  • 它只是正确的..whu会有人否决它..
  • @Blender 以防你没有注意到他提到要避免使用 mysql 函数.. 因为他们的注射工作很奇怪mysql_escape_string 并使用 ,mysqli 函数..
  • 是的 @RajatSinghal 我用 that.thnku Blender 编辑过我忘了放那个...非常感谢
【解决方案2】:

您应该查看两件事: 包括('connect.php');打印 mysql_error();

最好不要在独立语句中使用 mysql_error()。无论如何,在 search.php 页面中不需要太多的 mysql 错误。您可以进行的另一项更正是:(connection.php) $database = mysql_select_db("$strDatabase", $strDB) or die("连接数据库时出错".mysql_error());

最后,您可能遇到的所有解析错误都是由于此语句造成的。

$query = ('SELECT * FROM 'properties' WHERE ('type' = '$_POST['type']') OR ('area' = '$_POST['area']')');

当您以 ' 开始一个字符串块时,块的结尾也是 '。接下来,不能简单地连接两个字符串,必须使用 .符号。

$a='make me'.'good'; //valid
$b='hello'$a'!!thanks'; // invalid
$b='hello'.$a.'!!thanks'; //valid (concatenation is used here with . sign)

$otherway="hello {$a} !!thanks"; //valid

所以你的代码可以写成

$query = "SELECT * FROM 'properties' WHERE 'type' = '$_POST['type']' OR 'area' = '$_POST['area']'";

这是因为“开始和”结束字符串,但它不关心程序内部的'。

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多