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]   

> Описание: Немогу никак разобраться как удалить строку
hanns-g
Отправлено: 18 Июня, 2010 - 15:50:25
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


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




Добрый день.
Написал скрипт комментариев
надо чтобы пользователь мог удалить свой комментарий
разобрался со всем, если ИД авторизированого пользователя совпадает с ИД пользователи который писал комментарий, он видит кнопку - удалить комментарий.
(каждый пользователь может комментировать статью один только раз)

вот, теперь надо организовать работу этой самой кнопочки.
нашел это:
http://forum.php.su/topic.php?fo...1&topic=3218

вроде сделал так же - не работает

Структура таблицы комментариев:
comid - ID комментария(уникальное для каждого комментария, по нему и надо удалять комментарий)
artid - id статьи(страницы)
comm - текст комм.
userid - id пользователя который написал комм.

вот код который должен выводить кнопку для удаления, после каждого комм.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if ( $mid == ($myid) ){
  3.                                                                        
  4.                                 $mycomm_id = $comm->comid;
  5.                                 echo "<script>function ReloadButton(){location.reload;}</script>";
  6.                                         if (isset ($_POST['del']))
  7.                                          {
  8.                                                 $id = intval($_POST['del']);
  9.                                                 $result_delete = mysql_query ("DELETE FROM `s_comm` WHERE `s_comm`.`comid` = {$mycomm_id} LIMIT 1 ");
  10.                                         }
  11.                                         ?>
  12.                                                                        
  13.                                         <form name="delete_form" method="post" action="">
  14.                                         <input type="hidden" name="delid" value="$mycomm_id">
  15.                                         <input type="submit" name="del"  ONCLICK=\"ReloadButton()\" value="Delete">
  16.                                         </form>
  17.                                                                        
  18.                                         <?PHP
  19.  
  20.                                 } ?>
  21.  



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

(Отредактировано автором: 18 Июня, 2010 - 15:56:01)

 
 Top
alexspb
Отправлено: 18 Июня, 2010 - 15:58:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


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




hanns-g пишет:
вроде сделал так же - не работает

но что-то ведь происходит? после запроса проверяйте на ошибки - echo mysql_error();
(Добавление)
$result_delete = ... - лишнее, просто выполняется запрос:
mysql_query();

Можете условием проверять
if (!mysql_query(...)) echo mysql_error();

(Отредактировано автором: 18 Июня, 2010 - 16:01:09)



-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
hanns-g
Отправлено: 18 Июня, 2010 - 16:03:59
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


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




сделал.
ошибок не выводит никаких, просто перезагрузка страницы
и усе Огорчение
(Добавление)
так, по немногу начинает получатся...

if (isset ($_POST['del']))
{
$id = intval($_POST['delid']);
mysql_query("DELETE FROM `s_comm` WHERE `s_comm`.`comid` = {$id}");
echo mysql_error();
echo "<script>function ReloadButton(){location.reload;}</script>";
}

вот это перед массивом комм.
а это после каждого комментария:

<form name="delete_form" method="post" action="">
<input type="hidden" name="delid" value="<?php echo $mycomm_id ?>">
<input type="submit" name="del" ONCLICK="ReloadButton()" value="<?php echo $myreview_id ?>">
</form>

вроде все работает, только есть лажа:
нажимаю кнопку "удалить комм." страница перезагружается
и выводит те же значения что и были раньше (то есть как бы ничего не удалилось)
но когда жму обновить страницу(то есть после следующей перезагрузки страницы)
записи уже нет

получается что запись после нажатия кнопки удалилась, но значения еще выводятся устаревшие, а обновляются уже после второй загрузки

че мне с этим делать?
люди помогите плиз...
 
 Top
Phantik
Отправлено: 18 Июня, 2010 - 19:12:04
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


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




После удаления строки из базы(когда отработает mysql_query("DELETE...")) надо перезапрашивать страницу GET-ом

как-то так:
header("Location: /твоя_страница.php");
 
 Top
jumperweb
Отправлено: 18 Июня, 2010 - 21:49:30
Post Id



Новичок


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


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




Может сделать вывод комментариев асинхронным запросом с помощью так называемой технологии "ajax".
Для этого подойдет фреймворк jquery

(Отредактировано автором: 18 Июня, 2010 - 21:59:35)

 
 Top
alexspb
Отправлено: 18 Июня, 2010 - 22:31:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


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




hanns-g пишет:
нажимаю кнопку "удалить комм." страница перезагружается
и выводит те же значения что и были раньше (то есть как бы ничего не удалилось)


так у вас в форме перезагрузка, а не отправка данных:
PHP:
скопировать код в буфер обмена
  1. echo "<script>function ReloadButton(){location.reload;}</script>";

<input type="submit" name="del" ONCLICK="ReloadButton()"
зачем вообще событие здесь, если тип "submit" - уберите событие, по клику должна форма данные отправлять.

Вы, наверное, не проверяли вообще какие данные отправляются скрипту, пользуйтесь для дебага:


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
hanns-g
Отправлено: 19 Июня, 2010 - 11:21:27
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


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




Добрый день.
Убрал событие как Вы и сказали...

<form name="delete_form" method="post" action="">
<input type="hidden" name="delid" value="<?php echo $comm_id ?>">
<input name="del" type="submit" class="button" value="dell">
</form>

никакой рейкции, данные отправляюттся(тоесть строка удаляется)
но страница загружается все равно со старым значением

