За последние 24 часа нас посетили 50660 программистов и 1761 робот. Сейчас ищут 619 программистов ...

Не сохраняет в БД после редактирования

Тема в разделе "PHP и базы данных", создана пользователем TigerZaka, 27 апр 2012.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Есть таблица в БД - news (id_news (int), title_news (text), s_desc (text), desc (text), tags (text), add_date (datetime).
    Форма добавления новости add_news_form.php:
    Код (Text):
    1. <form enctype='multipart/form-data'  action=<? echo $action ?> method=post>
    2.     <input type="hidden" name="add_date" value="<?php echo date("Y-m-d H-i-s")?>">
    3.     <br>
    4.     <input type="text" name="title_news" value="<? echo $title_news; ?>" style="width:450px;">
    5.     <br>
    6.     <input type="text" name="tags" value="<? echo $tags; ?>" style="width:450px;">
    7.         <br>
    8.     <textarea id="s_desc" name="s_desc" class="teheader"><? echo $s_desc ?></textarea> 
    9.     <br>
    10.     <textarea id="desc" name="desc" class="teheader"><? echo $desc ?></textarea>
    11.         <input type="submit" value="Сохранить">
    12.         <input type="reset" value="Очистить форму">
    13. </form>
    Добавление и удаление новостей - работает!
    Если выбрать "редактирование новости" -> нас переносит на edit_news_form.php:
    Код (Text):
    1. if(!isset($action)) $action = "edit_news_script.php";
    2. if (isset($_GET['id_news'])) {
    3.     $id_news = mysql_real_escape_string ($_GET['id_news']);
    4.     $query = mysql_query("SELECT * FROM news WHERE id_news='$id_news' ");
    5.     while ($ss = mysql_fetch_array($query)) {
    6.         $title_news = $ss['title_news'];
    7.         $s_desc = $ss['s_desc'];
    8.         $desc = $ss['desc'];
    9.         $tags = $ss['tags'];
    10.     }
    11. }
    12. //Включаем HTML-форму
    13. include "add_news_form.php";
    Клацаем на submit и тут в дело вступает edit_news_script.php:
    Код (Text):
    1. $_POST['title_news'] = str_replace("'", "`", $_POST['title_news']);
    2. $_POST['s_desc'] = str_replace("'", "`", $_POST['s_desc']);
    3. $_POST['desc'] = str_replace("'", "`", $_POST['desc']);
    4. $_POST['tags'] = str_replace("'", "`", $_POST['tags']);
    5. $_POST['add_date'] = str_replace("'", "`", $_POST['add_date']);
    6.  
    7. $id_news = "25";
    8. $query = "UPDATE news SET   title_news = '".$_POST['title_news']."',
    9.                             s_desc = '".$_POST['s_desc']."',
    10.                             desc = '".$_POST['desc']."',
    11.                             tags = '".$_POST['tags']."',
    12.                             add_date = '".$_POST['add_date']."' WHERE id_news='".$id_news."' ";
    13. var_dump($query);
    14. if(mysql_query($query))
    15.     {
    16.     echo "работает";
    17.     }
    18. else {
    19.     echo "не работает";
    20. }
    var_dump выдает следующее:
    и при этом отображается второе эхо - "не работает"
    ----
    Подскажите на что обратить внимание, вроде все передается, может кавычки?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    запрос копируешь этот который получился, втыкаешь в пма и ковыряешь пока не починится. скорее всего кавычки обратные стоит применить.
     
  3. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    спс, попробую

    Да, все отлично, кавычки выручили.
    А как грамотно сделать проверку переменной? я пробую так:
    Код (Text):
    1. if (isset($_POST['id_news']))
    2.     $id_news = mysql_real_escape_string ($_POST['id_news']);
    но тогда "неопределенная переменная" :(
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  5. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Вобщем вот:
    в форму вставил:
    Код (Text):
    1. <input type="hidden" name="id_news" value="<?php echo $id_news;?>">
    а в скрипт:
    Код (Text):
    1. if ($_POST['id_news']) {
    2.     $id_news = $_POST['id_news'];
    3. } else {
    4.     $id_news = '';
    5. }
    Грамотно так будет?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно и так
    Код (PHP):
    1. <input type="hidden" name="id_news" value="<?php echo $_POST['id_news'];?>">
    и так
    Код (PHP):
    1. <?
    2. echo "<input type='hidden' name='id_news' value='{$_POST['id_news']}'>"; 
    и даже так
    Код (PHP):
    1. echo "<input type=\"hidden\" name=\"id_news\" value=\"{$_POST['id_news']}\">"; 
    если хочешь прям ну ниипически грамотно, то как-то так
    Код (PHP):
    1. echo "<input type='hidden' name='id_news' value='".htmlspecialchars($_POST['id_news'])."'>"; 
    а функцию mysql_real_escape_string() надо применять непосредственно при засовывании данных в запрос. не раньше.
     
  7. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    )) спасибо, теперь я мега грамотный )
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    неа не совсем)))

    Код (PHP):
    1. echo'<input type="hidden" name="id_news" value="'.htmlspecialchars($_POST['id_news']).'">';  
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда уж и хередок покажи =)
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    :D... php.net/manual/ru/language.types.string.php
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, ты покажи =)
     
  12. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Код (PHP):
    1. echo "<input type=\"hidden\" name=\"id_news\" value=\"".htmlspecialchars($_POST['id_news'])."\">";