Столкнулся с проблемой: не могу обработать несколько чекбоксов.
И так, я создаю новость на сайте, прикрепляю туда изображения, максимум 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
а значений много. Допустим будет:
Если писать обработчик то в $_POST['hide_phone'] ведь будет всего одно значение, а не массив.
А мне нужно там 5, 7, 8
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 на линии какой-то там в конфиг файле
Какая-то там линия:
И главное вылает всегда, когда ставлю чекбокс/чекбоксы на удаление картинок.
Мой обработчик:
На каком-то сайте писали, это может быть связано с тем, что переменная $index в SQL запросе содержит не строчку, а массив. Есть у кого какие идеи как справить ?
Теперь вылетает
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)и ровным счетом ничего не изменится.
{
}