0

この単純なスクリプトに対して空のクエリ エラーが発生し続けます。何か案は?

入力ボックスとボタンを備えたフォームがあり、フォームの外側に、「サイト全体」、「ページ」、「ブログ」の 3 つの値を持つ filter1 というドロップダウン リストがあります。

<?php

//process the search query

if (isset($_POST['submitted'])) {

    require('db_conn.php'); // connect to db

    $search_query = $_POST['searchquery'];

    // check filter
    if ($_POST['filter1'] == 'Whole Site') {

        $q = "(SELECT id, page_title AS title FROM pages WHERE page_title LIKE '%$searchquery%' OR page_body LIKE '%$searchquery%') UNION (SELECT id, blog_title AS title FROM blog WHERE blog_title LIKE '%$searchquery%' OR blog_body LIKE '%$searchquery%')";

    }
    else if ($_POST['filter1'] == 'Pages') {

        $q = "SELECT id, page_title AS title FROM pages WHERE page_title LIKE '%$searchquery%' OR page_body LIKE '%$searchquery%'";

    }
    else if ($_POST['filter1'] == 'Blog') {

        $q = "SELECT id, blog_title AS title FROM blog WHERE blog_title LIKE '%$searchquery%' OR blog_body LIKE '%$searchquery%'";

    }

    $r = mysqli_query($dbc, $q); // query the db

    $count = mysqli_num_rows($r);

    if ($count > 1) {

        $search_output = 'ok';

    }
    else {

        $search_output = "<hr />0 results for <strong>$search_query</strong><hr />$q";

    }

}

?>

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title></title>

</head>

<body>
<h2>Search the tables</h2>

<form action="search.php" method="post">
    <p>Search: <input type="text" name="searchquery"/></p>

    <p><input type="submit" name="submit" value="Search"/></p>
    <input type="hidden" name="submitted" value="TRUE"/>
</form>

<br/>
Search in:
<select name="filter1">
    <option value="Whole Site">Whole site</option>
    <option value="Pages">Pages</option>
    <option value="BLog">Blog</option>
</select>

<?php echo $search_output; ?>

</body>

</html>
4

2 に答える 2

5

問題は、フォームがあまりにも早く閉じられることです。指定された SELECTfilter1がフォームに含まれていません。

フォームを次のように書き換えます。

<form action="search.php" method="post">
    <p>Search: <input type="text" name="searchquery"/></p>

    <p><input type="submit" name="submit" value="Search"/></p>
    <input type="hidden" name="submitted" value="TRUE"/>

<br/>
Search in:
<select name="filter1">
    <option value="Whole Site">Whole site</option>
    <option value="Pages">Pages</option>
    <option value="BLog">Blog</option>
</select>
</form>
于 2012-11-04T17:41:04.437 に答える
0

スイッチを使うときはそのほうがいいと思います

switch ($_POST['filter1']) {
      case 'Whole Site': $q = "(SELECT id, page_title AS title FROM pages WHERE page_title LIKE '%$searchquery%' OR page_body LIKE '%$searchquery%') UNION (SELECT id, blog_title AS title FROM blog WHERE blog_title LIKE '%$searchquery%' OR blog_body LIKE '%$searchquery%')";
      case 'Pages': $q = "SELECT id, page_title AS title FROM pages WHERE page_title LIKE '%$searchquery%' OR page_body LIKE '%$searchquery%'";
      case 'Blog': $q = "SELECT id, blog_title AS title FROM blog WHERE blog_title LIKE '%$searchquery%' OR blog_body LIKE '%$searchquery%'";
      default: $q = false;
   }
if($q) {

 //Your code
}
于 2012-11-04T18:28:49.823 に答える