0

こんにちは、私は単純な phpmysql 検索エンジン スクリプトを持っていますが、非常にうまく機能していますが、検索ボックスに空白を 4 回以上入力すると、テーブルの完全なデータが表示されるという大きな問題が見つかりました。方法を教えてください。この問題を解決するには、いくつかの文字列の後に 2 つまたはスペースを追加すると、この問題も発生します。

$button = $_GET ['submit'];
$search = $_GET ['search']; 
if(strlen($search)<=1)
echo "Invalid search";
else{
echo "You searched for <b>$search</b> <hr size='1'></br>";
mysql_connect("localhost","root","9889922527");
mysql_select_db("specifications");

$search_exploded = explode (" ", $search);

foreach($search_exploded as $search_each)
{
@$x++;
if($x==1)

@$construct .="keyword LIKE '%$search_each%'";
else
$construct .="AND keyword LIKE '%$search_each%'";
}

$constructs ="SELECT * FROM search WHERE $construct";
$run = mysql_query($constructs);

@$foundnum = mysql_num_rows($run);

if ($foundnum==0)
echo "Sorry, there are no matching result for <b>$search</b>.</br></br>";
else
{ 

echo "$foundnum results found !<p>";

$per_page = 20;
@$start = $_GET['start'];
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0; 
$getquery = mysql_query("SELECT * FROM search WHERE $construct  LIMIT $start,     $per_page");

while($runrows = mysql_fetch_assoc($getquery))
{
$image = $runrows['image'];
$name = $runrows ['name'];
$price = $runrows ['price'];
$url = $runrows ['url'];
echo "<link rel='stylesheet' href='search.css' type='text/css' />";
echo "<div class='cat-logo'><img width='200' height='180' src='$image' /><br/><a       href='$url'><font class='cat-head'><b>$name</b></font></a><br/><font class='cat-pr'>$price</font></div>" ;
//echo "<a href='$url'><b>$name</b></a><br>$price<br><a href='$url'>$url</a><p>";

}
4

1 に答える 1

0

コードを理解し、クリーンアップしようとしました(ただし、例では if/else ループが閉じられていないようです)。すべてのデータが選択されないように、最小限のエスケープを追加し、(コメントで提案されているように) トリムを追加しました。また、制限 1000 を追加しました (クエリが最大生成できる結果の量を制限するため:

$button = mysql_real_escape_string($_GET['submit']);
$search = trim(mysql_real_escape_string($_GET['search'])); 

if(strlen($search)<=1) {
  echo "Invalid search";
} else {
  echo "You searched for <b>$search</b> <hr size='1'></br>";
  mysql_connect("localhost","root","9889922527");
  mysql_select_db("specifications");

  $search_exploded = explode (" ", $search);

  $x = 0;
  $construct = null;
  foreach($search_exploded as $search_each)
  {
    $x++;
    if($x==1) {
      $construct .="keyword LIKE '%$search_each%'";
    } else {
      $construct .="AND keyword LIKE '%$search_each%'";
    }

    $constructs ="SELECT * FROM search WHERE $construct";
    $run = mysql_query($constructs);

    @$foundnum = mysql_num_rows($run);

    if ($foundnum==0) {
      echo "Sorry, there are no matching result for <b>$search</b>.</br></br>";
    } else { 
      echo "$foundnum results found !<p>";

      $per_page = 20;
      @$start = mysql_real_escape_string($_GET['start']);
      $max_pages = ceil($foundnum / $per_page);
      if(!$start) {
        $start=0; 
        $getquery = mysql_query("SELECT * FROM search WHERE $construct LIMIT $start, $per_page");

        while($runrows = mysql_fetch_assoc($getquery))
        {
          $image = $runrows['image'];
          $name = $runrows ['name'];
          $price = $runrows ['price'];
          $url = $runrows ['url'];
          echo "<link rel='stylesheet' href='search.css' type='text/css' />";
          echo "<div class='cat-logo'><img width='200' height='180' src='$image' /><br/><a       href='$url'><font class='cat-head'><b>$name</b></font></a><br/><font class='cat-pr'>$price</font></div>" ;
          //echo "<a href='$url'><b>$name</b></a><br>$price<br><a href='$url'>$url</a><p>";
        }
      }
    }
  }
}
于 2013-07-30T11:17:02.950 に答える