Member 14315552 Ответов: 2

Php сортировка заголовка SQL запрос


У меня есть приведенный ниже код, но запрос mysql продолжает выдавать ошибку, я пытаюсь использовать столбец заголовка для сортировки по возрастанию/убыванию, но не работает.

Дает следующее сообщение:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с " в строке 1


любая помощь была бы очень кстати.

Что я уже пробовал:

<pre lang="PHP">
<pre>function process() {
	global $DatabaseServer, $DatabaseUser, $DatabasePswd, $DatabaseName, $AgentPin;
	$cn=mysqli_connect($DatabaseServer, $DatabaseUser, $DatabasePswd, $DatabaseName);
	$sql = "SELECT pin.username, pendingindex.* FROM pin join sorttest ON pin.AgentID = sorttest.AgentID join pendingindex ON sorttest.pendreckey = pendingindex.pendreckey ORDER BY" . $sort . " " . $sort_order;


// sets id as default sort (you can set something else than id)
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'pendreckey';

// define sort order
$sort_order = 'asc';
if(isset($_GET['sort_by'])) {
 if($_GET['sort_by'] == 'asc') {
  $sort_order = 'desc';
 } else {
  $sort_order = 'asc';
 }
}

// query table
$query  = mysqli_query($cn,$sql) or die(mysqli_error($cn));
$keys   = mysqli_fetch_array($query, MYSQLI_ASSOC);

// html table
echo "<table border='1'>";

// print out table columns
echo "<tr>";
foreach(array_keys($keys) as $key) {
 switch($sort) {
  case $key :
   $order_by = $key;
   break;
 }

 if($sort==$key) {
  echo "<td bgcolor=white><a href='?sort=$key&sort_by=" . $sort_order . "'>$key</a></td>";
 } else {
  echo "<td bgcolor=white><a href='?sort=$key&sort_by=" . $sort_order . "'>$key</a></td>";
 }
}

echo "</tr>";

// print out table contents
$query  = mysqli_query($cn,$sql);
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
 echo "<tr>";
 foreach($row as $rows) {
  echo "<td>" . $rows . "</td>";
 }
 echo "</tr>";
}

echo "</table>";
  
echo '<br><br><br>';
    }

Richard Deeming

YourPage.php?sort=%20pendreckey;DELETE%20FROM%20pin;--


Ваш код уязвим для SQL-инъекция[^].

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
PHP: SQL-инъекция - руководство пользователя[^]

К сожалению, вы не можете указать порядок сортировки в параметре. Вместо этого вам нужно будет убедиться, что $sort значение-это точное совпадение допустимого выражения сортировки перед добавлением его в запрос.

Вам также не хватает пространства между ними ORDER BY и колонка сортировки.

2 Ответов

Рейтинг:
2

Member 14315552

Поэтому, когда я делаю это и нажимаю на заголовок, он выводит меня на экран входа в систему, а не просто обновляет данные в таблице.

Есть идеи?


Richard MacCutchan

Пожалуйста, не публикуйте ответы/вопросы в качестве решений. Используйте кнопку "Задать вопрос или комментарий" под сообщением, на которое вы отвечаете.

Рейтинг:
0

MadMyche

Я не очень хорошо разбираюсь в PHP или MySql, но я бы попробовал определить $сортировать и $порядок сортировки прежде чем вы определите $язык SQL а это зависит от них самих.