Не работает сортировка
С JQuery столкнулся недавно, самому разобраться не получается
Пытаюсь прикрутить drug and drop сортировку к сайту но при этом она работает только при отключении ajax функций обновления контента (по отдельности все работает) вот JS код:
$(document).ready(function(){
function slideout(){
setTimeout(function(){
$("#response").slideUp("slow", function () {});
}, 2000);}
$("#response").hide();
$(function() {
$("#list ul").sortable({ opacity: 0.8, cursor: 'move', update: function() {
var order = $(this).sortable("serialize") + '&update=update';
$.post("updateList.php", order, function(theResponse){
$("#response").html(theResponse);
$("#response").slideDown('slow');
slideout();
});
}
});
});
$('#glossary').change(function(){
$.ajax({
type: 'POST',
cache: false,
url: 'viewObjList.php',
data: 'glossary_type='+$('#glossary').val(),
success: function(data){
$('#put').html(data);
}
});
});
});
viewObjList.php
include_once('db_conn.php');
db_conn();
$sel_query = "SELECT * FROM ".$_POST['glossary_type']." ORDER BY sort ASC";
$sel_result = pg_query($sel_query) or die('Query error: ' . pg_last_error());
printf("
<div id='container'>
<div id='list'>
<div id='response'> </div>
<ul>");
while ($line = pg_fetch_array($sel_result, null, PGSQL_ASSOC)) {
printf ("
<li class='word_item' id='arrayorder_%s'>
<span ><img src='img/del.png' width='23' alt='Удалить /'></span>
<span ><img src='img/edit.png' width='23' alt='Редактировать' /></span>
<span>%s</span>
<div class='clear'></div>
</li>", $line['id'], $line['name']);
}
printf("
</ul>
</div>
</div>");
?>
|
"SELECT * FROM ".$_POST['glossary_type']." ORDER BY sort ASC";
Так нельзя поступать. |
Подскажите как нужно...:(
|
После FROM идет имя таблицы, и получается, что это имя вы получаете извне, более того как значение поля формы - $('#glossary').val(). Это означает, что вы открываете двери для инъекции, когда можно подбирать иные имена таблиц базы, а угадав (благо на несуществующие ваш скрипт любезно выдаст ошибку), творить с вашей базой все что угодно.
Все данные пришедшие извне нельзя подставлять непосредственно в запрос как его параметры, их необходимо экранировать или приводить к соответствующему типу. Значения полученные извне и в дальнейшем используемые в запросе как его параметры также надо экранировать. Если есть веские основания для указания имени таблицы в форме, то это должно быть только его часть, без префикса, и только на сервере формировать полное имя. А если еще это имя задается как вводимое в форму значение, то перед запросом не мешало бы удостовериться в наличие такой таблицы в базе. Что касается сортировки, то здесь вообще не понятно о чем речь. Если это задание пользовательской сортировки записей в таблице, то не видно по коду операций для таких случаев ни на клиенте, ни на сервере. |
Цитата:
|
| Часовой пояс GMT +3, время: 02:11. |