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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
teddy
Отправлено: 08 Мая, 2013 - 18:50:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Добрый вечер. Написал гостевую книгу с возможностью удалять сообщения, интересует алгоритм реализации редактирования уже существующих сообщений. Есть пара приблизительных алгоритмов, но хотел бы услышать совет опытных мастеров как это все грамотно сделать?

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

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


Спасибо заранее )
(Добавление)
В основном интересует тот момент, что бы когда была нажата кнопка редактировать, на странице редактирования в textarea высвечивалось именно то сообщение, которое было выбрано... если просто сделать <textarea><?=$msg?></textarea> то понятно что получим не то, что нужно... надо как то по id его туда записать.. но как сделать это без запроса не представляю пока что
 
 Top
EuGen Администратор
Отправлено: 08 Мая, 2013 - 19:11:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если Вы уже выбрали сообщение из БД (чтобы показать) - зачем делать это снова? Используйте уже имеющийся текст.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 08 Мая, 2013 - 19:13:32
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen пишет:
Если Вы уже выбрали сообщение из БД (чтобы показать) - зачем делать это снова? Используйте уже имеющийся текст.

Да, вот и я о том же ) Но как сделать что бы при нажатии на кнопку редактировать(которая есть рядом с каждым сообщением), что бы это же сообщение появлялось в textarea? А не пустое окно, где приходится все вводить заново и делать апдейт? <textarea><?=$msg?></textarea> всегда выдает одно и то же сообщение независимо от выбранного id...
 
 Top
avtor.fox
Отправлено: 08 Мая, 2013 - 19:27:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




teddy, ну, я понял что никакую гостевую Вы не писали)
Код покажите хотя бы.
 
 Top
teddy
Отправлено: 08 Мая, 2013 - 19:34:15
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




avtor.fox
Писал... код большой, разделен на 5 файлов не считая файла подключения к БД. 1 главный, где есть форма и куда инклюдятся нужные файлы в случае если это необходимо по логике. второй содержит в себе класс, а в нем методы, а 3 остальные инклюдятся в главный файл для обработки данных, которые пришли, а именно, один обрабатывает удаление постов, другой массив который возвращается из выборки, а третий за обработку отправленных сообщений. Знаю, закодено немного "запутанно", но это чисто практическое задание для себя, что бы хоть как то попрактироваться в использовании ООП.

В итоге хочу сделать + редактирование сообщений. За его написание пока не брался ибо не знаю точный алгоритм, привык знать что буду делать, а потом уже делать... вот и решил спросить здесь ) т.к сам пока не понимаю... Идею редактирования выше описал )

(Отредактировано автором: 08 Мая, 2013 - 19:35:17)

 
 Top
nagibator
Отправлено: 08 Мая, 2013 - 19:43:01
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Янв. 2013  
Откуда: Новосибирск (Россия)


Помог: 1 раз(а)




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.  
 
 Top
teddy
Отправлено: 08 Мая, 2013 - 19:45:48
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




nagibator
Спасибо большое за код, посмотрю обязательно чуть позже ) сейчас пока никак..

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

(Отредактировано автором: 08 Мая, 2013 - 19:49:41)

 
 Top
nagibator
Отправлено: 08 Мая, 2013 - 19:51:54
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Янв. 2013  
Откуда: Новосибирск (Россия)


Помог: 1 раз(а)




teddy, думаю с помощью одного никак. хз

(Отредактировано автором: 08 Мая, 2013 - 20:20:05)

 
 Top
teddy
Отправлено: 08 Мая, 2013 - 19:56:13
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




nagibator пишет:
Для чего второй SELECT ?
Там и одного хватит.

как я уже писал выше, хочу сделать это на основе того SELECT-а, который у меня производит выборку сообщений в гостевой книге. Ну те сообщения, которые показываются в гостевой книге. Рядом с ними кнопка редактировать и удалить... это и есть тот самый первый селект... а с вашим получается уже 2... удаление сделал, надо бы ещё редактирование... на основе того же selecta, об этом думал, что можно ли не составляя второй запрос на select
 
 Top
EuGen Администратор
Отправлено: 08 Мая, 2013 - 20:00:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Простой пример:
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>

- но за тегами нужно будет следить отдельно - думаю, доделаете.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 08 Мая, 2013 - 23:03:51
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
Спасибо, ух как постарались Хорошо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB