[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: чекбокс в списке
NitroGenerate
Всем доброго времени суток.
Столкнулся с проблемой: не могу обработать несколько чекбоксов.
И так, я создаю новость на сайте, прикрепляю туда изображения, максимум 5 штук.
загрузил новость, изображения тоже, все работает и показывается.
Затем написал скрипт редактирования.

$photo=mysql_query("SELECT id, photo_name FROM photo WHERE id_message='".$edit['id']."'"); cq();
if(@mysql_num_rows($photo)){
echo "<br /><br /><div class=\"lc\"></div><div class=\"rc\">";
while($list_photo=mysql_fetch_assoc($photo)){
$isize=getimagesize($h."/".$u."/upload/small/".$list_photo['photo_name']);
echo "<a title=\"".$edit['title']."\" href=\"".$h."/".$u."/normal/".$list_photo['photo_name']."\" rel=\"thumbnail\"><img alt=\"".$edit['title']."\" src=\"".$h."/".$u."/upload/small/".$list_photo['photo_name']."\" width=\"".$isize[0]."\" height=\"".$isize[1]."\" /></a>";
echo "<input type="checkbox" name="del_images" value="".$list_photo['id']."" />Удалить<br />";
}
echo "</div><div class=\"clear\"></div>";

И я собственно уткнулся в тупик.
Допустим к новости есть 4 фотки.
Я чекаю первую, третью и четвертую.
В переменной del_images передаваемой скрипту, не могут быть несколько значений. Получается что скрипт может обработать только 1 мой чек.
Делать 5 разных чекбоксов и обрабатывать отдельно каждый это не есть хорошо. Так как может быть и вовсе не 5 фоток, а 10, или 100.
Сейчас меня заносит в сторону массивов... Но не знаю с чего начать реализовывать их.



Спустя 11 минут, 40 секунд (12.08.2011 - 14:37) sebastjan написал(а):
Наверное с масивом будет проще.
В массив записать отмеченные ченкбоксы и обработать все разом.
Хотя чего их записывать в массив и так по посту они в массиве.
Так что просто перебрать массив и обработать

Спустя 47 минут, 36 секунд (12.08.2011 - 15:25) NitroGenerate написал(а):
В массиве то да, но переменная то одна
del_images
а значений много. Допустим будет:

<input type="checkbox" name="del_images" value="5" checked>
<input
type="checkbox" name="del_images" value="6" >
<input
type="checkbox" name="del_images" value="7" checked>
<input
type="checkbox" name="del_images" value="8" checked>

Если писать обработчик то в $_POST['hide_phone'] ведь будет всего одно значение, а не массив.
А мне нужно там 5, 7, 8

Спустя 1 час, 30 минут, 43 секунды (12.08.2011 - 16:56) grafnet написал(а):
<input name='del_images[]' type='checkbox' value='1'>
Как вариант, обраборчик:
$query = "(" ;
foreach($del_images as $val) $query.=
"$val,";
$query = substr($query, 0, strlen
($query) - 1 ). ")" ;
$query = "DELETE FROM photo
WHERE id IN "
.$query;
mysql_query($query);

Спустя 2 часа, 43 минуты, 3 секунды (12.08.2011 - 19:39) sebastjan написал(а):
или так.
переменная одна но она элемент массива.
Пример не мой.

<form method='post'>
<
input type='checkbox' name='chb[0]' value="white">Белый<br>
<
input type='checkbox' name='chb[1]' value="green">Зеленый<br>
<
input type='checkbox' name='chb[2]' value="blue">Синий<br>
<
input type='checkbox' name='chb[3]' value="red">Красный<br>
<
input type='checkbox' name='chb[4]' value="black">Черный<br>
<
input type='submit' name="Submit" value='Отправить'>
</
form>
<?php
if (!empty($_POST['chb']))
{
$chb = $_POST['chb'];
foreach($chb as $index => $go)
{
echo $index." - > ".$go."<br>";
};
};

Спустя 2 дня, 13 часов, 19 минут, 15 секунд (15.08.2011 - 08:58) NitroGenerate написал(а):
Спасибо sebastjan , спасибо grafnet.
Разобрался. =)
Вот что получилось.
$photo=mysql_query("SELECT id, photo_name FROM photo WHERE id_message='".$edit['id']."'"); cq(); 
if(@mysql_num_rows($photo)){
echo "<br /><br /><div class=\"lc\"></div><div class=\"rc\">";
while($list_photo=mysql_fetch_assoc($photo)){
$isize=getimagesize($h."/".$u."/upload/small/".$list_photo['photo_name']);
echo "<a title=\"".$edit['title']."\" href=\"".$h."/".$u."/normal/".$list_photo['photo_name']."\" rel=\"thumbnail\"><img alt=\"".$edit['title']."\" src=\"".$h."/".$u."/upload/small/".$list_photo['photo_name']."\" width=\"".$isize[0]."\" height=\"".$isize[1]."\" /></a>";
echo "<input type=\"checkbox\" name=\"del_images[".$list_photo['id']."]\" value=\"1\" />Удалить<br />";
}
echo "</div><div class=\"clear\"></div>";



И обработчик:

if (!empty($_POST['del_images']))
{
$chb = $_POST['del_images'];
foreach($chb as $index => $go)
{
mysql_query("DELETE FROM photo WHERE id=".$index."");
};
};

Спустя 28 дней, 5 часов, 15 минут, 46 секунд (13.09.2011 - 14:14) NitroGenerate написал(а):
И так, продолжаем тему...
Теперь вылетает
Notice: Array to string conversion in /var/www на линии какой-то там в конфиг файле
Какая-то там линия:
function safe_request($arr,$pat){
if(is_array($arr)){
foreach($arr as $n=>$v){
if(is_array($n))safe_request($n);
else{
if(is_utf8($arr[$n]))$arr[$n]=trim($arr[$n]); // Какая-то там линия
else $arr[$n]=cp1259_to_utf8(trim($arr[$n]));
foreach($pat as $value){$arr[$n]=preg_replace("/$value/imu","",$arr[$n]);}
}}}}

И главное вылает всегда, когда ставлю чекбокс/чекбоксы на удаление картинок.
Мой обработчик:


if (!empty($_POST['del_images']))
{
$del_mas = $_POST['del_images'];
foreach($del_mas as $index => $go)
{
$query_photo_name=mysql_query("SELECT * FROM photo WHERE id_photo =".$index."");cq();
if(mysql_num_rows($query_photo_name)){
while($photo_name=mysql_fetch_assoc($query_photo_name)){
if(file_exists($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/small/".$photo_name['photo_name']))unlink($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/small/".$photo_name['photo_name']);
if(file_exists($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/normal/".$photo_name['photo_name']))unlink($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/normal/".$photo_name['photo_name']);
}
mysql_query("DELETE FROM photo WHERE id_photo =".$index."");
}
}


На каком-то сайте писали, это может быть связано с тем, что переменная $index в SQL запросе содержит не строчку, а массив. Есть у кого какие идеи как справить ?

Спустя 31 минута, 42 секунды (13.09.2011 - 14:45) caballero написал(а):
Цитата
foreach($arr as $n=>$v){if(is_array($n))safe_request($n);

Индексом массива может быть массив? Жесть!
Если нет то к с счастью эта строка никогда не сработает иначе выкинет предупреждение на последней строчке в рекурсивном вызове
или объяви так: safe_request($arr,$pat=array()){


Цитата
if(file_exists($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/normal/".$photo_name['photo_name']))unlink($_SERVER['DOCUMENT_ROOT'].$GLOBALS['p']."/upload/normal/".$photo_name['photo_name']);   

А проверка тут нафига? делай unlink и все - нету файла ну и нет.






Спустя 1 день, 17 часов, 22 минуты, 22 секунды (15.09.2011 - 08:08) NitroGenerate написал(а):
Объявлял. Один фиг ошибки лезут...
Ах, проверка... это моя идиотская привычка, сначала проверять, потом выполнять, уж сколько раз усложнял себе скрипт этим... =(
Спасибо за замечание...

Спустя 13 минут, 56 секунд (15.09.2011 - 08:22) twin написал(а):
Как можно в такой каше чего увидеть... У ченя в подписи есть ссылка на форматтер. Хотя бы для форума оформляй код нормально, глаза все поломались.

    function safe_request($arr, $pat)
{
if(is_array($arr))
{
foreach($arr as $n => $v)
{
if(is_array($n))
{
safe_request($n);
}
else
{
if(is_utf8($arr[$n]))
$arr[$n] = trim($arr[$n]);
else
$arr[$n] = cp1259_to_utf8(trim($arr[$n]));

foreach($pat as $value)
$arr[$n] = preg_replace("/$value/imu", "", $arr[$n]);

}
}
}
}
Вот таперь сразу становится понятно... Что эту функцию можно переписать так:
    function safe_request($arr, $pat)
{

}
и ровным счетом ничего не изменится.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.