переделывать все - это жесть, надо как то это подправить

и теперь еще одна проблема, заказчик хочет еще и редактирование чтобы было...
то есть, чтобы вместо текста выводилось текстовое поле
и под ним две кнопки - сохранить и удалить

я в ужасе

по поводу print_r($_POST);
после запроса выдает
Array ( [delid] => 32 [del] => 32 )
ИД строки в БД - тут вроде все правильно


люди помогите плиз, если у кого минута есть Огорчение

по поводу GET - понимаете страницы разные
и прописать location для страницы... я незнаю как чтоб он менялся, чтоб был путь именно к той странице, на которой я нахожусь

(Отредактировано автором: 19 Июня, 2010 - 11:34:34)

 
 Top
JustUserR
Отправлено: 19 Июня, 2010 - 11:29:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




alexspb пишет:
Так у вас в форме перезагрузка, а не отправка данных:
В данном случае функция ReloadButton вообще ничего не делает - поскольку берется объект функции window.location.reload и никуда не сохраняется и не копируется и не возвращается - так что данная функция ничего не выполнят и страница из-за нее перезагружаться не должна
hanns-g А истинной причиной проблемы скорее всего является отсутствие action в форме - в таком случае при нажатии submit-кпопки она никуда не отправляется и просто перезагружает страницу Даже если обработчиком формы является этот же PHP-скрипт то нужно явно прописать значения <?php echo $_SERVER['PHP_SELF']; ?> Дело в том что трактовка пустого action зависит от настроек Apache в данной директории - это может расцениваться как корневой путь / но не как текущий PHP-скрипт - хотя бы по той причине что Apache не обязан и не будет помнить каким PHP-скриптом была сгенерирована определенная форма от которой в данный момент отправляется запрос
Что касается вашей JS-функции то вероятно вы имели в виду удаление комментария без перезагрузки страницы - это можно реализовать с помощью Iframe-транспорта для обновления данных на странице
jumperweb пишет:
Для этого подойдет фреймворк jquery
Для одной функции удаления комментария в пару строк кода не стоит подключать тяжеловесный фреймворк


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
nikandtas
Отправлено: 19 Июня, 2010 - 21:53:07
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2010  


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




hanns-g, как это сделано у меня:

Кнопка:
CODE (html):
скопировать код в буфер обмена
  1. //Показываем кнопку "удалить" если имя из сессии совпадает с именем автора записи
  2. if ($user_id !== $id){
  3. $del_comment="<a href='$url/add_friend.php?to=$user_id'>В друзья</a>";}
  4. else {$del_comment="<form action='$url/delete_com.php' method='post'>
  5. <input type='hidden' name='user_id' value='$user_id'>  
  6. <input type='hidden' name='page' value='$page'>
  7. <input type='hidden' name='num' value='$num'>                
  8. <input type='submit' value='Удалить>>'  class='button'>
  9. </form>$user_id ";}

CSS
CODE (html):
скопировать код в буфер обмена
  1. .button {
  2. height:18px;
  3. border-color:#eee #EFF2F3 #EFF2F3 #eee; /*1 2 2 1*/
  4. border-style:solid;
  5. border-width:1px;
  6. background:#EFF2F3;
  7. cursor:pointer;
  8. }

обработчик
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include"connect.php";
  3. $id = $_POST['user_id'];
  4. $page = $_POST['page'];
  5. $num = $_POST['num'];
  6.         $query="DELETE FROM nikandta_comment.data WHERE `num`='$num'";
  7. mysql_query($query);
  8.         $query2="UPDATE nikandta_bd.articles SET comments = comments-1 WHERE `id`='$page'";
  9. $result = mysql_query($query2);
  10. echo"
  11. <meta http-equiv='Refresh' content='1; URL=$url/article/$page#1'>";
  12. echo "Запись #$num успешно удалена из базы.";
  13. ?>


Отредактировано модератором: JustUserR, 20 Июня, 2010 - 13:01:46
Обрамил PHP и HTML-коды в соответствующие BB-теги
 
 Top
JustUserR
Отправлено: 20 Июня, 2010 - 13:04:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




hanns-g пишет:
И прописать location для страницы... я незнаю как чтоб он менялся, чтоб был путь именно к той странице, на которой я нахожусь
Для того чтобы у вас успешно отправилась форма с запросом на удаление вам необходимо дать выполниться событию onsubmit и не менять значение в window.location.href - поскольку такими дейтсвиями вы только прекращаете отправку формы Если вы хотите отправить запрос и показать пользователю информацию о том что комментарий удален то можете сделать так - создаете статическую HTML-страницу с JS-скриптом и Iframe-элементом в которой у вас будет осуществляться отправка формы с помощью target - потом вы ждете события onload у iframe-а и только это будет означать что запрос от формы передался на web-сервер - после чего уже можно делать редирект с помощью window.location.href


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
hanns-g
Отправлено: 21 Июня, 2010 - 11:19:37
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


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




всем Огромное спасибо,
сегодня попробую
 
 Top
JustUserR
Отправлено: 21 Июня, 2010 - 12:42:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




hanns-g пишет:
Сегодня попробую
Можете посмотреть пример готовой JS-функция которая делает автоматическую POST-отправку формы http://forum.php.su/topic.php?fo...0&topic=1109 - вам нужно только добавить переадресацию target в скрытый iframe и по загрузке onload добавит перезагрузку общей HTML-страницы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB