2016-04-15 20 views
0

私はPHP、MySQL、およびAJAXを使用してライブ検索を実行しようとしています。私は間違っているとは思わない。私のデータベースはphpMyAdminでホストされています。データベース名はInfoで、アクセスしようとしているテーブルは名前です。MySQL、PHP、およびAJAXによるライブ検索は機能していません

のindex.php index.phpの

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
    </head> 
     <style> 

      #here 
       { 
        width:400px; 
        height:300px; 
        border: 1px solid grey; 
        display:none; 
       } 

      #here a{ 
       display:block; 
       width:98%; 
       padding:1%; 
       font-size:20px; 
       border-bottom:1px solid grey; 
      } 

       </style> 
     <body> 

      <script src=jq.js></script> 

      <script src="jq.js"> 
       $(document).ready(function(e) 
       { 
        $("search").keyup(function() 
        { 
         $("#here").show(); 
         var x = $(this).val(); 
         $.ajax(
          { 
           type:'GET', 
           url:'fetch.php', 
           data: 'q='+x, 
           success:function(data) 
           { 
            $("#here").html(data); 
           } 
           , 
          }); 
        }); 
       }); 




      </script> 


      <h1>Live Search</h1> 
      <input type="search" name="search" id="search"> 
      <div id="here"> 

      </div> 
     </body> 
</html> 

Fetch.php

<?php 
if(!empty($_GET['q'])) 
{ 

    include 'connect.php'; 
    $q=$_GET['q']; 
    $query = "select * from names where names like '%$q%';"; 
    while($output=mysqli_fetch_assoc($result)) 
    { 
     echo '<a>'.$output['names'].'</a>'; 
    } 
    $query = "select * from names"; 
} 
あり

fetch.php

?> 

<?php 
$host="localhost"; 
$user="andremac96"; 
$password=""; 
$db="Info"; 
$conn = mysqli_connect($host,$user,$password,$db); 
?> 
+1

[Little Bobby](http://bobby-tables.com/)は[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can-i) -prevent-sql-injection-in-php)[MySQLi](http://php.net/manual/en/mysqli)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学んでください。 .quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+0

ブラウザのコンソールやエラーログにエラーが表示されていませんか? –

+0

直接使用するとfetch.phpが正しいデータを出力していることを確認できますか? –

答えて

2

をconnect.phpと をfetch.phpている私の3つのページここでいくつか間違っています。

は、まず、あなたがクエリを実行することはありません:だから

$query = "select * from names where names like '%$q%';"; 

、あなたはmysqli_query()が含まれており、それにDB接続を渡す必要があります。その後

$query = mysqli_query($conn, "select * from names where names like '%$q%';"); 

、あなたは$queryが、再びされている必要があります

while($output=mysqli_fetch_assoc($result)) 

のために間違った変数$resultを使用されていたであろう。それにも照会します。 $query = "select * from names";

$query = mysqli_query($conn, "select * from names"); 

ため

同じこと^あなたがが1つで何をしたいのかわかりません。

次に、あなたのように読んでいるはず$("search").keyup(function()における検索IDの#を入れるのを忘れ:PHPとMySQLのエラーについて

$("#search").keyup(function() 

チェック:

さらに、cあなたのJSコンソールをどうぞ。

その後echo '<a>'.$output['names'].'</a>';

^あなたも、ここで何をしたいのかわからないがあります。

次に、<script>と表示されるはずの2番目の<script src="jq.js">です。


現在のコードはSQL injectionです。 prepared statements、またはPDOprepared statementsを使用してください。


HTML こだわる

場所<style>...</style><head></head>です。特定のブラウザでは、HTMLソースに警告が表示されます。


編集:(私は正常にテストが使用するものに書き換えなど)。

サイドノート:<form></form>タグを追加しましたが、タグなしで機能しました。

ファイル#1:

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 

<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 

     <style> 

      #here 
       { 
        width:400px; 
        height:300px; 
        border: 1px solid grey; 
        display:none; 
       } 

      #here a{ 
       display:block; 
       width:98%; 
       padding:1%; 
       font-size:20px; 
       border-bottom:1px solid grey; 
      } 

       </style> 

    </head> 

     <body> 


      <script> 
       $(document).ready(function(e) 
       { 
        $("#search").keyup(function() 
        { 
         $("#here").show(); 
         var x = $(this).val(); 
         $.ajax(
          { 
           type:'GET', 
           url:'fetch.php', 
           data: 'q='+x, 
           success:function(data) 
           { 
            $("#here").html(data); 
           } 
           , 
          }); 
        }); 
       }); 


      </script> 


<h1>Live Search</h1> 
<form> 
    <input type="search" name="search" id="search"> 
</form> 

    <div id="here"> 

    </div> 


     </body> 
</html> 

ファイル#2:(fetch.php)

<?php 

include 'connect.php'; // being the MySQLi_ API 

if(!empty($_GET['q'])) 
{ 


$q= mysqli_real_escape_string($conn, $_GET['q']); 


    $query = mysqli_query($conn, "select * from names where names like '%$q%';") 
      or die(mysqli_error($conn)); 


    while($output=mysqli_fetch_assoc($query)) 
    { 

     echo '<a>'.$output['names'].'</a>'; 


    } 
//  $query = "select * from names"; 
} 
  • あなた.phpファイルパスが正しいことであり、彼らがアクセス可能であることを確認してくださいあなたのスクリプトのために。

エラーを見つけるのに役立つファイルの先頭にerror reportingを追加してください。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

追記:の表示エラーが唯一のステージングで行われていない、と決して生産されなければなりません。

+0

お世話になりました。私のデータベースも構造が間違っていたhaha – Andre

+0

@Andreあなたは歓迎ですアンドレ。答えを受け入れることを検討してください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workがここに戻って、ティック/チェックマークで緑色に変わるまで同じことを行う方法があります。これは解決策が見つかったことをコミュニティに知らせます。そうでない場合、他の人は質問がまだ開いていると思うかもしれませんし、(もっと)回答を投稿したいかもしれません。 *乾杯* –

関連する問題