2

私は自分のウェブサイトで検索エンジンに取り組んでいます。ユーザーはGET、URLにaを付けて送信された基準を追加できます。

ユーザーがたとえば1つの基準を選択すると、次のようになります。

localhost/search.php?course=1&price=&name=

選択できる基準は3つあるので、ご覧のとおり、彼はCOURSEのみを選択しました。

次に、基準に従ってデータベースから選択する必要があるため、コードは次のようになります。

if ($_GET['price'] > 0 && $_GET['name'])
{
    $search_price = $_GET['price'];
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price AND name LIKE '%$search_name%'");
}
elseif ($_GET['price'] > 0)
{
    $search_price = $_GET['price'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price");
} 
elseif ($_GET['name'])
{
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND name LIKE '%$search_name%'");
}
else 
{
    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id'");
}

while ($row2 = mysql_fetch_assoc($result2))
                                        {
.....

しかし、これは正しい方法ではありません。最終的にユーザーが10の基準を選択できる場合、これは非常に長いコードになるためです。

これを修正するにはどうすればよいですか?

4

2 に答える 2

1

私がすることは、SQLクエリを動的に作成し、最後に実行することです。だから、このようなもの

$query_string = "SELECT blahblah, blahblah, blah blah from blahx where 1=1 ";
$where = "";

if(isset($_GET['somecriteria']))
{
    $where .= " AND blahblah = $_GET['somecriteia'] ";
}
if(isset($_GET['someOTHERcriteria']))
{
    $where .= " AND blahblah=$_GET['someOTHERcritera'] ";
}
mysql_query($query_string . $where);

など..これは、目的を達成する方法を示すためのものであることに注意してください。これは明らかに SQL インジェクション攻撃を受けやすく、クリーンアップする必要があります。

于 2012-12-12T17:53:03.053 に答える
0

$ _postを使用して、大量の情報をphpスクリプトに送信します。getを使用するときは、get呼び出しが入力されている場合にのみget呼び出しを含めるようにURLを作成する必要があります。そのため、価格が選択されていない場合、URLには「price=」を含めないでください。これにより、受信スクリプトで問題が発生します。

データベーススクリプトは、選択した基準のみを含む1回の呼び出しで実行できます。

Myqslは減価償却されているため、MyqsliまたはPDOを調べる必要があります

于 2012-12-12T17:54:23.153 に答える