0

データベースにホテルの詳細を照会し、HTMLテーブル内に表示する非常に単純なCRUDを作成しました。

デフォルトでは、私のmysqlクエリはホテルを作成された順序で返します。距離またはAZで結果を返すために、いくつかの異なるsqlステートメントを考え出しました。ユーザーにどちらを選択するかを選択してもらいたいと思います。

たとえば、「名前」や「距離」を使用して簡単なドロップダウンを作成するにはどうすればよいですか。これを選択すると、PHPを使用した正しい並べ替えクエリを使用してページが再読み込みされます。

4

3 に答える 3

1

基本的な構造は次のようになります。

HTML;

<SELECT id="sort_select" onchange="javascript:re_sort();">
    //options
</SELECT>

Javascript関数;

function re_sort() {
    //make ajax call using sort_select value
    //refresh table contents
}

PHP;

if($_GET['sort_field'] == 'fish') {
    //execute fish sort sql
}
else if($_GET['sort_field'] == 'goat') {
    //execute goat sort sql
}
//return response

$_GETSQLクエリで値を直接使用しないでください。代わりに、上記の構造を使用してください。

于 2012-11-26T17:50:08.360 に答える
0

簡単そうに聞こえます。ORDER BYドロップダウンの値が入力された句を追加します。

公正警告!

ユーザーからの直接入力は非常に危険です。また、プリペアドステートメントを値に使用することはできませんORDER BY非常に積極的なホワイトリストが必要です。受け取る値が、サーバーのどこか(データベーススキーマ、またはPHPコードにハードコードされている)からフェッチされる事前定義された値の1つであることを確認してください。

ユーザー入力がチェックされておらず、サニタイズされていないクエリを到着させないでください!

SQLインジェクションに関する詳細情報。

于 2012-11-26T17:49:57.970 に答える
0

変更イベントとリロードイベントを処理するJavaScriptを使用する必要があります。ただし、無効になっているJavaScriptブラウザも処理する必要があります。これを行うには、sumbitボタンを表示し、JavaScriptで非表示にします。

PHPに関しては、いくつかの方法がありますが、ここにアイデアがあります。ソート値を配列に格納します。次に、インデックスを数値にします。これにより、純粋なSQLステートメントを許可したくないため、正しく実行された場合にSQLインジェクションが実行されなくなります。ユーザーが変更したら送信します。

コードにはスイッチがあり、入力された数値に基づいて適切なSQLステートメントを追加します。

于 2012-11-26T17:51:50.140 に答える