Не удалят запись из базы данных

Тема в разделе "PHP", создана пользователем Uglik, 7 окт 2011.

Модераторы: latteo
  1. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Подскажите в чем пробелама...
    есть форма :
    HTML:
    
    <form action="edit.php"  method="post">
    <strong>Название: </strong>: <br /><input type="text" name="title" size="100%" value="<?=$article[title]?>"><br />
    <strong>Текст: </strong>: <br /><textarea name="article" cols="100%" rows="20" ><?=$article[article]?></textarea><br />
    <input type="hidden" name="id" value="<?=$article[id]?>"><br />
     <input type="submit" name="edit" value="Редактировать"><input type="submit" name="delete" value="Удалить">
    </form>
    
    из формы данные передаються в котралер :
    PHP:
    // редактирум статью
    if($_POST[edit]) {
        
    $id $_POST[id];
        
    $title $_POST[title];
        
    $article $_POST[article];
        
    $edit article_edit($id$title$article);
        if (
    $edit TRUE) {
            
    Header('Location:editor.php');
        }
    }
    // удоляем статью
    if($_POST[delete]) {
        
    $id $POST[id];
        
    $delete article_delete($id);
        if(
    $delete == TRUE) {
            
    #Header('Location:editor.php');
        
    }
    }
    include(
    'theme/edit.php');
    при нажатии на кнопек редактировать данные успешно редактируються... при нажатии на кнопку удалить нет! Вот функция article_delete
    PHP:
    function article_delete($id) {
        
    // подгатовка
        
    $id intval($id);
        if(
    $id 1)
            return 
    false;
        
    // sql запрос на удаление статьи 
        
    $sql "DELETE FROM articles WHERE id = '%d'";
        
    $query sprintf($sql$id);
        
    $result mysql_query($query);
        if(!
    $result)
            die(
    mysql_error());
        return 
    true;
        
    mysql_close();
    }
    В чем касяк не могу понять... sql запрос вроде правильно составил
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    по ходу должно быть так:
    $sql = "DELETE FROM articles WHERE `id` = ' ".$id." ' ";
     
  3. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Почему знак процента? Может в этом и ошибка?
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    MONtrade dino - в пхп коде всё верно, это функция sprintf для подстановки переменных в строку по формату.

    Выведите информацию о пост запросе print_r($_POST); + проверьте условия выполняются?
    +
    PHP:
       if ($edit TRUE) {
    если в коде тоже один знак = то это ошибка.
     
  5. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    А само mysql подключение где-нибудь инициализируется? Какая ошибка вылазиет?
    Закрытие подключения вижу: mysql_close();
    А где mysql_connect() ?
     
  6. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    вот весь код котролера... поключение есть, если бы не было, то и редактирование не работало бы

    PHP:
    // Подключаемся к базе данным
    require_once('config.php');
    // подключаем функции
    require_once('function.php');

    // если передан id просто выводим в форме редактируемую статью

    if(!$_POST) {

    $id $_GET[id] or die("Не был передат id стати");
    $article full_article($id);
    }


    // редактирум статью

    if($_POST[edit]) {
        
    $id $_POST[id];
        
    $title $_POST[title];
        
    $article $_POST[article];
        
        
    $edit article_edit($id$title$article);
        if (
    $edit TRUE) {
            
    Header('Location:editor.php');
        }

    }


    // удоляем статью
    if($_POST[delete]) {
        
    $id $POST[id];
        
        
    $delete article_delete($id);
        if(
    $delete == TRUE) {
            
    #Header('Location:editor.php');
        
    }
    }

    include(
    'theme/edit.php');
     
  7. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А не удаляет инфу только после редактирования или постоянно?
     
  8. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Да вообще не удоляет... вообще не могу понять в чем дело... капирую sql запрос и напрямую вбиваю через phpmyadmin все ОК. через функцию не хочет.
     
  9. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Попробуй посмотреть передается ли ид в функцию:
    PHP:
    function article_delete($id) { 
        
    // подгатовка 
        
    $id intval($id); 

    echo 
    "id=".$id;  

        if(
    $id 1
            return 
    false
        
    // sql запрос на удаление статьи  
        
    $sql "DELETE FROM articles WHERE id = '%d'"
        
    $query sprintf($sql$id); 
        
    $result mysql_query($query); 
        if(!
    $result
            die(
    mysql_error()); 
        return 
    true
        
    mysql_close(); 
    }  
     
  10. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    это делается поэтапном деббагом- после каждого сомнительного условия выводим инфомацию,

    PHP:
    echo "<pre>";
    print_r($_POST);
    if(
    $_POST[delete]) { 

    echo 
    "delete run\n";
        
    $id $POST[id]; 
        
    $delete article_delete($id); 
        if(
    $delete == TRUE) { 
            
    #Header('Location:editor.php'); 
        

    }



    function 
    article_delete($id) { 
        
    // подгатовка 
    echo "delete $id";
        
    $id intval($id); 
        if(
    $id 1) {

    echo 
    "NOT delete $id < 1";
            return 
    false
    }

        
    // sql запрос на удаление статьи  
     
    $sql "DELETE FROM articles WHERE id = '%d'"
       echo    
    $query sprintf($sql$id); 
        
    $result mysql_query($query); 
    echo 
    "delete OK!";
        if(!
    $result
            die(
    mysql_error()); 
        return 
    true
        
    mysql_close(); 

    Всё - смотрим где прервётся и почему. Возможно ИД как то не так отсылается (и в форму не так пишется), возможно delete в пост запросе отсутствует.
    есть вероятность что sql запрос выполняется но таблица другая.