![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
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
----------------
No.2ベストアンサー
- 回答日時:
PHP部分だけざっと書き直してみました。
UPDATEをSELECTより先にしなければならないことは自明ですね。<?php
include 'db_pdo_conn.php';
if (isset($_POST['result'])) {
__$sql = 'UPDATE sortable SET no = ? WHERE id = ?';
__$stmt = $pdo->prepare($sql);
__foreach (explode(',', $_POST['result']) as $i => $id) {
____$stmt->execute(array(++$i, $id));
__}
}
$sql = 'SELECT id, name, price, no FROM sortable ORDER BY no';
foreach ($conn->query($sql) as $row) {
__vprintf('<li class="ns" id="%s">%s %s %s</li>' . PHP_EOL, $row);
}
?>
いつも貴重なアドバイスをいただき本当にありがとうございます。
おかげさまで無事解決できました。
explode(',', $_POST['result']) as $i => $id
がミソになりますね。
ご回答をいただけてなければ、この書き方は全く思いつかなかったと思います。
No.3
- 回答日時:
訂正
$pdo->prepare($sql);
↓
$conn->prepare($sql);
No.1
- 回答日時:
$_GET, $_POSTなどを受け取る際の処理
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea
PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71
使いやすいPDOの継承クラス
http://qiita.com/mpyw/items/f4369c87b689cb6ac35e
とりあえず、PDOで例外をスローさせる設定にしてください。原因が分かるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
syntax errorの原因について
-
アラートでyes noを作りたいです。
-
checkboxクリック時、SQLを実行...
-
mySQLで結果が無いときの処理
-
mysqlテーブルから一つレコード...
-
mysqlから取得した配列をカンマ...
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
MySQLでデータベースにデータin...
-
SQL文の実行に失敗しました???
-
ResultSetインターフェイスでの...
-
VBAをつかってクエリの情報を抽...
-
codeigniter 複数モデルでトラ...
-
SQLで返り値が空とでる
-
SELECT COUNTで取得した結果の表示
-
JAVA SQLServerException 列名 ...
-
ボタンのonclick時における関数...
-
例外処理
-
<VB.NET>INSERT文でDBにデータ...
-
VBA ACCESS SQL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
エクセルVBAについて
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
checkboxクリック時、SQLを実行...
-
dbに登録したデータをphpのプル...
-
PHP+MySQLでの配列のinsert文に...
-
pg_queryの結果を2回とりだす...
-
検索結果($_POST)が2ページ目...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
sortable ギブアップです…助け...
-
PEAR::DBで取得したデータで処...
-
DBのデータを表示させたい
-
データベース表示結果のデザイン
-
PHP 勤務時間の合計を出したい
-
mySQLからデータを取り出す
-
PHP と MySQL でテーブルの行数...
-
連想配列、オブジェクト配列の...
おすすめ情報