За последние 24 часа нас посетили 17774 программиста и 1677 роботов. Сейчас ищут 860 программистов ...

Функция UPDATE

Тема в разделе "Прочие вопросы по PHP", создана пользователем metal373, 18 окт 2014.

  1. metal373

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

    С нами с:
    19 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Челябинск
    Доброго времени суток.
    Топик наверняка баян, но у меня уже голов кругом.
    Короче суть:
    Есть страница с выводом списка пользователей: в таком формате
    Код (Text):
    1. <tr><td><h5>Никнейм:</h5></td><td><h5>&nbsp&nbsp '. $row['Nick'] .'
    2. <tr><td><h5>Статус заявки:</h5></td><td><h5>&nbsp&nbsp '.$Status = iconv('UTF-8', 'windows-1251', $row['Status']).'</h5></td>
    Вот, на той страничке где выводится список пользователей под статусом заявки есть поле для ввода нового статуса:
    Код (Text):
    1. <tr><td><h5>Новый статус:</h5></td><td><h5>&nbsp&nbsp <input type="hiden" style="width:99%" type="text" name="Status" value="" aria-label="Новый ответ на заявку" aria-required="true" required="" title=""></h5></td>
    Мне нужно что бы текст введенный в форму "Новый статус заявки" заменял "Статус заявки".

    Мой PHP код:
    Код (Text):
    1. $Status = iconv('windows-1251', 'UTF-8', $_POST['Status']);
    2.  
    3. $result = mysql_query ("UPDATE ancets SET Status='$Status' WHERE id='$id'");
    4. if ($result == 'true')
    5. {
    6. echo "Данные успешно обновлены.";
    7. }
    8. else
    9. {
    10. echo "Данные не обновлены!";
    Я ввожу новый статус, мне прилетает ответ "Данные успешно обновлены", но в базе по прежнему сидит старый не обновленный статус.
    Вот форма:
    Код (Text):
    1. <form action="/newstatus.php" method="POST" target="_self" onsubmit="">
    В обще прошу вас, ткните пальцем туда где я налажал...
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    вверху этой страницы есть поиск по документации. поищи там mysql_query. глянь что он возвращает. никогда он не возвращает строку 'true' :)
     
  3. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Бред какой-то. Изменения всегда отображают, даже когда файл записываешь какая-нибудь звезда в заголовке исчезает, или там вкладка его с красной становится серой. А тут типа "усе хокей!" и досвидос. Естественно получается ТС и сам не видит ничего, ползет в пхпмайдмин, а там все по-старому.

    Делается вот так: update... select... и по результатам силекта - отображение. Тогда если сработало - вот оно, иначе ловить и топить программиста.

    ЗЫ Судя по бесконечным iconv лечить там уже нечего.

    Добавлено спустя 6 минут:
    Это субьдя всех форумов такого рода, их БД заполняют лентяи, у которых глюков на весь глобус хватит. Трудяи пытаются типа помочь лентяям, но всех не вылечишь, на место одного приходят тысячиих.

    Код (PHP):
    1. if(mysql_query ("UPDATE ancets SET Status='$Status' WHERE id='$id'"))
    2.    $result=mysql_query ("select status from ancets  WHERE id='$id'");
    3. // отсюда в рендер, показать что вышло в результате 
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    на самом деле проблема несколько богаче.

    да, топикстартер не имеет представления о типах данных и о том как PHP неявно их преобразует. но конкретно эта ошибка вызвана тем, что mysql_query('UPDATE...') возвращает признак успеха для любого выражения без ошибок. то есть если указан несуществующий id, то это синтаксически верно и не считается ошибкой. никакие данные не изменились, но результат положительный, се ля ви!

    (можно было бы воспользоваться функцией mysql_affected_rows() чтобы узнать сколько строк было изменено. но тут есть другая засада: если новый статус равен старому, то результат будет 0)

    откуда взялся $id, чему он равен — вот в чем вопрос! чтобы отладить запрос надо смотреть готовый текст, какой пойдет в mysql_query.
    Код (PHP):
    1. $sql = "UPDATE лалалала {$id} ололо {$hujnane}";
    2. echo $sql; // отладка!
    3. $result = mysql_query($sql);
     
  5. metal373

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

    С нами с:
    19 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Челябинск
    Дело в том, что сайт написан в 1251, а база в utf-8. Выгружать всё и пересоздавать базу мне лень. А иначе либо в базе кракозябры либо на сайте. Вот и приходится страдать такое темой. С PHP я и в правду не дружу. Так как веб вёрстка хобби, а не основное призвание. Учусь чему могу.

    Я думал у меня проблема в коде с выводом на страничку данных из базы...а конкретно в:
    Код (Text):
    1. '. $row['Nick'] .'
    в row. Но послушав вас вообще запутался.
    У меня проблема с синтаксисе update или в выводе ошибки... Пожалуйста не надо заумным языком, скажите проще.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    это решается одним запросом 'set names cp1251' сразу после соединения ))) ну или аналогичным ему вызовом http://php.net/manual/ru/mysqli.set-charset

    Добавлено спустя 6 минут 9 секунд:
    ё* **** ***ь! как раз таки в синтаксисе ошибки нет. ошибка в логике: результат mysql_query('UPDATE...') всегда true, если нет синтаксической ошибки в запросе. проверь какой именно запрос ты вызываешь, наверное там id не тот.

    Добавлено спустя 1 минуту 56 секунд:
    мы земляки, кстати, но это тебя не оправдывает )))