pultter
4.08.2009 - 16:16
здравствуйте! я делаю админку и столкнулся как и многие с такой проблемой: удаление данных из бд. решил сделать это с помощью checkbox'ов. смотрел темы на форуме, гуглил и все равно не пойму ничего... код написал, но мне кажется там столько всякой ерунды...
помогите если не трудно будет..
PHP |
<?php error_reporting(E_ALL & ~E_NOTICE); include "function.php"; fc(); /////////////// if(isset($_POST['del'])) { $id_arr = array();
foreach($_POST['del'] as $key => $val)
mysql_query("DELETE FROM users WHERE `id` IN (".implode(',',$id_arr).")");
} ///////////////////// $q=mysql_query("SELECT * FROM users"); $n = mysql_num_rows($q); ?> <form action=users.php?del method=post> <? print "<table border=0 align=center> <tr> <td colspan=4> <a href=users.php?del>Удалить</a> </td> </tr> <tr align=center> <td> <input type=checkbox name=all></td> <td width=40>ID</td> <td width=120>Логин</td> <td width=120>Имя</td> <td width=40>Пол</td> <td width=150>E-mail</td> <td width=150>Дата регистрации</td> <td width=180>Последнее посещение</td> <form action=\"users.php?del\" method=post>"; for ($i=0; $i<$n; $i++) { $r=mysql_fetch_array($q); print "<tr align=center bgcolor=40a0a0> <td><input name=\"id[]\" type=checkbox value=".$r['id']."></td> <td>".$r['id']."</td> <td>".$r['login']."</td> <td>".$r['name']."</td> <td>".$r['sex']."</td> <td>".$r['mail']."</td> <td>".$r['date_reg']."</td> <td>".$r['date_lost']."</td> </tr>"; } print "</table><input type=submit value=Удалить name=\"del\"></form>"; |
особенно не понятна вот эта строка..
PHP |
foreach($_POST['del'] as $key => $val) |
чего она делает?
Спустя 3 минуты, 59 секунд (4.08.2009 - 15:20) Sylex написал(а):
PHP |
/////////////// if(isset($_POST['del'])) {
foreach($_POST['del'] as &$val) $val = (int) $val; mysql_query("DELETE FROM users WHERE `id` IN (".implode(',', $_POST['del']).")"); } ///////////////////// |
Спустя 10 минут, 32 секунды (4.08.2009 - 15:31) Sylex написал(а):
еще такую проверочку лучше добавить:
PHP |
/////////////// if(isset($_POST['del']) && is_array($_POST['del'])) {
foreach($_POST['del'] as &$val) $val = (int) $val; mysql_query("DELETE FROM users WHERE `id` IN (".implode(',', $_POST['del']).")"); } ///////////////////// |
Спустя 38 минут, 26 секунд (4.08.2009 - 16:09) pultter написал(а):
Sylex, все бы хорошо, да не работает этот скрипт...не удаляет ничего..
Спустя 4 минуты, 44 секунды (4.08.2009 - 16:14) Kuliev написал(а):
pultter
PHP |
if(isset($_POST['del']) && is_array($_POST['del'])) {
mysql_query("DELETE FROM users WHERE `id` IN (".implode(',',$_POST['id']).")"); } |
Спустя 2 часа, 47 секунд (4.08.2009 - 18:15) pultter написал(а):
Спустя 3 минуты, 1 секунда (4.08.2009 - 18:18) Kuliev написал(а):
pultter
попробуй так
PHP |
if(isset($_POST['del'])) {
mysql_query("DELETE FROM users WHERE `id` IN (".implode(',',$_POST['id']).")"); } |
Спустя 47 минут, 41 секунда (4.08.2009 - 19:05) Sylex написал(а):
pultterда ну тя

