2010-03-19 4 views
1

J'ai une requête XMLHttpRequest. La requête transmet un paramètre à mon code serveur php dans/var/www. Mais je n'arrive pas à extraire le paramètre du côté serveur. Ci-dessous j'ai collé à la fois les codes:GET et XMLHttpRequest

javascript:

function getUsers(u) 
{ 
alert(u);//here u is 'http://start.ubuntu.com/9.10' 
xmlhttp=new XMLHttpRequest(); 
var url="http://localhost/servercode.php"+"?q="+u; 

xmlhttp.onreadystatechange= useHttpResponse; 
xmlhttp.open("GET",url,true); 
xmlhttp.send(null); 
} 

function useHttpResponse() 
{ 

if (xmlhttp.readyState==4) 
{ 
var response = eval('('+xmlhttp.responseText+')'); 
    for(i=0;i<response.Users.length;i++) 
     alert(response.Users[i].UserId); 

} 
} 

servercode.php:

<?php 
$q=$_GET["q"]; 
//$q="http://start.ubuntu.com/9.10"; 
$con=mysql_connect("localhost","root","blaze"); 
if(!$con) 
{die('could not connect to database'.mysql.error()); 
} 
mysql_select_db("BLAZE",$con) or die("No such Db"); 
$result=mysql_query("SELECT * FROM USERURL WHERE URL='$q'"); 

if($result == null) 
echo 'nobody online'; 
else 
    { 
    header('Content-type: text/html'); 
    echo "{\"Users\":["; 
    while($row=mysql_fetch_array($result)) 
    { 
    echo '{"UserId":"'.$row[UsrID].'"},'; 
    } 
    echo "]}"; 
    } 
mysql_close($con); 
?> 

ce ne donne pas le résultat recherché ... bien que la déclaration a commenté, où la variable est affecté explicitement la valeur de l'argument fonctionne ... il m'avertit de la sortie requise ... mais en quelque sorte le paramètre de la méthode GET n'atteint pas mon php ou c'est comment je pense qu'il est .... pls aider ....

+0

Vous devriez utiliser le formatage pour la partie code de vos questions en suivant les conventions ici: http://stackoverflow.com/editing-help – jessegavin

+0

Utilisez firebug pour voir exactement quelle URL est envoyée par xmlhttprequest. Ma conjecture est que l'URL que vous avez comme valeur de chaîne de requête est codée par URL d'une manière qui vous gâche. –

Répondre

2

Si u est http://start.ubuntu.com/9.10 alors que vous écrivez, l'URL est tronquée car : est un caractère interdit dans une URL.

Vous devez échapper à l'URL en utilisant encodeURIComponent() en Javascript, et urldecode() en PHP. Docs here et here.

La partie JavaScript ressemblerait donc:

var url="http://localhost/servercode.php"+"?q="+encodeURIComponent(u); 

et la partie PHP:

$q=urldecode($_GET["q"]); 

votre requête mySQL est également vulnérable à une injection SQL, ce qui est très dangereux. Vous devriez au moins désinfecter $q en utilisant mysql_real_escape_string(). Voir this question pour un aperçu du problème et des solutions possibles.

+0

j'ai changé les déclarations comme vous l'avez dit ... mais je reçois toujours une sortie .... Je vais à travers la partie injection sql .... mais en changeant ces 2 déclarations est censé me donner la sortie droite? - Neethusha il ya 0 secondes – Neethusha

+0

@Neethusha vous devez faire des sorties de test de '$ _GET [" u "]' sur le côté PHP et regardez ce qu'elles contiennent. –

+0

j'ai fait écho $ q comme la deuxième déclaration, dans localhost ... c'était la sortie vide .. – Neethusha