2010-04-26 3 views
0

Пробовал это уже довольно долго, и мне нужна помощь. В основном у меня есть PHP-файл, который запрашивает базу данных, и я хочу изменить запрос на основе имени пользователя.Динамически изменять MYSQL-запрос в PHP-файле с помощью jQuery .post?

Что происходит на моем сайте, так это то, что пользователь входит в систему с помощью Twitter Oauth, и я могу отображать их данные (имя пользователя и т. Д.). У меня есть база данных, к которой пользователь добавил информацию, и я, что бы хотел, произошло, когда пользователь входит в систему с помощью 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, которую я пытаюсь сделать. Большое спасибо, если вы можете мне помочь. Если мой вопрос недостаточно ясен, скажите, и я попробую уточнить для вас. Я уверен, что это простое решение, я просто относительно неопытен, чтобы это сделать. Был в течение двух дней, и к сожалению, у меня не хватает времени.

+0

Где вы задаете $ profile_name? – streetparade

+0

Я установил его в разделе php в верхней части страницы. $ profile_name = "{$ user-> screen_name}"; {$ user-> screen_name} устанавливается с использованием кода Twitter Oauth, также расположенного в верхней части страницы. – John

ответ

1

Во-первых, вы должны бежать $ _POST вы вставив прямо к запросу:

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

Как говорит Эрик, не выбрасывайте из окна самых полезных предупреждений - наиболее вероятно, ответ тогда появится правая сторона.

Но я не совсем уверен в том, как работает ваш mashup. Это может стать намного проще, если вы просто сделаете все, что есть внутри самого php, вообще не указывая javascript. Вы также можете проверить обратные вызовы OAuth - должны предоставить вам идентификатор Twitter или имя пользователя.

+0

Ваше предложение: «Это может стать намного проще, если вы просто сделаете все, что есть внутри самого php». - Работал! Не знаю, почему я никогда об этом не думал. Урок выучен. Большое спасибо Микуласу! – John

0

Там нет ничего плохого:

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

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

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

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

, и это поможет вам выявить множество ошибок.

+0

Неопределенный индекс: имя_пользователя .... Появляется строка 14. Это $ user_name = $ _POST ['user_name']; Моя часть jQuery должна кормить, но это не похоже. Если я изменяю $ user_name = $ _POST ['user_name']; to $ user_name = 'dave'; и используя код Mikulas, он работает отлично. Я думаю, проблема связана с jQuery. – John

+0

убедитесь, что ваш элемент формы имеет имя 'user_name' - это мое предположение о проблеме. – Erik