Динамически изменить запрос MYSQL в файле PHP с помощью jQuery .post?
Уже давно пытаюсь это сделать, и мне нужна помощь. По сути, у меня есть файл 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;
?>
Это для использования с mashup карты Google, который я пытаюсь сделать. Большое спасибо, если вы можете мне помочь. Если мой вопрос недостаточно ясен, пожалуйста, скажите, и я постараюсь прояснить для вас. Я уверен, что это простое исправление, я просто относительно неопытен, чтобы сделать это. Занимался этим два дня, и, к сожалению, у меня заканчивается время.
2 ответа
Во-первых, вы должны избежать $_POST, который вы вставляете прямо в запрос:
'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';
Как подсказывает Эрик, не выбрасывайте из окна самые полезные предупреждения - скорее всего, ответ появится прямо сейчас.
Но в чем я не совсем уверен, так это в том, как работает твой мэшап. Это могло бы стать намного проще, если бы вы просто делали все вещи внутри самого php, вообще не используя javascript. Возможно, вы также захотите проверить обратные вызовы OAuth - должны дать вам твиттер ID или имя пользователя.
Там нет ничего плохого в:
$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");
Другой, тогда готовый к внедрению SQL - это должно работать. Возможно, вы захотите попробовать свой запрос непосредственно в базе данных и посмотреть, если результаты соответствуют вашим ожиданиям.
Я также рекомендовал бы включать отчеты об ошибках во время разработки. Добавьте следующие строки в начало вашего документа:
error_reporting(E_ALL);
ini_set("display_errors", 1);
и это поможет вам раскрыть много ошибок.