Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: редактирование сообщений
Форумы портала PHP.SU » » Вопросы новичков » редактирование сообщений

Страниц (1): [1]
 

1. teddy - 08 Мая, 2013 - 18:50:31 - перейти к сообщению
Добрый вечер. Написал гостевую книгу с возможностью удалять сообщения, интересует алгоритм реализации редактирования уже существующих сообщений. Есть пара приблизительных алгоритмов, но хотел бы услышать совет опытных мастеров как это все грамотно сделать?

Я планирую приблизительно так - если нажата кнопка редактировать, то берем id сообщения и через UPDATE обновляем. Только одно не могу понять, всегда берется то сообщение, которое было отправлено в последний раз(в textarea). Для этого нужно сначала сделать SELECT по Id а потом уже UPDATE? или есть какой то более хитрый способ? Что то мне кажется странным то, что для простой кнопки требуется 2 разных запроса... Да ещё и учитывая то, что SELECT у меня уже есть ибо сообщения в гостевой книге светятся не с воздуха...

пробовал сделать и так <textarea><?=$msg?></textarea> но тоже ничего не приходит. всегда одно и тоже сообщение - мб что то похожее подскажете вместо двойного запроса?
Тоесть мне не нужно что бы при редактировании открывалось "чистое поле для нового сообщения" а чтоб было видно внутри textarea уже существующее сообщение с возможностью его редактировать.


Спасибо заранее )
(Добавление)
В основном интересует тот момент, что бы когда была нажата кнопка редактировать, на странице редактирования в textarea высвечивалось именно то сообщение, которое было выбрано... если просто сделать <textarea><?=$msg?></textarea> то понятно что получим не то, что нужно... надо как то по id его туда записать.. но как сделать это без запроса не представляю пока что
2. EuGen - 08 Мая, 2013 - 19:11:16 - перейти к сообщению
Если Вы уже выбрали сообщение из БД (чтобы показать) - зачем делать это снова? Используйте уже имеющийся текст.
3. teddy - 08 Мая, 2013 - 19:13:32 - перейти к сообщению
EuGen пишет:
Если Вы уже выбрали сообщение из БД (чтобы показать) - зачем делать это снова? Используйте уже имеющийся текст.

Да, вот и я о том же ) Но как сделать что бы при нажатии на кнопку редактировать(которая есть рядом с каждым сообщением), что бы это же сообщение появлялось в textarea? А не пустое окно, где приходится все вводить заново и делать апдейт? <textarea><?=$msg?></textarea> всегда выдает одно и то же сообщение независимо от выбранного id...
4. avtor.fox - 08 Мая, 2013 - 19:27:33 - перейти к сообщению
teddy, ну, я понял что никакую гостевую Вы не писали)
Код покажите хотя бы.
5. teddy - 08 Мая, 2013 - 19:34:15 - перейти к сообщению
avtor.fox
Писал... код большой, разделен на 5 файлов не считая файла подключения к БД. 1 главный, где есть форма и куда инклюдятся нужные файлы в случае если это необходимо по логике. второй содержит в себе класс, а в нем методы, а 3 остальные инклюдятся в главный файл для обработки данных, которые пришли, а именно, один обрабатывает удаление постов, другой массив который возвращается из выборки, а третий за обработку отправленных сообщений. Знаю, закодено немного "запутанно", но это чисто практическое задание для себя, что бы хоть как то попрактироваться в использовании ООП.

В итоге хочу сделать + редактирование сообщений. За его написание пока не брался ибо не знаю точный алгоритм, привык знать что буду делать, а потом уже делать... вот и решил спросить здесь ) т.к сам пока не понимаю... Идею редактирования выше описал )
6. nagibator - 08 Мая, 2013 - 19:43:01 - перейти к сообщению
teddy,
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['edit'])) {
  3. $id = abs(intval($_GET['edit'])); // ID сообщения переданный через $_GET['edit']
  4. $res = mysql_fetch_array(mysql_query("SELECT `поле сообщения` FROM `таблица гостевой` WHERE `id` = '".$id."' LIMIT 1"));
  5.  
  6. if (!$res) {
  7. die('Сообщение не найдено');
  8. } else {
  9. if (!isset($_POST['edit'])) {
  10. echo '<form action="?edit='.$id.'" method="POST">';
  11. echo 'Сообщение:<br /><textarea name="edit">'.$res['поле сообщения'].'</textarea><br />';
  12. echo '<input type="submit" value="Изменить" />';
  13. echo '</form>';
  14. } else {
  15. $str = mysql_real_escape_string($_POST['edit']);
  16. mysql_query("UPDATE `таблица гостевой` SET `поле сообщения` = '".$str."' WHERE `id` = '".$id."'");
  17. echo 'Сообщение успешно изменено';
  18. }
  19. }
  20. }
  21.  
