powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (mysql + php) checkbox
7 сообщений из 7, страница 1 из 1
(mysql + php) checkbox
    #37862783
Фотография Маф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача такая, мне надо сделать так, чтобы файлы удалялись и с базы(там хранится путь),и с сервера(с директории). Написал скрипт, где выполняется удаление файлов нормально с базы, но удаление с сервера не корректно, так как, если выделено несколько чекбоксов, удаляется только тот, что первый лежит в массиве. Это пол пути, а вообще мне нужно сделать так, чтобы удаление происходило с каждым файлом отдельно и выводило какой-то результат удаления. Чтобы можно было определить на каком файле произошел сбой и с этого знать с какого файла удаление остановилось. Вот вам мой скрипт. Посмотрите и подскажите, пожалуйста как осуществить корректное удаление.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
/*------------------------Запрос на вывод элементов массива таблицы $table_ph, она же 'photos'--------*/
// 
//$result_photos = mysql_query("SELECT * FROM $table_ph") or trigger_error(mysql_error()); 
$query_photos = "SELECT * FROM $table_ph"; 
$result_photos = mysql_query($query_photos, $link) or die (mysql_error());

while ($row_photos = mysql_fetch_assoc($result_photos))
    $photos_arr[] = $row_photos;
 
$smarty ->assign('photos', $photos_arr); /* для того, чтобы потом использовать переменную в tpl, её 
                                          нужно ОБЯЗАТЕЛЬНО assign и в tpl,в данном случае используем
										  переменную {$photos}. В данном случае эта переменная для 
										  вывода данных из таблицы $table_ph */
										 
$smarty->assign('tbl_photos', $table_ph); /* в tpl используем переменную {$photos}*/ 
$smarty->display('photos.tpl');// подключаем наш "html", в котором выводятся элементы массива




// Check if delete button active, start this
//var_dump($_POST['checkbox']);
if (!($_POST['checkbox']))
{
}
else
{
if (($_SERVER['REQUEST_METHOD'] == 'POST') AND $_POST['checkbox'])
{
	$delete = $_POST['delete'];
	if($delete){

$del_arr_str = implode($_POST['checkbox'], ',');



/*Делаем запрос к БД*/
	$result_name_photo = mysql_query("SELECT photos_name, album_id FROM $table_ph WHERE photos_id IN ($del_arr_str)");
	
/*Преобразовываем результат в массив*/
	$myrow = mysql_fetch_array($result_name_photo);
	
/*Выводим результат на экран*/
	





$sql_delete_photos = "DELETE FROM $table_ph WHERE photos_id IN ($del_arr_str)";
$result = mysql_query($sql_delete_photos);



$photo = ($myrow['photos_name']);
$album = ($myrow['album_id']);


$mask = "images/".$album."/".$photo."";
   array_map( "unlink", glob( $mask ) );

   
   
if($result){

//echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
print_r($myrow);

}
else die (mysql_error());
}
}
}



а вот форма, которую он обрабатывает

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<form name="check" action="index.php" method="post">
<table>

<i>{$tbl_photos}</i>
<tr>
<td><input type="checkbox" name="checkbox_all[]" id="checkbox_all[]" onclick="checkAll(this)" /> 
      </td>
<td><b>Id</b></td>
<td><b>Name</b></td>
<td><b>Size</b></td>
<td><b>Comments</b></td>
<td><b>Album Id</b></td>
<td><b>User</b></td>
<td><b>Photo</b></td>
<td><b>Date Time</b></td>
</tr>

{foreach from=$photos item=n }
<tr>
	<td> <input name="checkbox[]" type="checkbox" id="checkbox[]" value="{$n.photos_id}" onClick="apply()"></td>
	<td> {$n.photos_id}  </td>  
    <td> {$n.photos_name}  </td>  
	<td> {$n.photos_size}</td> 
	<td> {$n.photos_comment}</td>
	<td> {$n.album_id} </td>
	<td> {$n.user_id} </td>	
	<td>
	<img src="{$n.photo}" alt="" width="50" height="50"><br>
	</td>
	<td> {$n.post_date} </td>
</tr>



{/foreach}

</table>

<input name="delete" type="submit" id="delete" value="Delete">

</form>
<a href='upload.php'>New note</a><br/>


и вот javascript, которые обрабатывают чекбоксы на этой форме

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
<!--Отмечаем все чекбоксы-->
<script type="text/javascript">
 
  function checkAll(obj) {
 
    'use strict';
      // Получаем NodeList дочерних элементов input формы:
      var input_items = obj.form.getElementsByTagName("input"),
          item;            
      // Здесь, увы цикл по элементам формы:
      for (item in input_items) {
          // Проверка, является ли данный элемент непосредственным свойством
          // объекта input_items ( Это рекомендуется сделать )
          if (input_items.hasOwnProperty(item)) {
              // Дальше логика простая: если checkbox "Выбрать всё" - отмечен
              // - отмечаем все чекбоксы...
              if (input_items[item].type=== "checkbox") {
                  if (!obj.checked) {
                      
					   input_items[item].checked = false;
					  document.check.delete.disabled=true;// если выделены чекбокс для всех чекбоксов, то кнопка delete disabled=false
					 
                  // Иначе снимаем отметки со всех чекбоксов:
                  } else {
                      input_items[item].checked = true;
					 document.check.delete.disabled=false;//если выделены чекбокс для всех чекбоксов, то кнопка delete disabled=true
                  }
              }        
          }
      }//end for
  }
   
   
   
   
   
   

 
 
 
 


