Перейти к содержимому



Простой вопрос: почему не работает UPDATE?

#1 hnerd

hnerd
  • Пользователь
  • 284 сообщений
  • Репутация: 18
0

Отправлено 18 Август 2014 - 09:00

Здравствуйте! Не можете мне помочь. У меня не работает UPDATE, причину не могу найти!

<?php
require_once('dbconfig.php');

$id = $_GET['id'];

//Делаем выборку
$res = mysql_query("SELECT * FROM articles WHERE id_article='$id'");
if(!$res) die ('Ошибка базы данных ' . mysql_error());
$row = mysql_fetch_assoc($res);
?>
<h1>Обновление записи!</h1>

<form method="post" action="update.php">
    <input type="text" name="title" value="<?php echo $row['title']; ?>" /><br/>
    <textarea name="content"><?php echo $row['content']; ?></textarea><br/>
    <input type="submit" name="change" value="Изменить" />
</form>

<br/><a href="index.php">Главная</a>

<?php

//Делаем обновление записей
if(isset($_POST['change']))
{
    $title = $_POST['title'];
    $content = $_POST['content'];

    $query = "UPDATE articles SET title='$title', content='$content' WHERE id_article='$id'";
    mysql_query($query);
}
?>

Если убрать

WHERE id_article='$id'

, то сразу все работает и записи обновляются у всех статей сразу-это понятно!
Выходит у меня ошибка именно в

WHERE id_article='$id'

Тогда я подумала, может $id у меня просто не работает, я вывела

echo $id;

- и мне вывели этот id! $id тоже существует, но UPDATE с WHERE id_article='$id' не работает!

В чем ошибка? Может в синтаксисе?

 

Но как-только не пробовала ставить кавычки-не помогает!

Все же вроде бы правильно!


 

 

Сообщение отредактировал hnerd: 18 Август 2014 - 09:03

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Почему не работает определение браузера?
  2. Вопрос по работе в админке сайта
  3. Вопрос по директу. Почему я не вижу свою рекламу?
  4. После обновления до 4.2.3 криво работает база данных
  5. Вопрос-ответ о работе форума

#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 18 Август 2014 - 09:16

Попробуй сделать echo $query;

Посмотришь какой запрос формируется. Этот запрос можно выполнить в майадмине, там ошибку выдаст, если есть.


И привыкай сразу обрабатывать внешние данные. Например сделай отдельную функцию и все запросы прогоняй через нее.

function def($str){
    $str = trim($p); // пробелы не нужны
    $str = htmlentities($str); // символы в сущности
    return $str;
}

// а данные получаем так
$title = def($_POST['title']);


  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#3 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 18 Август 2014 - 10:15

Простой ответ 

$query = "UPDATE `articles` SET `title` = '".$title."', `content` = '".$content."' WHERE `id_article` = '".$id."'";

ну как то так . Также проверьте существует ли ID в таблице !


  • 1
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#4 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 18 Август 2014 - 10:58

Хочу обратить внимание, что такой запрос также верный. Потому что строка в двойных кавычках разборная и парсер видит в ней переменные.

$query = "UPDATE articles SET title='$title', content='$content' WHERE id_article='$id'";

Конкатенация обязательна в случае одинарных кавычек.


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#5 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 18 Август 2014 - 10:59

fedornabilkin, В принципе вы правы . Но если посмотреть со стороны красоты и правильности оформления - тогда так правильнее .


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#6 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 18 Август 2014 - 11:18

Да-да, согласен. Я так тоже раньше делал. Но когда приходится формировать большие запросы на 5-8 строк с джойнами, группированием и т.д., то очень легко запутаться с кавычками.

Поэтому решил писать запрос в двойных и переменные без кавычек. Но это было давно.

Сейчас написал для себя класс, который формирует запросы, а мне остается только передать данные в массиве вида

$data['field'] = $val;
$data['field1'] = $val1;
$data['field2'] = $val2;

Очень полезно, когда скрипт разрастается. Очень трудно найти все запросы и отредактировать их при необходимости.


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#7 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 18 Август 2014 - 11:24

fedornabilkin, А зачем класс писать ? Может проще уже тогда ORM или AR ?


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#8 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 18 Август 2014 - 11:36

Да вот проблема у меня. Все никак не могу вылезти из примитивного уровня. Может еще не готов.

Хотя понимаю, что это правильно и рационально.

Опять же надо сделать выбор и еще вот:

 

На практике всё не так просто и очевидно. Все системы ORM обычно проявляют себя в том или ином виде, уменьшая в некотором роде возможность игнорирования базы данных. Более того, слой транзакций может быть медленным и неэффективным (особенно в терминах сгенерированного SQL). Все это может привести к тому, что программы будут работать медленнее и использовать больше памяти, чем программы, написанные «вручную».


  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#9 hnerd

hnerd
    Topic Starter
  • Пользователь
  • 284 сообщений
  • Репутация: 18

Отправлено 18 Август 2014 - 18:39

Простой ответ 

$query = "UPDATE `articles` SET `title` = '".$title."', `content` = '".$content."' WHERE `id_article` = '".$id."'";

ну как то так . Также проверьте существует ли ID в таблице !

Спасибо за ответ! К сожалению. так тоже не работает, id не хочет показывать! Когда вместо id цифру подставила, все заработало! Как вы думаете, как можно изменить код, чтобы id было видно!


Сообщение отредактировал hnerd: 18 Август 2014 - 18:59

  • 0

#10 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 18 Август 2014 - 18:55

Выводите после запроса echo mysql_error();


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru