Webフォームのチェックボックスを使用してギャラリーから画像を選択し、ファイルシステムとデータベースから画像を削除できる管理ページを設定しようとしています。私が抱えている問題は、データベースを更新する方法です。
モデルでわかるように、現在、各ファイルが削除された後にデータベースを更新しています。削除される前の10枚の画像の後に画像23が終了するため、削除された数のカウントを保持し、それを「古い」注文番号から差し引くだけですアップは画像 23-10 = 13) です。これが機能しないいくつかのブレークケースがあるかどうかはわかりません。
うまくいっているようですが、ギャラリーにたくさんの写真がある場合、データベースの注文 ID が 35 以降に更新されないことに気付きました。時間の?すべての注文IDを保存して一度に更新する方法はありますか、それともデータベースに接続するたびに正しい方法がありますか(それは悪い習慣のように思えるので疑問です)?
ウェブフォーム:
<form action="http://localhost/admin/galleryRemove" method="post" enctype="multipart/form-data">
<input type="checkbox" name="orderID[]" value="1" />
<img src="http://localhost/img/galleries/001/img01.jpg" alt="1" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="2" />
<img src="http://localhost/img/galleries/001/img02.jpg" alt="2" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="3" />
<img src="http://localhost/img/galleries/001/img03.jpg" alt="3" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="4" />
<img src="http://localhost/img/galleries/001/img04.jpg" alt="4" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="5" />
<img src="http://localhost/img/galleries/001/img05.jpg" alt="5" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="6" />
<img src="http://localhost/img/galleries/001/img06.jpg" alt="6" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="7" />
<img src="http://localhost/img/galleries/001/img07.jpg" alt="7" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="8" />
<img src="http://localhost/img/galleries/001/img08.jpg" alt="8" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="9" />
<img src="http://localhost/img/galleries/001/img09.jpg" alt="9" class="imgCheck" />
<input type="checkbox" name="orderID[]" value="10" />
<img src="http://localhost/img/galleries/001/img10.jpg" alt="10" class="imgCheck" />
<input type="hidden" name="galleryID" value="1" />
<input type="submit" name="remove" value="Remove" /> This will remove all images checked.
</form>
フォーム投稿を処理するための CI モデル。
// Start of removing an image functions
function imgRemove()
{
$cnt = 0;
$id = $this->input->post('galleryID');
foreach ($_POST['orderID'] as $order)
{
$order = $order - $cnt;
// get the picture name
$this->db->select('*');
$this->db->where("gallery_id = '$id'");
$this->db->where("`order` = '$order'");
$this->db->from('gallery');
$q = $this->db->get();
if ($q->num_rows != 0)
{
$result = $q->result();
$picture = $result[0]->picture;
// Get the path and then unlink(delete) the file and it's thumbnail
$imgPath = $this->imgPath($id);
$img = $imgPath . $picture;
$thumbImg = $imgPath . 'thumbs/thumb' . $picture;
if (file_exists($img))
{
unlink($img);
}
if (file_exists($thumbImg))
{
unlink($thumbImg);
}
// Remove the line from the database
$this->db->where('gallery_id', $id);
$this->db->where('order', $order);
$this->db->delete('gallery');
// Reorder all images after the deleted one.
$this->imgOrderCheckRemove($id, $order);
$cnt++;
}
}
}
データベース テーブルのレイアウト:
var_dump($images); の結果 update_batch の直前。
array(3) {
[2]=>
array(5) {
["prim_id"]=>
string(1) "8"
["gallery_id"]=>
string(1) "2"
["picture"]=>
string(21) "002.jpg"
["order"]=>
string(1) "2"
["alt_text"]=>
string(1) "2"
}
[10]=>
array(5) {
["prim_id"]=>
string(2) "16"
["gallery_id"]=>
string(1) "2"
["picture"]=>
string(18) "010.jpg"
["order"]=>
string(2) "10"
["alt_text"]=>
string(2) "10"
}
[13]=>
array(5) {
["prim_id"]=>
string(2) "19"
["gallery_id"]=>
string(1) "2"
["picture"]=>
string(15) "013.jpg"
["order"]=>
string(2) "13"
["alt_text"]=>
string(2) "13"
}
}