2017-09-09 2 views
2

これはindex.phpです。入力をすると、特定の名前と年が取得されます。それで大丈夫です 。私はフォームを提出すると、何も入力せずにムービーと年のすべての名前を付けることができますが、私はそれを望んでいません。ユーザーはデータベースに保存されているすべてのデータを表示することはできません。私はpriventdefault()メソッドを与えましたが、動作しません。どうすればこの問題を解決できますか?なぜ私は入力を与えていないときにフォームはすべてのデータをフェッチしていますか?

<!DOCTYPE html> 
<html> 
    <head> 
     <title>ajax</title> 
     <script 
      src="https://code.jquery.com/jquery-2.2.4.min.js" 
      integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" 
      crossorigin="anonymous"></script> 
     <script type="text/javascript"> 



      $(function() // this function excited if the jquery is ready i mean after jquery successfully loaded 
      { 
       function loaddata() 
       { 

        var moviename= $("#moviename").val(); // read moviename value and assign; 

        $.ajax({ 
         type: "GET", 
         url: "query.php", 
         data: { 
          name:moviename // there is no variable name so you have to assign the moveiname to name vairable ; 
         }, 
         success: function (data) { 
          $("#result").html(data); 

         } 

        }); 

       } 


       $("#submit").click(function(event) // Click Event Listener. 
       { 
        event.preventDefault(); 
        loaddata() 
       }); 
      }); 



     </script> 
    </head> 
    <body> 


     <p>Enter movie name </p> 
     <form action="" method="POST"> 
      <input type="text" name="moviename" id="moviename" placeholder="Enter Movie Name" required autocomplete="off"> 
      <input type="submit" name="submit" id="submit" value="Search"/> 
      <!-- if you want ot use jquery you have to use event listener. like $("#submit").click(function(event){}); code from line 31 to 35 --> 
     </form> 
     <br> 

     <div id="result"> 

     </div> 

    </body> 
</html 

///これはquery.phpでquery.php

<?php 

include 'dbcon.php'; 

$name =isset($_GET['name'])?$_GET['name']:''; 


$query = mysqli_query($conn,"SELECT * FROM movie WHERE name like '%$name%'"); 

while($row = mysqli_fetch_array($query)) 
{ 
    echo "<p>".$row['name']."</p>"; 
    echo "<p>".$row['year']."</p>"; 
} 

?> 
+1

名前が空の場合は、すべてが一致する「%%」のようなものを見つけています。最良の方法は、クエリを 'if(filter_input(INPUT_GET、" name ")){/ * do query * /} else {/ * return nothing * /}' – apokryfos

答えて

0

ある空の 'name' の値がquery.php

に渡された場合、あなたは常に行で $nameに空の文字列を割り当てます
$name =isset($_GET['name'])?$_GET['name']:'';. 

クエリでは、db内のすべての結果が返されます。$nameは空の文字列であり、dbのすべてのデータと一致します。

$ nameが空であるかどうかを検証し、クエリを実行することはできません。 JavaScriptの

 var moviename= $("#moviename").val(); // read moviename value and assign; 
    if(moviename){ 
         $.ajax({ 
          type: "GET", 
          url: "query.php", 
          data: { 
           name:moviename // there is no variable name so you have to assign the moveiname to name vairable ; 
          }, 
          success: function (data) { 
           $("#result").html(data); 

          } 

         }); 
} 
1
$name =isset($_GET['name'])?$_GET['name']:''; 

if(!empty($name)){ 
$query = mysqli_query($conn,"SELECT * FROM movie WHERE name like '%$name%'"); 

while($row = mysqli_fetch_array($query)) 
{ 
    echo "<p>".$row['name']."</p>"; 
    echo "<p>".$row['year']."</p>"; 
} 
} 

$名がnullでない場合にのみ、クエリを実行します。

if(!empty($name)) { 
    $query = mysqli_query($conn,"SELECT * FROM movie WHERE name like '%$name%'"); 
    while($row = mysqli_fetch_array($query)){ 
    echo "<p>".$row['name']."</p>"; 
    echo "<p>".$row['year']."</p>"; 
    } 
} 
3

関連する問題