Удаление при помощи checkbox

Discussion in 'PHP' started by Muracha, 16 Mar 2012.

  1. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    153
    Likes Received:
    10
    Reputations:
    0
    Поставлена задача - внедрить в административную панель CMS checkbox, позволяющие массово удалять данные из базы данных.
    Система не моя, а хрензнаетоткуда взята :)

    Погуглив на эту тему подредактировал cms
    Интегрировал в tpl
    PHP:
    <input type=\"checkbox\" name=\"{$_POST['itemid']}\"> 
    и
    PHP:
    <?php 
    // проверка на существование данных в переменной
    if (!isset($_POST['itemid'])) {
                        die(
    "Вы не  выбрали элемент!");
              }
    // присваивние переменных 

    $_POST['itemid'] = $itemid


    $col 0;

    // обрабатываем данные массива, переменной $check_del
    foreach  ($itemid as $check) {            
                 
    // счетчик количества  выделенных элементов
                         
    $col  $col 1;
                          
    $itemid null;  
                       echo  
    "Элемент ".$check." удален!!!<br>";
                            
                       
    //  ПРИ НЕОБХОДИМОСТИ ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ НИЖЕ ПРИВЕДЕННЫЕ ФУНКЦИИ, УБРАВ  КОММЕНТАРИЙ  /* и в конце */ 
                            
                       
                           //*****  удаление выделенных элементов из базы данных   *****************************
                                
    $table_bd  "modulecataloguegroups"// название таблицы из которой надо удалить выделенный элемент 
                                               
                              
    $result mysql_query ("DELETE  FROM ".$table_bd." WHERE id='".$check."'"); 
                            
    //*********************************************************************************
                        
    // **************************************************************
    // вывод результата с автоматическим определнием окончаний
    // определение окончаний чисел от 1 до 5
    if ($col  and $col 5) {
            
    $t1   'а'
            
    $t2 'о';
            }
    // определение окончаний чисел от 4 до 21
    if ($col  and $col 21) {
            
    $t1   'ов'
            
    $t2 'о';
            }
    echo  
    "<br>".$col." элемент".$t1." успешно удален".$t2."!";
    //  **************************************************************
    ?>
                  }
    При попытке удаления данных из базы данных checkbox, выдает ошибку но ничего не удаляет:
    Уважаемые, в чем же дело? В Цикле? Или в том, что неправильно указал массивы?
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Да,

    $_POST['itemid'] = $itemid;
    Замни на,
    $itemid = $_POST['itemid'];

    Code:
    $result = mysql_query ("DELETE  FROM ".$table_bd." WHERE id='".$check."'");  
    Без фильтрации не ок запросы делать, через DELETE вроде с базы лишнего не выташиш но начудить наудалять можно.
     
  3. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    153
    Likes Received:
    10
    Reputations:
    0
    Фильтрацию я передвинул на второй план. Нечего фильтровать, если вроде запросы идут, но не исполняются.
    Переставил местами, сделал фильтрацию - а результат все тот же.

    В самой cms параметры передаются по другому:
    PHP:
    if(($_GET['ctype']=='group')||($_GET['ctype']=='groupdelimg')||($_GET['ctype']=='groupimageupload')||($_GET['type']=='groupupdate')){
        
    $sql "SELECT * FROM `modulecataloguegroups` WHERE `id` = '".$_GET['itemid']."'";
        
    $result mysql_query($sql);
    $line mysql_fetch_array($resultMYSQL_ASSOC);
    Может из-за того, что везде $_GET['itemid'], а я указываю как $_POST['itemid']?
     
  4. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Один полностью сплошной корявый скрипт *=__=
    Фильтрацию делать надо для того, чтобы sql запрос не внедрили и не получили нужные данные. Хотя в твоём случае это уже будет не критично, т.к. доступ в админку нужен, а если его получат, то и твой дырявый скрипт нахрен не понадобится.
    get - передача параметров в урле. http://site.com/admin/delete.php?item_id=666
    Code:
    <input type="checkbox\" name=\"{$_POST['itemid']}\"> 
    {$_POST['itemid']} везде в шаблоне именно так происходит подстановка айдишки на страницу? Если нет, то сделай так как в других местах шаблона. К тому же если ты хочешь использовать цикл для обработки (а по другому будет неправильно), то имя надо указывать так
    HTML:
    <input type="checkbox\" name=\"itemid[]\" value=\"{$_POST['itemid']}\">
    Хотя о какой массовости при таким коде (как я се вижу его по отрывку) может идти речь.

    Вот тебе алгоритм.
    1. шаблон рисует страницу со строками в которых твой чек бокс
    HTML:
    <input type="checkbox\" name=\"itemIdsToDelete[]\" value=\"{$currentItemId}\">
    2. ты что-то там нажимаешь и методом указанным в <form method="ИМЯ МЕТОДА GET or POST"> отправляются данные на сервер.
    3. принимаешь свой массив $toDelete = $_ИМЯМЕТОДА_ОТПРАВКИ_ДАННЫХ['itemIdsToDelete'];
    4. В цикле перебираешь массив $toDelete и делаешь запрос к базе на удаление.
    5. Формируешь хтмл с ответом о статусе удаления (сохранения, хз чего там у тя).

    UPDATE.
    Вытащишь, например если включено отображение sql ошибок.
     
    #4 Melfis, 16 Mar 2012
    Last edited: 16 Mar 2012
Loading...