X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Простой вопрос: почему не работает UPDATE?
hnerd
hnerd
Topic Starter сообщение 18.8.2014, 10:00; Ответить: hnerd
Сообщение #1


Здравствуйте! Не можете мне помочь. У меня не работает 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.8.2014, 10:03
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 18.8.2014, 10:16; Ответить: fedornabilkin
Сообщение #2


Попробуй сделать echo $query;
Посмотришь какой запрос формируется. Этот запрос можно выполнить в майадмине, там ошибку выдаст, если есть.
И привыкай сразу обрабатывать внешние данные. Например сделай отдельную функцию и все запросы прогоняй через нее.

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

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

Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 18.8.2014, 11:15; Ответить: kamchatniyoleg
Сообщение #3


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

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

ну как то так . Также проверьте существует ли ID в таблице !
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 18.8.2014, 11:58; Ответить: fedornabilkin
Сообщение #4


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

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

Конкатенация обязательна в случае одинарных кавычек.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 18.8.2014, 11:59; Ответить: kamchatniyoleg
Сообщение #5


[member=fedornabilkin], В принципе вы правы . Но если посмотреть со стороны красоты и правильности оформления - тогда так правильнее .
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 18.8.2014, 12:18; Ответить: fedornabilkin
Сообщение #6


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

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

Очень полезно, когда скрипт разрастается. Очень трудно найти все запросы и отредактировать их при необходимости.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 18.8.2014, 12:24; Ответить: kamchatniyoleg
Сообщение #7


[member=fedornabilkin], А зачем класс писать ? Может проще уже тогда ORM или AR ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 18.8.2014, 12:36; Ответить: fedornabilkin
Сообщение #8


Да вот проблема у меня. Все никак не могу вылезти из примитивного уровня. Может еще не готов.
Хотя понимаю, что это правильно и рационально.
Опять же надо сделать выбор и еще вот:
На практике всё не так просто и очевидно. Все системы ORM обычно проявляют себя в том или ином виде, уменьшая в некотором роде возможность игнорирования базы данных. Более того, слой транзакций может быть медленным и неэффективным (особенно в терминах сгенерированного SQL). Все это может привести к тому, что программы будут работать медленнее и использовать больше памяти, чем программы, написанные «вручную».
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
hnerd
hnerd
Topic Starter сообщение 18.8.2014, 19:39; Ответить: hnerd
Сообщение #9


(kamchatniyoleg @ 18.8.2014, 14:15) *

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

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

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

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


Сообщение отредактировал hnerd - 18.8.2014, 19:59
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 18.8.2014, 19:55; Ответить: ixman
Сообщение #10


Выводите после запроса echo mysql_error();
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Крауд-маркетинг который работает | Эффективные Ру-ссылки
1 Azyuka 958 13.2.2024, 19:36
автор: tascha56
Открытая тема (нет новых ответов) Простой способ заработать на пиво за 5 минут
Халява для граждан РФ
17 MaxChemist 3103 15.9.2022, 17:42
автор: MaxChemist
Открытая тема (нет новых ответов) Кто работает с партнерской программой eBay?
0 Stalser 1151 14.12.2021, 12:26
автор: Stalser
Открытая тема (нет новых ответов) Кто работает с партнеркой Кликбанк?
4 metvekot 1697 5.12.2021, 22:32
автор: adamsadriane
Открытая тема (нет новых ответов) Бесплатный аудит рекламы от специалиста с 20 летним стажем. Реклама не всегда работает.
Ваша реклама может быть больше!
0 AndyGray 6769 1.4.2021, 12:31
автор: AndyGray


 



RSS Текстовая версия Сейчас: 29.3.2024, 5:53
Дизайн