Динамически измените запрос MySQL в файле PHP с помощью jQuery .post?

StackOverflow https://stackoverflow.com/questions/2716838

  •  01-10-2019
  •  | 
  •  

Вопрос

Пробовал это довольно долго, и мне нужна помощь. В основном у меня есть файл 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 Map Mashup, я пытаюсь сделать. Большое спасибо, если вы можете мне помочь. Если мой вопрос недостаточно ясен, пожалуйста, скажите, и я постараюсь уточнить для вас. Я уверен, что это простое исправление, я просто относительно неопытный, чтобы сделать это. Был в этом два дня, и у меня нет времени, к сожалению.

Это было полезно?

Решение

Сначала вы должны избежать $ _POST, вы вставляете прямо в запрос:

'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';

Поскольку Erik предлагает, не выкините из окна самые полезные предупреждения - скорее всего, ответ будет поппироваться прямо тогда.

Но то, что я не совсем уверен, это то, как ваш Mashup работает. Он может получить намного проще, если вы просто сделаете все вещи внутри самого PHP, вообще пропуская JavaScript. Вы также можете проверить обратные вызовы OAUTH - должны дать вам идентификатор Twitter или имя пользователя.

Другие советы

В этом нет ничего плохого в:

$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");

Другое затем созревать для инъекций SQL - он должен работать. Вы можете попробовать ваш запрос непосредственно в базе данных и посмотреть, являются ли результаты то, что вы ожидаете.

Я также рекомендую включить сообщение об ошибках во время разработки. Добавьте следующие строки в верхнюю часть вашего документа:

error_reporting(E_ALL);
ini_set("display_errors", 1);

И это поможет вам раскрыть много ошибок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top