jquery .postを使用してPHPファイル内でMySQLクエリを動的に変更しますか?
質問
かなり長い間これを試していたので、助けが必要です。基本的に、データベースを照会するPHPファイルがあり、ログインインユーザーの名前に基づいてクエリを変更したいと思います。
私のサイトで起こることは、ユーザーがTwitter OAuthでログオンし、詳細(Twitterユーザー名など)を表示できることです。ユーザーが情報を追加したデータベースを持っています。私が起こりたいことは、ユーザーがTwitter OAuthでログインするとき、jQueryを使用してユーザーのユーザー名を取得し、MySQLクエリを更新して結果のみを表示することができます。 user_name =その特定のユーザー名。
現時点では、MySQLクエリは次のとおりです。
"SELECT * FROM markers WHERE user_name = 'dave'"
私は次のようなことを試しました:
"SELECT * FROM markers WHERE user_name = '$user_name'"
PHPファイルの他の場所には、$ user_name = $ _post ['user_name'];を持っています。別のファイル(ユーザーがTwitterを介してログインした後にリダイレクトされるファイル)では、次のようなjQueryがあります。
$(document).ready(function(){
$.post('phpsqlinfo_resultb.php',{user_name:"<?PHP echo $profile_name?>"})});
$ profile_nameは、そのページで以前に定義されています。
私は明らかに何か間違ったことをしていることを知っています、私はまだ学んでいます。 jQueryを使用してユーザーのユーザー名をPHPファイルに投稿してMySQLクエリを変更して、ログインしているユーザーに関連する結果のみを表示する方法はありますか。以下のクエリにPHPファイルを含めました:
<?php
// create a new XML document
//$doc = domxml_new_doc('1.0');
$doc = new DomDocument('1.0');
//$root = $doc->create_element('markers');
//$root = $doc->append_child($root);
$root = $doc->createElement('markers');
$root = $doc->appendChild($root);
$table_id = 'marker';
$user_name = $_POST['user_name'];
// Make a MySQL Connection
include("phpsqlinfo_addrow.php");
$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'")
or die(mysql_error());
// process one row at a time
//header("Content-type: text/xml");
header('Content-type: text/xml; charset=utf-8');
while($row = mysql_fetch_assoc($result)) {
// add node for each row
$occ = $doc->createElement($table_id);
$occ = $root->appendChild($occ);
$occ->setAttribute('lat', $row['lat']);
$occ->setAttribute('lng', $row['lng']);
$occ->setAttribute('type', $row['type']);
$occ->setAttribute('user_name', utf8_encode($row['user_name']));
$occ->setAttribute('name', utf8_encode($row['name']));
$occ->setAttribute('tweet', utf8_encode($row['tweet']));
$occ->setAttribute('image', utf8_encode($row['image']));
} // while
$xml_string = $doc->saveXML();
$user_name2->response;
echo $xml_string;
?>
これは、GoogleマップMashup Imで使用しようとしているために使用されます。あなたが私を助けることができるなら、どうもありがとう。私の質問が十分に明確でない場合は、言ってください、そして私はあなたのために明確にしようとします。これは簡単な修正だと確信しています。私はそれをするのは比較的経験が浅いだけです。これに2日間行っていて、残念ながら私は時間を使い果たしています。
解決
最初は、クエリに直接挿入している$ _POSTを逃れる必要があります。
'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';
エリックが示唆するように、最も便利な警告を窓から捨てないでください - おそらく答えがすぐに現れます。
しかし、私がよくわからないのは、あなたのマッシュアップの仕組みです。 JavaScriptを省略して、PHP自体の内部ですべてのことをするだけでは、はるかに簡単になる可能性があります。また、OAUTHコールバックを確認することもできます - Twitter IDまたはユーザー名を提供する必要があります。
他のヒント
何も悪いことはありません:
$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");
その後、SQLインジェクションの機が熟している - それは機能するはずです。データベースでクエリを直接試して、結果が期待しているかどうかを確認することをお勧めします。
また、開発中にエラーレポートをオンにすることをお勧めします。次の行をドキュメントの上部に追加します。
error_reporting(E_ALL);
ini_set("display_errors", 1);
そして、それはあなたが多くのエラーを明らかにするのに役立ちます。