7. teddy - 08 Мая, 2013 - 19:45:48 - перейти к сообщению
nagibator
Спасибо большое за код, посмотрю обязательно чуть позже ) сейчас пока никак..

но только вот все же присутствует второй SELECT, а я как бы хотел без него ) если так можно программно конечно же
8. nagibator - 08 Мая, 2013 - 19:51:54 - перейти к сообщению
teddy, думаю с помощью одного никак. хз
9. teddy - 08 Мая, 2013 - 19:56:13 - перейти к сообщению
nagibator пишет:
Для чего второй SELECT ?
Там и одного хватит.

как я уже писал выше, хочу сделать это на основе того SELECT-а, который у меня производит выборку сообщений в гостевой книге. Ну те сообщения, которые показываются в гостевой книге. Рядом с ними кнопка редактировать и удалить... это и есть тот самый первый селект... а с вашим получается уже 2... удаление сделал, надо бы ещё редактирование... на основе того же selecta, об этом думал, что можно ли не составляя второй запрос на select
10. EuGen - 08 Мая, 2013 - 20:00:08 - перейти к сообщению
Простой пример:
CODE (javascript):
скопировать код в буфер обмена
  1. function editHandler(id)
  2. {
  3.         var rMessage = document.getElementById('message'+id);
  4.         var rEdit    = document.getElementById('edit'+id);
  5.         if(!rMessage || !rEdit)
  6.         {
  7.             return null;
  8.         }
  9.         document.getElementById('buffer').innerHTML=rMessage.innerHTML;
  10.         rMessage.innerHTML = '<textarea id="data'+id+'">'+rMessage.innerHTML+'</textarea>';
  11.         rEdit.innerHTML    = '<a href="#" onclick="saveHandler(\''+id+'\'); return false;">Save</a>/<a href="#" onclick="cancelHandler(\''+id+'\'); return false;">Cancel</a>';
  12.         return true;
  13. }
  14. function saveHandler(id)
  15. {
  16.         alert('Got message id='+id+' need to implement saving new content: '+document.getElementById('data'+id).value);
  17. }
  18.  
  19. function cancelHandler(id)
  20. {
  21.         var rMessage = document.getElementById('message'+id);
  22.         var rEdit    = document.getElementById('edit'+id);
  23.         if(!rMessage || !rEdit)
  24.         {
  25.             return null;
  26.         }
  27.         rMessage.innerHTML = document.getElementById('buffer').innerHTML
  28.         rEdit.innerHTML    = '<a href="#" onclick="editHandler(\''+id+'\'); return false;">Edit</a>';
  29.         document.getElementById('buffer').innerHTML='';
  30.         return true;
  31. }

CODE (html):
скопировать код в буфер обмена
  1. <table>
  2.     <tr>
  3.         <td><span id='message1'>First message (id=1)</span></td>
  4.         <td><span id='edit1'><a href='#' onclick="editHandler('1'); return false;">Edit</a></span><td>
  5.     </tr>
  6.     <tr>
  7.         <td><span id='message4'>Second message (id=4)</span></td>
  8.         <td><span id='edit4'><a href='#' onclick="editHandler('4'); return false;">Edit</a></span><td>
  9.     </tr>
  10.     <tr>
  11.         <td><span id='message7'>Third message (id=7)</span></td>
  12.         <td><span id='edit7'><a href='#' onclick="editHandler('7'); return false;">Edit</a></span><td>
  13.     </tr>
  14. </table>
  15. <div id='buffer' style='display:none'></div>

- но за тегами нужно будет следить отдельно - думаю, доделаете.
11. teddy - 08 Мая, 2013 - 23:03:51 - перейти к сообщению
EuGen
Спасибо, ух как постарались Хорошо

 

Powered by ExBB FM 1.0 RC1