За последние 24 часа нас посетили 16770 программистов и 1631 робот. Сейчас ищет 1091 программист ...

Форма не сохраняет данные в БД

Тема в разделе "PHP для новичков", создана пользователем jicool, 25 мар 2017.

Метки:
  1. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Разворачиваю форму со значениями с БД, все работает и по своим полям размечено.
    Редактируется как надо. А вот после редактирования не могу сохранить обратно в БД, просто очищает поля. Видимо я не правильно получаю данные с Формы.
    Прошу вас, опытных программистов, подсказать новичку!
    PHP:
    1. if($option == "edit") {
    2.     $sqledit = "SELECT * from news where id=$id";
    3.     $resedit = mysql_query($sqledit);
    4.     $dataedit = mysql_fetch_array($resedit);
    5.     echo "<form action='#' method='POST' enctype='multipart-form/data'>";
    6.     echo "<input type='text' name='title' value='$dataedit[title]'>";
    7.     echo "<input type='text' name='img' value='$dataedit'>";
    8.     echo "<input type='text' name='intro' value='$dataedit[intro]'>";
    9.     echo "<textarea rows='25' cols='80' name='content'>$dataedit[content]</textarea>".'<br>';
    10.     echo "<input type='submit' name='editsave' value='save'"."<br>";
    11.     echo "</form>";
    12.  
    13.     $id = $_POST[id];
    14.     $title = $_POST[title];
    15.     $img = $_POST[img];
    16.     $intro = $_POST[intro];
    17.     $content = $_POST[content];
    18.  
    19.     $update_sql = "UPDATE news SET title='$title', img='$img', intro='$intro', content='$content' WHERE id='$id'";
    20.     mysql_query($update_sql) or die("Ошибка вставки" . mysql_error());
     
    #1 jicool, 25 мар 2017
    Последнее редактирование модератором: 25 мар 2017
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    $sqledit = "SELECT * from news where id=$id";

    откуда берется переменная $id ?
    --- Добавлено ---
    $_POST - [id][title][intro]
    почему ключи пишутся не в апострофах " ?
     
  3. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    PHP:
    1. $table.="<a href='server.php?id=$data[id]&option=edit'>Редактировать новость</a>";
    2. $id = $_GET[id];
    3.  
    4.  
    5. if($option == "edit") {
    6.     $sqledit = "SELECT * from news where id=$id";
    7.     $resedit = mysql_query($sqledit);
    8.     $dataedit = mysql_fetch_array($resedit);
    9.     echo "<form action='#' method='POST' enctype='multipart-form/data'>";
    10.     echo "<input type='text' name='title' value='$dataedit[title]'>";
    11.     echo "<input type='text' name='img' value='$dataedit[img]'>";
    12.     echo "<input type='text' name='intro' value='$dataedit[intro]'>";
    13.     echo "<textarea rows='25' cols='80' name='content'>$dataedit[content]</textarea>".'<br>';
    14.     echo "<input type='submit' name='editsave' value='save'"."<br>";
    15.     echo "</form>";
    16.  
    17.     $id = $_POST["id"];
    18.     $title = $_POST["title"];
    19.     $img = $_POST["img"];
    20.     $intro = $_POST["intro"];
    21.     $content = $_POST["content"];
    22.  
    23.     $update_sql = "UPDATE news SET title='$title', img='$img', intro='$intro', content='$content' WHERE id='$id'";
    24.     mysql_query($update_sql) or die("Ошибка вставки" . mysql_error());
    Мой преподаватель сказал, что это задание на дом сложное.. Но я сразу и не поверил, а теперь голову ломаю и ответы ищу..
     
    #3 jicool, 25 мар 2017
    Последнее редактирование: 25 мар 2017
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Самая простая отладка:
    PHP:
    1. echo $update_sql ;
    перед mysql_query() вставь и посмотри какой запрос ты отправляешь.И на будущее,не используй mysql,его убрали из 7 ветки.Либо mysqli либо PDO.И второе тоже на будущее,никогда не принимай так данные:
    PHP:
    1. $id = $_POST["id"];
    Это крайне небезопасно
    Используй filter_var() или filter_input()
     
    jicool нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    прикол в том что в $_POST['ID'] ничего не придет, даже ключа нету
     
    jicool нравится это.
  6. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Спасибо большое за советы, приму к сведению и почитаю об этом подробнее.
    На сегодня я этого не знаю пробовал :(

    Вот что выводит эко
    PHP:
    1. UPDATE news SET title='', img='', intro='', content='' WHERE id=''
    PHP:
    1. UPDATE news SET title='qwerty', img='qwerty', intro='qwerty', content='qwerty' WHERE id=''
     
  7. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Вот и нашли проблему,теперь осталось ее решить)
     
    jicool нравится это.
  8. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    upload_2017-3-26_0-49-12.png

    Всех люблю, очень счастлив!!! Спасибо за помощь и советы, убрал $id=$_POST["id"]; (Потому что сверху $id = $_GET[id] у меня из другой формы приходит] .. И все работает !!!
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    А теперь тебе немного сверху, что препод наверняка оценит:
    1) перепиши все с mysql_ на mysqli_. Расширение mysql_ устарело и удалено из новых версий PHP. На замену ему пришло mysqli_, оно более удобное и безопасное. Переписать код с одного расширения на другое не сложно. Они похожи.
    2) Почитай про sql-инъекции. И обработай все значения, получаемые из форм через mysqli_real_escape_string;
     
    jicool нравится это.
  10. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Огромное Вам спасибо!
    Все опробую, очень интересно и занимательно! И душу греют ответы опытных людей! Спасибо, тему закрываю!

    Или не закрываю, кнопку не нашел!

    Рад, счастлив, проблема исчерпана !
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Да, когда начинает что-то получаться, оно всегда приятно :) Добро пожаловать на форум, в общем.
     
    jicool нравится это.
  12. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    но со временем эйфория перестает быть такой яркой)
     
    zlojnaxa и askanim нравится это.
  13. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Переписав на mysqli выдает тонну ошибок, видимо для начала нужно прочитать об этом.. Вся ночь впереди.
    Прочту, спасибо!
    Это вовсе не понял пока. ООП только начинает открываться для меня, я очень и очень начинающий "неПрограммист" )
     
  14. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    А если бы внимательно прочитал документацию,то увидел бы,что наряду с ООП, для тех кто не знаком с ним есть и процедурный стиль:

    PHP:
    1. $link = mysqli_connect("localhost", "my_user", "my_password", "world");
    2.  
    3. /* проверка соединения */
    4.     printf("Не удалось подключиться: %s\n", mysqli_connect_error());
    5.     exit();
    6. }
    7.  
    8. mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
    9.  
    10. $city = "'s Hertogenbosch";
    11.  
    12. /* этот запрос вызовет ошибку, так как мы не экранировали $city */
    13. if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    14.     printf("Ошибка: %s\n", mysqli_sqlstate($link));
    15. }
    16.  
    17. $city = mysqli_real_escape_string($link, $city);
    18.  
    19. /* этот запрос отработает нормально */
    20. if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    21.     printf("%d строк вставлено.\n", mysqli_affected_rows($link));
    22. }
    23.  
    24. mysqli_close($link);
     
  15. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Прочитал, но понял слишком мало, пожалуй, чтобы попробовать..
    Но до сдачи Домашнего задания еще почти двое суток, так что я обязательно разберусь и попробую. Спасибо!
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    как же хочется прикинуться учеником препода, чтобы забабахать такой код, о которого у него качан бы почесался (с).

    В свое время любил спорить с учителями информатики, в колледже информат разделили на ( неок люблю) и (вообще отстой).
    Изучали бейсик и прочее дребедень, пока сам один в тихоря ковырялся в своем сайте. :D
     
    SamyRed нравится это.
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ты просто не поднимал планку сложности.
    переписать на mysqli_ не значит "просто i везде добавить". Это значит "почитать документацию, понять, как работает mysqli, сравнить с mysql, понять, в чем различия, переписать код с учетом различий". Если бы разница между ними была только в одной буковке в названиях, никто бы не стал заморачиваться с написанием нового адаптера к БД, верно?
    Как было сказано выше, там есть и процедурный интерфейс.
     
  18. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Спасибо. Ознакомлюсь, перепишу и поделюсь результатом:)
    Вообще учусь не в ВУЗе, а на курсах ускоренных.. за 25 часов с нуля надо знать php/javascript/html/css ...
    Преподаватель говорит, что нужно использовать mysql т.к. могут быть проблемы с совместимостью при работе msqli и для меня, возможно, это будет слишком сложно на начальном этапе )
     
  19. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Гони его санными тряпками. Сам подумай, mysql удалили и когда ты закончишь курсы и захочешь что-то сделать, ставишь PHP 7.1 и оп, там уже нету mysql, там mysqli (прочувствовал подставу). Ладно если он не хочет тебя нагружать ООП, так mysqli доступна и в процедурном стиле!

    В PHP 5.6 ещё есть mysql но там из всех щелей лезут предупреждение что его удалят, и по факту уже удалили в PHP 7.
    Скоро PHP 5.6 перестанут поддерживать. Но ты всегда сможешь покопаться в старом проекте с mysql (почитаешь документацию, ничего сложного), но учить лучше сразу с mysqli. Это очень важно.
     
    zlojnaxa, askanim и mahmuzar нравится это.
  20. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    Учеников ценят когда спорят с учителями :D
    Выучи что Денчик описал, и плюнь в лицо учителю
     
    denis01 нравится это.
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    +1
    Препод - некомпетентное говно.
    --- Добавлено ---
    Хотелось бы отдельно услышать перечень проблем с совместимостью. И перечень сложностей.
    Проблемы с совместимостью могуть быть только у человека, который до сих пор работает в php4+ и считает, что php5 вышел совсем недавно и его еще половина хостингов не поддерживает.
     
    SamyRed, askanim, denis01 и ещё 1-му нравится это.
  22. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Примерно так и говорит ..
    Но, совсем скоро начнутся новые курсы с более продвинутой программой и преподавателями, может там будет чуть более свежая информация)
    --- Добавлено ---
    Спасибо. Поищу информацию о разнице mysql и mysqli и перепишу то, что уже есть.
    Я учу php 2 недели и раньше с программированием не сталкивался. Просто стало интересно, нашел курсы в своем городе за 37500 за 25 ак/ч ....
    --- Добавлено ---
    Сегодня на занятии я преподу сказал, что меня забросали камнями за mysql и сказали, что он давно умер...
    Он в ответ посмеялся и сказал никого не слушать:)
     
  23. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну ты можешь конечно никого не слушать,но документацию нельзя игнорировать)
    [​IMG]
    https://secure.php.net/manual/ru/function.mysql-query.php
     
    askanim нравится это.
  24. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Спасибо! Я только ЗА то, чтобы делать правильно! Увидел небольшую задачку в разделе "Как быстро освоить PHP" .. Хочу попробовать ее выполнить и сразу же с освоением mysqli и всего, что успею прочесть за время выполнения ) Думаю уйдет не мало времени, но очень интересно ))
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Бро. Я бы забрал деньги и ушел учиться самостоятельно. Да хоть сюда же на форум. Ты, главное, спрашивай. Тебе тут и литературу подберут, и с документацией помогут. И непонятное разъяснят. Бесплатно. Если желание и способности есть, а, похоже, что есть, лучше последуй этому совету. Ты за один тред на этом форуме уже о PHP, походу, узнал больше, чем до этого на курсах.

    Твой преподаватель некомпетентен. Это не мнение диванного эксперта. Он объективно некомпетентен. И, что хуже, из-за своей некомпетентности он не осознает, что он некомпетентен. Считая, что ему виднее, чем разработчикам языка, что устарело, а что нет. Он пытается учить людей тому, чего не знает сам. За деньги. Это капец.
     
    SamyRed нравится это.