GET и XMLHttpRequest - PullRequest
       7

GET и XMLHttpRequest

1 голос
/ 19 марта 2010

У меня есть XMLHttpRequest. Запрос передает параметр в код моего php-сервера в / var / www. Но я не могу извлечь параметр обратно на стороне сервера. ниже я вставил оба кода:

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

это не дает требуемого результата ... хотя закомментированный оператор, в котором переменной явно присваивается значение аргумента, работает ... он предупреждает меня о необходимом выводе ... но каким-то образом параметр метода GET не достигнув моего php или вот как я думаю .... пожалуйста помогите ....

1 Ответ

2 голосов
/ 19 марта 2010

Если u равно http://start.ubuntu.com/9.10 при написании, URL искажается, потому что : является запрещенным символом в URL.

Вам нужно экранировать URL, используя encodeURIComponent() в Javascript и urldecode() обратно в PHP. Документы здесь и здесь .

Часть JavaScript будет выглядеть так:

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

и часть PHP:

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

Ваш запрос MySQL также уязвим для SQL-инъекции , что очень опасно. Вы должны хотя бы санировать $q, используя mysql_real_escape_string(). См. этот вопрос для обзора проблемы и возможных решений.

...