Я те правильно дал... анализируй, замени
mysql_query на echo, и дай сюда че выведет
Kulievто, что ты предлагаешь - не безопасно
Спустя 27 минут, 8 секунд (4.08.2009 - 19:32) Kuliev написал(а):
pultter
PHP |
<?php error_reporting(E_ALL & ~E_NOTICE);
include ("function.php");
fc(); ///////////////
if(isset($_POST['action']) && is_array($_POST['del'])) { if(count($_POST['del']) != 0) { $sql = ("DELETE FROM `users` WHERE `id` IN (".implode(',',$_POST['del']).")"); $result = mysql_query ($sql) or die (mysql_error() ."<br/>". $sql);
header("Location: ".SERVER['PHP_SELF'].""); exit(); }
else echo "Фиг Вам!"; }
/////////////////////
$table = "<form action=users.php method=post>\n"; $table .= "<table border=0 align=center><tr>\n"; // Только я не понял зачем тебе эта строчка??? $table .= "<td colspan=4><a href=users.php?del>Удалить</a></td>\n";
$table .= "</tr><tr align=center>\n"; $table .= "<td><input type=checkbox name=all></td>\n"; $table .= "<td width=40>ID</td>\n"; $table .= "<td width=120>Логин</td>\n"; $table .= "<td width=120>Имя</td>\n"; $table .= "<td width=40>Пол</td>\n"; $table .= "<td width=150>E-mail</td>\n"; $table .= "<td width=150>Дата регистрации</td>\n"; $table .= "<td width=180>Последнее посещение</td>\n";
$sql = ("SELECT * FROM `users`"); $result = mysql_query ($sql) or die (mysql_error() ."<br/>". $sql);
while ($row = mysql_fetch_assoc($result)) { $table .= "<tr align=center bgcolor=40a0a0>\n": $table .= "<td><input name=del[] type=checkbox value='".$row['id']."'></td>\n"; $table .= "<td>".$row['id']."</td>\n"; $table .= "<td>".$row['login']."</td>\n"; $table .= "<td>".$row['name']."</td>\n"; $table .= "<td>".$row['sex']."</td>\n"; $table .= "<td>".$row['mail']."</td>\n"; $table .= "<td>".$row['date_reg']."</td>\n"; $table .= "<td>".$row['date_lost']."</td>\n"; $table .= "</tr>\n"; }
$table .= "</table><input type=submit value=Удалить name=action></form>\n";
echo $table; |
Спустя 1 час, 21 минута, 43 секунды (4.08.2009 - 20:54) Sylex написал(а):
Kulievеще раз повторюсь, инъекция возможна
Спустя 13 часов, 15 минут, 22 секунды (5.08.2009 - 10:09) Kuliev написал(а):
Sylex
Так пойдет?
PHP |
if(isset($_POST['action']) && is_array($_POST['del'])) { if(count($_POST['del']) != 0) { $id = array(); foreach($_POST['del'] as $val) { $id[] = (int) $val; } $sql = ("DELETE FROM `users` WHERE `id` IN (".implode(',',$id).")"); $result = mysql_query ($sql) or die (mysql_error() ."<br/>". $sql); header("Location: ".SERVER['PHP_SELF'].""); exit(); }
else echo "Фиг Вам!"; } |
Спустя 23 минуты, 34 секунды (5.08.2009 - 10:33) Sylex написал(а):
Kulievда, но у меня проще
Спустя 1 час, 39 минут, 42 секунды (5.08.2009 - 12:13) gooder отдыхающий написал(а):
Sylex
насколько я понимаю, это интерфейс администратора, где защита от инъекций и не нужна...
Kuliev
+1
Спустя 12 минут, 9 секунд (5.08.2009 - 12:25) Sylex написал(а):
gooder
Люди потом привыкают так писать - и появляется не только в админ-части
Спустя 8 минут, 35 секунд (5.08.2009 - 12:33) gooder отдыхающий написал(а):
Sylex
да жизнь вобще страшная штука, ага...
Спустя 1 день, 7 часов, 40 минут, 1 секунда (6.08.2009 - 20:14) pultter написал(а):
Sylex, Kuliev, а также gooder большое спасибо... я просто не разобрался вот в этом месте. надо было писать
PHP |
if(isset($_POST['action']) && is_array($_POST['del'])) |
а я написал
PHP |
if(isset($_POST['del']) && is_array($_POST['del'])) |
а имя checkbox'у я присволи id[]
PHP |
<td><input name="id[]\" type=checkbox value=".$r['id']. |
поэтому ничего не получалось... спасибо всем!
Спустя 41 минута, 43 секунды (6.08.2009 - 20:55) Guest написал(а):
Цитата (gooder @ 5.08.2009 - 09:13) |
Sylex насколько я понимаю, это интерфейс администратора, где защита от инъекций и не нужна... |
1. Администраторам иногда приходится перекладывать свои обязанности на других.
2. Никто не гарантирует, что доступ в админку посторонним лицам 100% не возможен.
=>
Администраторский интерфейс безопасного приложения не должен вообще удалять записи, а лишь помечать их удаленными, а прав на удаление не должно быть даже у администратора. Раз в месяц на сервер заливается заветный скрипт с правами на удаление, подчищается база и скрипт благополучно удаляется с сервера. Конечно если действительно нужна защита.
_____________
Напишу индусский код. Бесплатно