2017-03-18 3 views
1

私は非常にPHPとSQLの新機能ですので、これは非常に些細な場合は本当にすみません。 私のサイトには、その中にテーブル名を持つ複数のdivがあります。 HTMLは次の形式です。
<p class="listname">(table name)</p>
ユーザーがdivをクリックすると、関数はinnerHTMLを使用してテキストを取得し、その特定のテーブルの内容が表示されるように関数を作成しようとしています。
AJAXコールを使用してSELECTクエリを変更するにはどうすればいいですか?

$(document).ready(function(){ 
$(".listname").click(function(){ 
var x=($(this).html()).toLowerCase(); //this assigns the text in the class listname to the variable x 
console.log(x); 

$.ajax({ 
    url: 'http://localhost/fullcalendar/events.php', 
    data: {name:x}, 
    type: "GET", 
    success: function(json) { 

    } 
}); 
}); 

}); 

そして、私のPHPコードは次のとおりです: 私が書いたjqueryの関数であり、私は最初のウェブサイトをロードすると

<?php 

include 'ChromePhp.php'; 
ChromePhp::log('php running'); 

$json = array(); 
if($_POST['name']!=null)//check if any value is passed else use default value 
{ 
    $table=$_GET['name']; 

    ChromePhp::log($table); 
} 
else 
{ 

    $table= 'event'; 

    ChromePhp::log($table); 
} 
$requete = "SELECT * FROM `$table` ORDER BY id"; 
try { 
$bdd = new PDO('mysql:host=localhost;dbname=fullcalendar', 'root', 'root'); 
} catch(Exception $e) { 
exit('Unable to connect to database.'); 
} 
// Execute the query 
$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); 

// sending the encoded result to success page 
echo json_encode($resultat->fetchAll(PDO::FETCH_ASSOC)); 

?> 

は、$表のデフォルト値は、クエリで使用され、データ検索されます。しかし、divをクリックしようとすると、正しい値がphpに渡され、$ table(コンソールでチェックされています)に割り当てられますが、表示されるデータはデフォルトのテーブル、つまり 'event'テーブルになります。
どうすればこの問題を解決できますか?
PS:すべてのテーブルが同じデータベースにあります。

+0

まあ、あなたはAJAXコールに応答して何もしていません。あなたの 'success'関数に注目してください...それは空です。サーバーから戻ってきたデータで何をしたいと思っても、それはあなたがそれを行う場所です。 – David

+0

また、このコードは** SQLインジェクション**に対して*オープンであることに注意してください。あなたは本当に盲目的にユーザーコードをSQLコードとして実行すべきではありません。 – David

+0

重要な注記:**あなたがSQLクエリでエスケープすることなく、信頼できない送信元(クライアントが送信したデータなど)から受け取ったデータを使用しないでください。 '$ _GET ['name']'をエスケープせずに使うと、SQLインジェクションが可能になります。 –

答えて

0

あなたはPOSTデータをチェックしている:

if($_POST['name']!=null) 

しかしGETデータを使用して:

type: "GET" 

だから$_POST配列が常に空になると、あなたのif条件は常にfalseになります。

if($_GET['name']!=null) 
また、ノートの

は、このコードでは他の問題のカップルです:

  1. あなたsuccessコールバックが空であるので、このAJAX呼び出しISN」あなたはおそらくGETデータをチェックするためのもの実際にクライアント側で何かをするつもりです。返されたデータで何をしたいのかは、その関数で行われる必要があります。success
  2. このコードは、ワイドオープンSQLインジェクションです。それは...そのようなテーブル名を動的に使用するのは非常に非正統です。そして、これはおそらくデザインが間違っていることを示しています。しかし、の場合は、ユーザー入力からスキーマ・オブジェクト名を取得する必要があります。少なくとも、ホワイト・リスト・アプローチを取って、ユーザー入力が期待値の1つであることを検証する必要があります。 ユーザー入力を暗黙のうちにコードとして実行しないでください。