※ ChatGPTを利用し、要約された質問です(原文:sortableを使用したデータのUPDATE)
sortableを使用したデータのUPDATE方法についての質問
このQ&Aのポイント
jQueryの「sortable」プラグインを使用して、データベースの特定のカラムを並び替える方法について質問です。
データを並び替えた後、シリアライズした配列を使ってデータベースをupdateする際に、正常にデータを更新できない問題が発生しています。
foreachの処理に問題があると感じますが、どのように組み立てれば正常にデータベースにデータを投げることができるでしょうか?
お世話になります。
jQueryの「 sortable 」というプラグインを使用して、データベースから
「id」、「name」、「price」、「no」というデータをselectして、ブラウザで並び順を変更後に
updateするという流れですが、最終的にシリアライズした配列をDBへupdateできません。
「id」は連番にしてユニークな値が入っていて、「no」には並び順の値が半角数字で入れてあります。
シリアライズした配列のデータは、ブラウザで確認すると問題ありません。
恐らくupdateの際のforeachの処理が上手く行ってないように感じますが、
正常に「id」と「no」の整合性を取ってDBに投げるには、どの様に組み立てたら良いのでしょうか?
以下が主要箇所のソースです。
-------------------------------------------------------
<script src="js/jquery-1.9.1.js"></script>
<script src="js/jquery-ui-1.10.3.custom.js"></script>
<script>
$(function() {
$(".sortable").sortable();
$(".sortable").disableSelection();
$("#submit").click(function() {
var result = $(".sortable").sortable("toArray");
$("#result").val(result);
$("form").submit();
});
});
</script>
<form action="index.php" method="post">
<ul class="sortable">
<?php
// DB接続
include "db_pdo_conn.php";
$sql1 = "SELECT id, name, price, no FROM sortable ORDER BY no";
$stmt = $conn->prepare($sql1);
$stmt->execute();
foreach ($stmt as $row) {
$id = $row["id"];
$name = $row["name"];
$price = $row["price"];
$no = $row["no"];
echo <<<li
<li class="ns" id="$id">{$name} {$price} {$no}</li>
li;
}
$result = $_POST['result'];
$result_array = explode(',', $result);
//シリアライズした$result_arrayを表示
print_r(serialize($result_array));
//データが送信されたときに変更する
if (count($_POST)) {
//nomを「 1 」から振り替える
$nom = 1;
foreach ($result_array as $id){
$nom++;
$sql2 = "UPDATE sortable SET no='$nom' WHERE id='$id'";
$stmt = $conn->prepare($sql2);
$stmt->execute(array($no_comp, $id_comp));
}
}
?>
</ul>
<input type="hidden" id="result" name="result" />
<button id="submit">submit</button>
</form>
-------------------------------------------------------
3日程試行錯誤しておりますが、解決できる糸口が見つからないので
ご存知の方がいらっしゃいましたら、ご教示の程どうぞよろしくお願い申し上げます。
----------------
▼スペック
PHP 5.3.3
MySQL 5.0.95
----------------
お礼
いつも貴重なアドバイスをいただき本当にありがとうございます。 おかげさまで無事解決できました。 explode(',', $_POST['result']) as $i => $id がミソになりますね。 ご回答をいただけてなければ、この書き方は全く思いつかなかったと思います。