【解決方法】検索フィールドでスペースまたは % を押すと、PHP および MYSQL がデータベースからすべての結果を取得する

プログラミングQA


PHP と MYSQL を使用して検索フィールドを作成していますが、正常に動作しています。 しかし、スペースまたは % を押して検索をクリックすると、データベースから列の説明のすべての行が取得されます。 コードは次のとおりです。

  <!-- Main Content -->
  <form action="test.php" method="GET">
  <div class="container mb-5">
    <div class="row">
      <div class="col-lg-6">
        <label for="search" class="mb-2 mt-4 fw-bold d-flex justify-content-center" style="font-size: 20px; color: #6f42c1;">Search</label>
        <div class="input-group mb-4">
        <input type="search" class="form-control" name="search" value="<?=(isset($_GET['search'])?$_GET['search']:'');?>">
        <button type="submit" class="btn btn-outline-secondary"></button>
      </div>
      <div class="d-flex justify-content-center mb-4">
      <canvas class="bg-light" id="myCanvas" style="border:1px solid #dee2e6;"></canvas>
    </div>

      <?php
      if(isset($_GET['search']) && !empty($_GET['search'])){
          $condition = '';
          $param = explode(" ", sanitize($_GET['search']));
          foreach($param as $text){
            $condition .= "description LIKE '%" . mysqli_real_escape_string($db, $text) . "%' AND ";
          }
          $condition = substr($condition, 0, -4);
          $sql = "SELECT * FROM customers WHERE " . $condition;
          $result = $db->query($sql);
          if(mysqli_num_rows($result) > 0){
            while($row = mysqli_fetch_assoc($result)){ ?>

              <div>
              Description: <?=html_entity_decode(str_replace("p", "span", $row['hadeeth']));?>
              <hr>
            </div>

            <?php }
          }else{
            echo 'No results';
          }
      }
    ?>
</div>
</div>

私が試したこと:

通常どおり検索すると、正しい結果が得られます。 また、検索フィールドが空で検索をクリックすると、結果が得られませんが、これも正しいです。 しかし、スペースを 1 回以上押してから検索ボタンをクリックすると、列の説明からすべての行が取得されますが、これは必要なものではありません。 % と入力しても同じことが起こります。 なぜそれが起こっているのか、そして解決策は何ですか?

コメント

タイトルとURLをコピーしました