php精确搜索错误有多个选项

时间:2015-07-26 15:19:31

标签: php mysql search

我想创建具有多个选项的“精确搜索”,但答案显示“无法搜索”。

在表格中,price,one和pre是行。 如果答案与1和pre匹配,则分离出的价格将会出现。如果没有,答复将是“尝试agian”。

编辑:我有三张桌子 - 前,一张和价格。

- KA 1 will win 100
- KA 5 will win 500
- MA 3 will win 100
- MA 1 will win 200
- BA 3 will win 800

编辑:我现在更改了代码并且没有显示错误,但结果总是“再试一次”。

    <?php
    $output = NULL;

    $link = mysqli_connect("localhost","root","","searchdemo") or die("Unable to select database" . mysqli_error($link));

    if(isset($_GET['search'])){
        $searchq = $_GET['search'];
        $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

        $query = mysqli_query ($link, "SELECT * FROM `345` WHERE pre = '$searchq' AND one = '$searchq'") or die("<b>Error</b> : ".mysqli_error($link));
        $count = mysqli_num_rows($query);


if ($count == 0){
    $output = 'Try Again';

}else{
    while($row = mysqli_fetch_array($query)){
        $onen = $row['one'];
        $pren = $row['pre'];
        $price = $row['price'];

        $output = 'You won '.$price.' now';
    }

}
}     
?>

        <form name="search1" action="index.php" method="GET">

        <b>Prefix</b>
                <select name="pre">
                <option value="">Pick a prefix</option>
                <option value="Ka">Ka</option>
                <option value="Ba">Ba</option>
                <option value="Ma">Ma</option>
        </select>
        <b>Number</b>
                <select name="one">
                <option value="">Pick a number</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                </select>
                <input type="submit" name="search" value="Search" />

        </form>

        <?php
        print ("$output");
        //echo ($output);
        ?>

3 个答案:

答案 0 :(得分:1)

如果调用 die(),则表示查询失败,因此我开始在那里寻找原因。

您的查询中缺少 WHERE ,它应该以

开头
SELECT * FROM 345 WHERE ...

请记住,您的代码是针对SQL注入攻击打开的。您必须转义进入查询的所有用户输入。

最简单的方法是使用http://php.net/manual/en/function.mysql-real-escape-string.php(自PHP 5.5起不推荐使用)或http://php.net/manual/en/mysqli.real-escape-string.php。您还可以为查询使用PDO预处理语句(http://php.net/manual/en/book.pdo.php

答案 1 :(得分:0)

这里有一些通用指示:

  • 您需要在SQL语句中使用WHERE子句来定义搜索条件。搜索将在没有它的情况下工作,但它将返回所有内容,这不是您想要的。 (这已经修复)

  • 您的WHERE子句中的变量之间需要ANDOR语句,因为您要求“显示此WHERE条件1为真且/或条件2是真的“

  • die命令替换为更好,更丰富的反馈: 这将输出搜索失败的原因。使用它来修复更多错误。

    or die("Could not search: ".mysql_error());

  • 正如jedrzej.kurylo所提到的,您对数据库的注入攻击是开放的,并且根据他们的建议或通过将代码升级到使用 MySQLi来解决这些问题非常重要。 PDO 。当你还在学习SQL的基础知识时,现在就这样做,因为它远远超过了使用旧的,已弃用且不安全的MySQL的坏习惯。

答案 2 :(得分:0)

最后我得到了答案,这很容易。我真傻啊! :)

我非常感谢@Martin和@ jedrzej.kurylo

    <?php
    $output = NULL;

    $link = mysqli_connect("localhost","root","","searchdemo") or die("Unable to select database" . mysqli_error($link));

    if(isset($_POST['search'])){
        $spre = $_POST['pre'];
        $sone = $_POST['one'];

        $query = mysqli_query ($link, "SELECT * FROM `345` WHERE pre = '$spre' AND one = '$sone'") or die("<b>Error</b> : ".mysqli_error($link));
        $count = mysqli_num_rows($query);


if ($count == 0){

    $output = 'Try Again';


}else{
    while($row = mysqli_fetch_array($query)){
        extract($row);

        $onen = $row['one'];
        $pren = $row['pre'];
        $price = $row['price'];
        $id = $row['id'];

        $output = 'You won '.$price.' now';
    }

}
}
?>

        <form name="search1" action="index.php" method="POST">


       <b>Prefix</b>
                <select name="pre">
                <option value="">Pick a prefix</option>
                <option value="Ka">Ka</option>
                <option value="Ba">Ba</option>
                <option value="Ma">Ma</option>
                </select>

        <b>Number</b>
                <select name="one">
                <option value="">Pick a number</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                </select>

                <input type="submit" name="search" value="SEARCHING" />

        </form>

        <?php
        print ("$output <br />");
        ?>