jqueryソート可能な機能を私のウェブサイトに組み込み、データベース内の位置を保存することで多少の頭痛を与えている...私は3日間これを戦ってきた今、私はこの仕事を適切にすることができません。jqueryソート可能データベースへの保存が正常に動作しない
それは、データベースの位置を保存していますが、期待する順序や位置ではありません。つまり、アイテムをポジション0からポジション1に移動すると、ポジションはdb内の別の順序で保存されます。ライブバージョンhereをチェックしてください。ここで
は...私のコードですindex.phpファイル:
<div id="container">
<?php
require_once 'conn.php';
$q = ' SELECT * FROM items WHERE groupId = 3 ORDER BY position ';
$result = mysqli_query($db, $q);
if ($result->num_rows > 0) {
while($items = $result->fetch_assoc()) {
?>
<div id='sort_<?php echo$items['position'] ?>' class='items'>
<span>☰</span> <?php echo$items['description'] ?>
</div>
<?php
}
}
?>
</div>
js.jsファイル:
$("#container").sortable({
opacity: 0.325,
tolerance: 'pointer',
cursor: 'move',
update: function(event, ui) {
var itId = 3;
var post = $(this).sortable('serialize');
$.ajax({
type: 'POST',
url: 'save.php',
data: {positions: post, id: itId },
dataType: 'json',
cache: false,
success: function(output) {
// console.log('success -> ' + output);
},
error: function(output) {
// console.log('fail -> ' + output);
}
});
}
});
$("#container").disableSelection();
save.phpファイル:
require_once('conn.php');
$itId = $_POST['id'];
$orderArr = $_POST['positions'];
$arr = array();
$orderArr = parse_str($orderArr, $arr);
$combine = implode(', ', $arr['sort']);
$getIds = "SELECT id FROM items WHERE groupId = '$itId' ";
$result = mysqli_query($db, $getIds);
foreach($arr['sort'] as $a) {
$row = $result->fetch_assoc();
$sql = " UPDATE items
SET position = '$a'
WHERE id = '{$row['id']}' ";
mysqli_query($db, $sql);
}
echo json_encode(($arr['sort']));
誰かが間違っている場所を指摘してくれるの? この?
ありがとうございます。
セルジュ
あなたのコードはに対して脆弱である[** SQLインジェクション**] (https://en.wikipedia.org/wiki/SQL_injection)の攻撃です。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この記事**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には、いくつかの良い例があります。 –
http://api.jqueryui http://api.jqueryui.com/sortable/#method-serializeまたは( "toArray")** serialize **関数を参照してください(キーをシリアライズしてください)。 com/sortable /#method-toArray。 SQLインジェクションにも注意してください。 – Richard
@AlexHowansky私はアレックスを理解しています。私はちょうどセキュリティに移る前にこれを動作させようとしています。この例以外のデータベースには何もありません。 – Sergio