2010-04-26 3 views
0

J'ai essayé cela pendant un bon moment et j'ai besoin d'aide. Fondamentalement, j'ai un fichier PHP qui interroge la base de données et je veux changer la requête en fonction d'un nom d'utilisateur connecté.Modifier dynamiquement la requête MYSQL dans un fichier PHP en utilisant jQuery .post?

Ce qui se passe sur mon site, c'est qu'un utilisateur se connecte avec Twitter Oauth et je peux afficher leurs coordonnées (nom d'utilisateur twitter, etc.). J'ai une base de données à laquelle l'utilisateur a ajouté des informations et je voudrais que l'utilisateur se connecte avec Twitter Oauth, je pourrais utiliser jQuery pour prendre le nom d'utilisateur et mettre à jour la requête mysql pour afficher uniquement les résultats user_name = ce nom d'utilisateur particulier.

Au moment où la requête MySQL est:

"SELECT * FROM markers WHERE user_name = 'dave'" 

J'ai essayé quelque chose comme:

"SELECT * FROM markers WHERE user_name = '$user_name'" 

Et ailleurs dans le fichier PHP je $ user_name = $ _POST [ 'user_name' ] ;. Dans un fichier séparé (celui dans lequel l'utilisateur est redirigé après qu'ils ouvrent une session via Twitter) J'ai quelques jQuery comme ceci:

$(document).ready(function(){ 
$.post('phpsqlinfo_resultb.php',{user_name:"<?PHP echo $profile_name?>"})}); 

$ profile_name a été défini plus haut sur cette page.

Je sais que je fais clairement quelque chose de mal, j'apprends encore. Existe-t-il un moyen de réaliser ce que je veux en utilisant jQuery pour publier le nom d'utilisateur des utilisateurs dans le fichier PHP pour modifier la requête mysql afin d'afficher uniquement les résultats liés à l'utilisateur connecté. J'ai inclus le fichier PHP avec la requête ci-dessous :

<?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; 
?> 

Ceci est à utiliser avec un google map mashup im essayant de faire. Merci beaucoup si vous pouvez m'aider. Si ma question n'est pas assez claire, veuillez dire et j'essaierai de clarifier pour vous. Je suis sûr que c'est une solution simple, je suis juste relativement inexpérimenté pour le faire. Été à cela pendant deux jours et je suis à court de temps malheureusement.

+0

Où définissez-vous $ profile_name? – streetparade

+0

Je l'ai mis dans une section de php en haut de la page. $ profile_name = "{$ user-> screen_name}"; {$ user-> screen_name} est défini à l'aide du code php Twitter Oauth également situé en haut de la page. – John

Répondre

1

Au début, vous devez échapper à $ _POST vous insérez directement à la requête:

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

Comme Erik suggère, ne pas jeter par la fenêtre les avertissements les plus utiles - très probablement la réponse va apparaître juste alors.

Mais ce dont je ne suis pas sûr, c'est la façon dont fonctionne votre mashup. Cela pourrait être beaucoup plus facile si vous faites tout ce qu'il y a dans le php lui-même, en omettant tout javascript. Vous pourriez également vouloir vérifier les rappels d'OAuth - devrait te donner l'identification de twitter ou le nom d'utilisateur.

+0

Votre suggestion- "Cela pourrait être beaucoup plus facile si vous faites tout ce qu'il y a dans le php lui-même." - Travaillé! Je ne sais pas pourquoi je n'y ai jamais pensé. Leçon apprise. Merci beaucoup Mikulas! – John

0

Il n'y a rien de mal avec:

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

Autre étant alors mûr pour injection SQL - il devrait fonctionner. Vous pouvez essayer votre requête directement sur la base de données et voir si les résultats sont ce que vous attendez.

Je vous recommande également d'activer le signalement des erreurs pendant le développement. Ajoutez les lignes suivantes en haut de votre document:

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

et il vous aidera à découvrir de nombreuses erreurs.

+0

Indéfini: nom_utilisateur .... La ligne 14 arrive. C'est $ user_name = $ _POST ['user_name']; Mon morceau de jQuery devrait nourrir ça mais ça ne semble pas le faire. Si je change $ user_name = $ _POST ['user_name']; à $ user_name = 'dave'; et en utilisant le code fourni par Mikulas cela fonctionne bien. Le problème est avec le jQuery je pense. – John

+0

assurez-vous que votre élément de formulaire est nommé 'nom_utilisateur' - c'est ma supposition quant au problème. – Erik

Questions connexes