[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование данных в mysql
boomber
Здравствуйте.
Помогите пожалуйста с запросом.
Делаю админку редактирования ленты новостей.
Вывожу список новостей со ссылками на форму для редактирования.
Сама форма делается следующим кодом:
function editform() 
{
echo '<h2>Редактировать</h2>';

$query = 'SELECT news_id,ntext,ndate FROM news WHERE news_id='.$_GET['news_id'].'';
$result = mysql_query($query)
or die(mysql_error());
$ir = mysql_fetch_array($result);
echo '<form name="editform" action="'.$_SERVER['PHP_SELF'].'?action=update&news_id='.$_GET['news_id'].'" method="POST">';
echo '<table>';
echo '<tr>';
echo '<td>Дата</td>';
echo '<td><input type="hidden" name="news_id" value="'.$ir['news_id'].'"><input type="text" name="date" value="'.$ir['ndate'].'"></td>';
echo '</tr>';
echo '<tr>';
echo '<td>Новость</td>';
echo '<td><textarea name="news" cols=80 rows=10>'.$ir['ntext'].'</textarea></td>';
echo '</tr>';
echo '<tr>';
echo '<td><input type="submit" value="Сохранить"></td>';
echo '<td><button type="button" onClick="history.back();">Отменить</button></td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}

Все работает и данные выводятся в поля.
Далее, редактирую данные в полях, пытаюсь сохранить.
Функция редактирования:
function update() 
{

$query='UPDATE news SET ndate='.$_POST['date'].', ntext='.$_POST['news'].' WHERE news_id='.$_POST['news_id'].'';
mysql_query($query);
header( 'Location: '.$_SERVER['PHP_SELF'].'');
die();
}

Само обновление полей работает. Но дата просто обнуляется и встает в базу 0000-00-00. А текст не сохраняется. Если написать вместо текста просто цифры, то поле текста нормально обновляется и цифры заносятся в базу. Текст в базу не заносится и поле не обновляется.
Вот такой затык, все вроде работает, но как-то не так.



Спустя 4 часа, 6 минут, 40 секунд (4.08.2011 - 13:28) T1grOK написал(а):
Пост данные точно "доходят" до скрипта?
(Зачем в форме формировать значение news_id 2 раза??? Вы передаете и пост и гет значение news_id).

Спустя 15 минут, 28 секунд (4.08.2011 - 13:43) boomber написал(а):
Цитата (T1grOK @ 4.08.2011 - 10:28)
Пост данные точно "доходят" до скрипта?
Ну если исходный текст новости исправлять на цифры (например 56456456213), то в базе все обновляется. А текст нормальный не обновляется.

Цитата (T1grOK @ 4.08.2011 - 10:28)
(Зачем в форме формировать значение news_id 2 раза??? Вы передаете и пост и гет значение news_id).
Это осталось у меня от первоначального скрипта. Изначально было
WHERE news_id='.$_GET['_news_id'].'
Потом попробовал ID вывести в скрытое поле и оттуда сравнивать при UPDATE. Работает одинаково. Точнее, одинаково как-то неправильно.

ЗЫ: может есть какой-то другой вариант вывести данные в редактируемые формы? Хотя, тут вроде работает...

Спустя 4 минуты, 55 секунд (4.08.2011 - 13:48) T1grOK написал(а):
А поле в базе точно имеет тип текст?
Какие нибудь обработки ПОСТ данных производятся перед внесением в БД.

Спустя 12 минут, 38 секунд (4.08.2011 - 14:01) boomber написал(а):
Цитата (T1grOK @ 4.08.2011 - 10:48)
А поле в базе точно имеет тип текст?

Да. В БД новость типа TEXT, дата типа DATE.
Изначально сделал скрипт только добавления.
$ntitle=$_POST['title'];
$ntext=$_POST['newstext'];
$now=$_POST['data'];

mysql_query("Insert INTO news(ntext,ntitle,ndate) VALUES('$ntext','$ntitle','$now')");

Новость добавляется нормально. И дата и текст забираются в БД из INPUT типа текст. А дальше решил сделать редактирование. Поля вроде такие же.

Цитата (T1grOK @ 4.08.2011 - 10:48)
Какие нибудь обработки ПОСТ данных производятся перед внесением в БД.
Сначала производится вывод из БД следующим скриптом:
$query = 'SELECT news_id,ndate,ntext FROM news ORDER BY ndate DESC,news_id DESC';
$result = mysql_query($query)
or die(mysql_error());
echo '<h2>Список новостей</h2>';
echo '<table width="1000" border="1" cellpadding="2" cellspacing="0">';
echo '<tr><th>ID</th><th width="100">Дата</th><th>Новость</th><th>Ред.</th><th>Уд.</th></tr>';
while($i = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td>'.$i['news_id'].'</td>';
echo '<td>'.$i['ndate'].'</td>';
echo '<td>'.$i['ntext'].'</td>';
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editform&news_id='.$i['news_id'].'">Редактировать</a></td>';
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=delete_n&news_id='.$i['news_id'].'">Удалить</a></td>';
echo '</tr>';
}
echo '</table>';
Соответственно ссылка "Редактировать вызывает функцию editform() (из первого поста) и передает ID. Как бы, никакой обработки данных вроде нет. Хотя сам об этом же думаю.
Я начинающий, так что уже все перебрал, не знаю куда копнуть. Может в кодировках что?

Спустя 36 минут, 30 секунд (4.08.2011 - 14:37) boomber написал(а):
Пипец...
Вот так заработало:
$query='UPDATE news SET ndate="'.$_POST['date'].'", ntext="'.$_POST['news'].'" WHERE news_id='.$_POST['news_id'].'';

То есть, в двойные кавычки переменные забрал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.