为什么我的代码甚至列出了这些?

时间:2013-12-28 00:07:35

标签: php mysql

我正在尝试编写一个搜索功能,其中列出了符合搜索条件的产品。

termekek = products
marka = manufacturer
tipus = type

如下图所示,它列出了我的MSI产品,但也不是Radeon。 它应该只列出产品,即MSi,但也是Radeon。在我看来,问题必须与我的SQL代码有关,但我似乎无法做到正确。 先感谢您! My problem

我的PHP代码:

http://pastebin.com/fmwLVbER

           <?php

            if(isset($_GET["text_search"]))
            {
                require('db.php');
                mysql_select_db('ceg',$connection);
                $text=$_GET["text_search"];

                $text=explode(" ", $text);

                $i=1;

                if(count($text) > 0)
                    $sql='SELECT * FROM termekek WHERE marka="'.$text[0].'" OR tipus="'.$text[0].'" ';

                while($i < count($text)){
                    $sql .= 'AND marka="'.$text[$i].'" OR tipus="'.$text[$i].'"';
                    $i++;
                }

                echo $sql;

                $result=mysql_query($sql);

                if (mysql_num_rows($result) > 0)
                {
                    while($array=mysql_fetch_array($result)){
                        echo '<div id="product">
                            <div>
                                <img height="250" width="250" src='.$array["kep"].' />
                            </div>
                            <div>
                                '.$array["marka"].'
                                '.$array["tipus"].'
                            </div>
                            <div>
                                '.$array["ar"].' euró
                            </div>
                          </div>';
                    }
                }
            }

            ?>

2 个答案:

答案 0 :(得分:1)

你的OR子句需要括号,以便首先评估它们。

答案 1 :(得分:0)

根据罗伯特的说法,我认为你的代码应该是这样的。

if(count($text) > 0)
                    $sql='SELECT * FROM termekek WHERE (marka="'.$text[0].'" OR tipus="'.$text[0].'") ';

                while($i < count($text)){
                    $sql .= 'AND (marka="'.$text[$i].'" OR tipus="'.$text[$i].'")';
                    $i++;
                }