2017-06-02 16 views
1

PHPを使用してSQLクエリからSELECT結果をフィルタリングするために、選択ドロップダウンメニューと入力タグを使用します。ユーザーは<、=、>のいずれかを選択し、フィルタリングする番号を入力します。ajaxを使用してSQL SELECTクエリをクエリします

私はこれらの警告や失敗を取得しています:
お知らせ:URLに
致命的なエラーを非オブジェクトのプロパティを取得しようとすると:URL

の中でブールのメンバ関数bind_param()の呼び出し

「WHERE c.level?」を使用する有効なアプローチですか?

私はまた、<、=、または>の代わりにオプションの開始タグと終了タグの間にHTML番号コードを使用しようとしましたが、同じエラーが発生します。

<form method="post" action="filterChar.php" id="char_filter"> 
    <fieldset> 
     Level is 
      <select name="expression"> 
       <option value="<"> < </option> 
       <option value="="> = </option> 
       <option value=">"> > </option> 
      </select> 
      <input type="number" name="limit"> 

      <input type="submit" name="char_filter"> 
    </fieldset> 
</form> 

jQueryのAJAX呼び出し:

$('#char_filter').submit(function() { 

     $.ajax({ 
     url: 'filterChar.php', 
     type: "POST", 
     dataType: { expression: $(this).expression.value, 
        limit: $(this).limit.value} 

     }); 
    }); 

PHPハンドラ:ここ

は私のフォームでいくつかのより多くのエラーを発見

if(!($stmt = $mysqli->prepare("SELECT c.id, c.name, r.name, cl.name, c.level FROM dnd_character c INNER JOIN dnd_race r ON c.race = r.id INNER JOIN dnd_class cl ON c.class = cl.id WHERE c.level ? ?"))) { 
          echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
        } 

        if(!($stmt->bind_param('si',$_POST['expression'],$_POST['limit']))) { 
          echo "bind_param failed: " . $stmt->errno . " " . $stmt->error; 
        } 

        if(!($stmt->execute())) { 
         echo "Execute failed: " . $stmt->errno . " " . $stmt->error; 
        } 

`

+0

を使用することができます。 –

+0

なぜ2つのプレースホルダを使用していますか。あなたの価値はただ一つの価値ですか? – Akintunde007

+0

あなたのajax呼び出しでは、 'dataType'を' data'に置き換えてください。一般的に、このようなトラブルシューティングを行う場合は、ajax呼び出しとPHPスクリプトを個別にトラブルシューティングしてください。 –

答えて

0

ので、ここです固定JS部分:

$('#char_filter').submit(function() { 
    var form = $(this).get()[0]; 
    var data = { 
    expression: form.expression.value, 
    limit: form.limit.value 
    }; 
    $.ajax({ 
    url: 'filterChar.php', 
    type: "POST", 
    data: data 
    }); 
}); 

またあなたは、あなたのHTML文書内の `` <` and `>テキスト文字をエスケープする必要がdata: $(this).serialize()

関連する問題