Помогите пожалуйста с запросом.
Делаю админку редактирования ленты новостей.
Вывожу список новостей со ссылками на форму для редактирования.
Сама форма делается следующим кодом:
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).
(Зачем в форме формировать значение 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';Соответственно ссылка "Редактировать вызывает функцию editform() (из первого поста) и передает ID. Как бы, никакой обработки данных вроде нет. Хотя сам об этом же думаю.
$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>';
Я начинающий, так что уже все перебрал, не знаю куда копнуть. Может в кодировках что?
Спустя 36 минут, 30 секунд (4.08.2011 - 14:37) boomber написал(а):
Пипец...
Вот так заработало:
То есть, в двойные кавычки переменные забрал.
Вот так заработало:
$query='UPDATE news SET ndate="'.$_POST['date'].'", ntext="'.$_POST['news'].'" WHERE news_id='.$_POST['news_id'].'';
То есть, в двойные кавычки переменные забрал.