[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: удаление строк из бд при помощи checkbox'ов
pultter
здравствуйте! я делаю админку и столкнулся как и многие с такой проблемой: удаление данных из бд. решил сделать это с помощью 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>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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 написал(а):
Kuliev, не работает:-(

Спустя 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
да ну тя smile.gif Я те правильно дал... анализируй, замени 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
еще раз повторюсь, инъекция возможна wink.gif

Спустя 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
да, но у меня проще smile.gif

Спустя 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% не возможен.
=>
Администраторский интерфейс безопасного приложения не должен вообще удалять записи, а лишь помечать их удаленными, а прав на удаление не должно быть даже у администратора. Раз в месяц на сервер заливается заветный скрипт с правами на удаление, подчищается база и скрипт благополучно удаляется с сервера. Конечно если действительно нужна защита.


_____________
Напишу индусский код. Бесплатно
Быстрый ответ:

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