</script>



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<!--Делаем активной submin delete только если выбран чекбокс-->
<script type='text/javascript'>

function apply(obj)
{

var one_enabled = false;	
c = document.getElementsByTagName('input');
  for (var i = 1; i < c.length; i++)
  {
    if (c[i].type == 'checkbox')
    {
      if (c[i].checked)
	  {
		  one_enabled = true;
	  }
    }
  }	
	
	
  if(!one_enabled)
  {
   
	document.check.delete.disabled=true;
	  
  }
  else 
  {
	
    document.check.delete.disabled=false;
  }

 
 
}


</script>
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37862822
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляйте файлы по одному. Если файл удалился из ФС успешно, тогда инициируйте удаление соответствующей ему записи из БД, а не наоборот и не кучей. В случае ошибки выводите сообщение.

Вообще то, перед удалением файла можно
а) проверить наличие файла
б) проверить права
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37863121
Фотография Маф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
if (!($_POST['checkbox']))
{
}
else
{
if (($_SERVER['REQUEST_METHOD'] == 'POST') AND $_POST['checkbox'])
{
	$delete = $_POST['delete'];
	if($delete){

$del_arr_str = implode($_POST['checkbox'], ',');



/*Делаем запрос к БД*/
	$result_name_photo = mysql_query("SELECT photos_name, album_id FROM $table_ph WHERE photos_id IN ($del_arr_str)");
	
/*Преобразовываем результат в массив*/
	$myrow = mysql_fetch_array($result_name_photo);
	
/*Выводим результат на экран*/
	






$photo = ($myrow['photos_name']);
$album = ($myrow['album_id']);
$mask = "images/".$album."/".$photo."";

if (is_file($mask)) 
{
  unlink($mask) ;

   
   
   
   
$sql_delete_photos = "DELETE FROM $table_ph WHERE photos_id IN ($del_arr_str)";
$result = mysql_query($sql_delete_photos);
}
else  
{
echo ("File $photo not delete. Error");
} 
   
if($result)
{

echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
print_r($myrow);

}
else die (mysql_error());
}
}
}



поставил проверку на наличие файла .. по одному, это я так понимаю цикл надо сделать? подскажите как? не могу найти подобных примеров в интернете
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37863134
Фотография Маф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
$del_arr_str


Это переменная хранит массив id, на которых отмечены чекбоксы.. Помогите, пожалуйста, написать цикл, который продолжается столько же раз сколько и отмечено id (checkbox-ов) и в этом цикле происходило удаление каждого последующей строки отмеченной checkbox

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
if (is_file($mask)) 
{
  unlink($mask) ;

   
   
   
   
$sql_delete_photos = "DELETE FROM $table_ph WHERE photos_id IN ($del_arr_str)";
$result = mysql_query($sql_delete_photos);
}
else  
{
echo ("File $photo not delete. Error");
} 
   
if($result)
{

echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
print_r($myrow);

}
else die (mysql_error());
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37863149
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мафне могу найти подобных примеров в интернете тынц
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37863205
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после
Код: php
1.
$myrow = mysql_fetch_array($result_name_photo);



Код: php
1.
2.
3.
4.
do {
удаляем файлы и че то там еще делаем..
}
while ($myrow = mysql_fetch_array($result_name_photo));



у тебя
Код: php
1.
$result_name_photo = mysql_query("SELECT photos_name, album_id FROM $table_ph WHERE photos_id IN ($del_arr_str)");



возвращает ни одну строку, а столько сколько входит в $del_arr_str. А ты обрабатываешь только первую.

P.S. Надеюсь ниче не напутал, а то сегодня туго соображаю))
...
Рейтинг: 0 / 0
(mysql + php) checkbox
    #37863283
Фотография Маф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
if (!($_POST['checkbox']))
{
}
else
{
if (($_SERVER['REQUEST_METHOD'] == 'POST') AND $_POST['checkbox'])
{
	$delete = $_POST['delete'];
	if($delete)
	{

//$del_arr_str = implode($_POST['checkbox'], ',');
$del_arr_str = ($_POST['checkbox']);


/*Делаем запрос к БД*/
	$result_name_photo = mysql_query("SELECT photos_name, album_id FROM $table_ph WHERE photos_id IN (" . implode(',', $del_arr_str ) . ")");
	
/*Преобразовываем результат в массив*/
	$myrow = mysql_fetch_array($result_name_photo);
	
/*Выводим результат на экран*/
	





$photo = ($myrow['photos_name']);
$album = ($myrow['album_id']);
$mask = "images/".$album."/".$photo."";




foreach ($del_arr_str as $value) 
{
	if (is_file($mask)) 
		unlink($mask) ;
	else 
	{
	echo "Server not have file with this name: $photo";
	}

	

   
   
   
	$sql_delete_photos = "DELETE FROM $table_ph WHERE photos_id IN ($value)";
	$result = mysql_query($sql_delete_photos);
	
	
	

}



 // определим некоторый массив случайных чисел 
 


	if($result)
	{

	echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
	//print_r($myrow);

	}
	else die (mysql_error());
	}
//print_r ($del_arr_str);

 
}
}



Спасибо всем за помощь :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (mysql + php) checkbox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]