Запрос не работает с усилителем внутри URL - PullRequest
1 голос
/ 15 октября 2011

Позвольте мне объяснить это как можно лучше.

У меня есть файл PHP с именем funcs.php, в котором находится именно этот код PHP:

$q = $_GET["q"];

$sql = "SELECT * FROM bl_zrify WHERE Name = '".$q."'";

$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
  {

  if ($row['State'] == '') {
    $SchoolState = 'Unknown';
  }
  else if ($row['State'] == 'AL') {
    $SchoolState = 'Alabama';
  } 
  else if ($row['State'] == 'AK') {
    $SchoolState = 'Alaska';
  } 
  else if ($row['State'] == 'AZ') {
    $SchoolState = 'Arizona';
  }
  else if ($row['State'] == 'AR') {
    $SchoolState = 'Arkansas';
  }

  print 'This school is in';
  print $SchoolState;
  }

Когда я звоню в своем браузере:

url example => http://www.domain.com/funcs.php?q=ABRAHAM BALDWIN СЕЛЬСКОХОЗЯЙСТВЕННЫЙ КОЛЛЕДЖ

Обычно он работает и возвращается => Эта школа в Алабаме

Но когда я звоню вМой браузер, любой URL с & (&) внутри не будет работать вообще:

url example => http://www.domain.com/funcs.php?q=BRYANT & STRATTON BUSINESS INSTITUTE - BUFFALO

Iне знаю почему, но по некоторым причинам я не получаю результатов, когда в URL есть amp (&), ПОМОГИТЕ!

Ответы [ 2 ]

3 голосов
/ 15 октября 2011
funcs.php?q=BRYANT & STRATTON BUSINESS INSTITUTE - BUFFALO

Вы передаете две переменные. Сделайте var_dump($_GET); и вы увидите.

Вы, вероятно, имели в виду:

funcs.php?q=BRYANT+%26+STRATTON+BUSINESS+INSTITUTE+-+BUFFALO

Чтобы передать значения параметров в URL-адресах, им нужна правильная кодировка. Также называется url-кодированием. & - это специальный символ, который необходимо записать как %26, пробел также является специальным символом, который можно записать как + или %2b. Также называется процентным или триплетным кодированием.

Функция в PHP, которая делает это: urlencode Документы .

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

См .: Лучший способ остановить SQL-инъекцию в PHP

1 голос
/ 15 октября 2011

'&' разделяет параметры URL. Ваш второй запрос имеет параметр q, который равен "BRYANT", и параметр STRATTON BUSINESS…, который не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...