переменная $ не работает в SELECT

1

Почему следующий оператор SELECT должен возвращать инструкцию else? и пустое эхо $ широты и $ долготы

$latitude = $_GET["lat"];
$longitude = $_GET["long"];
$pScan="";
$sql = "SELECT id, agent_name, address, url, latitude, longitude FROM enabled_boards WHERE latitude='$latitude' AND longitude='$longitude' ";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $id=$row["id"];
        $agent=$row["agent_name"];
        $address=$row["address"];
        $url=$row["url"];
        $latitude=$row["latitude"];
        $longitude=$row["longitude"];
        $pScan.='  <div id="wrapper">
        <a href="propertyDisp.php?id=' . $id . '" target="_self" >
  <div id="agentIdent"><img src="http://arpad.property/logos/' . $agent . '.jpg"></div>
  <div id="propertyIdent"><h3 align="right">' . $address . '</h3></div>
    </div></a>'; 

    }
}else{
$pScan="No results found,<br>please ensure the property is Arpad Enabled.";
}

Принимая во внимание, что значения SELECT для $ latitude и $ longitude с фактическими значениями из формы (lat & long) успешно заменяют правильные значения $ latitude и $ longitude, доказывая, что значения в форме (lat & long) корректно анализируются через 2 переменные.

Использование $ latitude & $ longitude в выражении SELECT ломает его, и я не понимаю, почему.

Спасибо за вашу помощь. Ян.

ФОРМА ДЕТАЛИ

 <form action="scanBoard.php" method="post" name="scanBoard" >
      <input type="text" id="lat" value="52.562292" /><br>
       <input type="text" id="long" value="-0.660871" /><br>
     <div id="boardBtn" class="blink"><input class="button" type="image" src="img/boardBtn.png" ></div></form>

* Значения были добавлены к входам для тестирования и будут удалены после устранения этой проблемы.

ИСПОЛЬЗОВАНИЕ $ latitude AND $ longitude в инструкции SELECT.

Изображение 174551

ИСПОЛЬЗОВАНИЕ 52.562292 И -0.660871 в инструкции SELECT.

Изображение 174551

  • 0
    Как примечание, у вас не должно быть данных от пользователя или доступных для пользователя, которые могут входить непосредственно в запрос без тщательной очистки ввода. Приведенный выше код является довольно серьезным случаем внедрения SQL.
  • 0
    Разместите форму часть тоже, где вы получали lat long значений
Показать ещё 1 комментарий
Теги:
mysqli

2 ответа

1
Лучший ответ

Всегда создавайте запрос для предотвращения sql injection Имя столбца и имя таблицы находятся в backtick.

 $sql = "SELECT 'id', 'agent_name', 'address', 'url', 'latitude', 'longitude' FROM 'enabled_boards' WHERE 'latitude'='".$latitude."' AND 'longitude'='".$longitude."' ";

И всегда используйте mysqli_connect_errno чтобы проверить ошибку в запросе

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

обновленный

Вы forget form name в input field

<input type="text" id="lat" value="52.562292" />
<input type="text" id="long" value="-0.660871" />

Это было бы

 <input type="text" id="lat" value="52.562292" name="lat" />
 <input type="text" id="long" value="-0.660871" name="long" />

И вместо метода GET

$latitude = $_GET["lat"];
$longitude = $_GET["long"];

Используйте метод POST, потому что вы используете method="post" так что это будет

$latitude = $_POST["lat"];
$longitude = $_POST["long"];
  • 0
    Спасибо, Сати, у меня тоже есть заявление If, но я никогда не публиковал его, так как это не проблема, я попробовал ваше решение, но все равно не радуюсь :-(
  • 0
    какую ошибку вы получили, используя этот запрос ??
Показать ещё 14 комментариев
1

Ваш запрос должен быть

$sql = "SELECT id, agent_name, address, url, latitude, longitude FROM enabled_boards WHERE latitude='" . $latitude. "' AND longitude='". $longitude ."'";
  • 0
    Я попробовал ваше решение, но все равно не радости :-(
  • 0
    Я надеюсь, что исправление запроса вместе с ответом, предложенным @saty для использования методов $ _POST, сработали для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню