Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 15.06.2010, 17:29   #1
shytka
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 19
Восклицание Правильное удаление строки в БД с определённым id ..

Собственно сабж .. пробую удалить строку из таблички .. вот так не работает.. тыкните носом где запрос не так оформил ??

ну в смысле SELECT работает замечательно .. а DELETE вроде написан правильно .. но как я понимаю по логике он не видит что ему удалять ...
PHP код:
<?php

$sql 
"SELECT id, time, name, text, full_text FROM news";
$rs mysql_query($sql);
if (
'POST' == $_SERVER['REQUEST_METHOD']) {
$del_id mysql_query("DELETE FROM news WHERE id='$_POST[id]' ");
}
?>
<table class="edit_news_tbl" cellpadding="0" cellspacing="0">
<tr>
<td align="center" width=30 height=25 class="edit_news_td_w"><b>ID</b></td>
<td align="center" width=150 class="edit_news_td_w"><b>Добавлена</b></td>
<td align="center" width=450 class="edit_news_td_w"><b>Новость</b></td>
<td align="center" width=100 class="edit_news_td_w"><b>Действие</b></td>
</tr> 

<?php
while ($r mysql_fetch_array($rs)) {
echo  <<<_HTML_
<tr>
<td align=center height=25 class="edit_news_td_b">
$r[0]</td>
<td align=center class="edit_news_td_w">
$r[1]</td>
<td align=center class="edit_news_td_b">
$r[2]</td>
<td align=center class="edit_news_td_w">
<a href="admin.php?id=
$r[0]">DEL</a>
_HTML_;
    }
?>

<?php
MYSQL_CLOSE
();
?>
</td>
</tr></table>

<?php  
echo 'результат обработки <b>DEL</b>:&nbsp;&nbsp;';
var_dump($dell_id); // результат запроса
?>

Последний раз редактировалось shytka; 15.06.2010 в 17:37.
shytka вне форума Ответить с цитированием
Старый 15.06.2010, 18:34   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Потому что в твоём случае id передаётся в $_GET, а не в $_POST.

P.S. Скрипт просто таки кишит возможностями для взлома.
http://phpfaq.ru/slashes
Почитай на досуге.
Johnatan вне форума Ответить с цитированием
Старый 16.06.2010, 05:23   #3
LeoN
Форумчанин
 
Аватар для LeoN
 
Регистрация: 03.11.2006
Сообщений: 278
По умолчанию

Код:
"DELETE FROM news WHERE id='$_POST[id]' "
замените на
Код:
"DELETE FROM news WHERE id='".$_POST[id]."' "
PHP почему то не меняет глобальные переменные в MySQL-запросе "оформленном" как строка.
для защиты используйте хотя бы это: mysql_real_escape_string()
так же рекомендую выделять поля и таблицы:
Код:
"SELECT `id`, `time`, `name`, `text`, `full_text` FROM `news`;
DELETE FROM `news` WHERE `id`='".$_POST[id]."' "
Разработка сайтов -дело прикольное

Последний раз редактировалось LeoN; 16.06.2010 в 05:52.
LeoN вне форума Ответить с цитированием
Старый 16.06.2010, 15:33   #4
shytka
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 19
По умолчанию

2 LeoN

неа ( не работает ...
вот так сделал ..

ну по логике ..нужно запрос так оформить .. : ЕСЛИ ссылка с айди таким ТО при нажатии удалять строку с этим айди
правильно ? .. вот условие вроде как есть $del_id = mysql_query("DELETE FROM 'news' WHERE 'id'='".$_POST[id]."' "); .. так почему не удаляет ???
PHP код:
<?php
$sql 
"SELECT `id`, `time`, `name`, `text`, `full_text` FROM `news`";
$rs mysql_query($sql);

$del_id mysql_query("DELETE FROM 'news' WHERE 'id'='".$_POST[id]."' ");
$del mysql_real_escape_string($del_id);
?>
<table class="edit_news_tbl" cellpadding="0" cellspacing="0">
<tr>
<td align="center" width=30 height=25 class="edit_news_td_w"><b>ID</b></td>
<td align="center" width=150 class="edit_news_td_w"><b>Добавлена</b></td>
<td align="center" width=450 class="edit_news_td_w"><b>Новость</b></td>
<td align="center" width=100 class="edit_news_td_w"><b>Действие</b></td>
</tr> 

<?php
while ($r mysql_fetch_array($rs)) {
echo  <<<_HTML_
<tr>
<td align=center height=25 class="edit_news_td_b">
$r[0]</td>
<td align=center class="edit_news_td_w">
$r[1]</td>
<td align=center class="edit_news_td_b">
$r[2]</td>
<td align=center class="edit_news_td_w">
<a href="admin.php?id=
$r[0]">DEL</a>
_HTML_;
    }
?>
<?php
MYSQL_CLOSE
();
?>
</td>
</tr></table>

<?php  
echo 'результат обработки <b>DEL</b>:&nbsp;&nbsp;';
var_dump($del); // результат запроса
?>
shytka вне форума Ответить с цитированием
Старый 16.06.2010, 16:37   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Попробуйте взять название таблицы и столбца в такие кавычки: ` `
motorway вне форума Ответить с цитированием
Старый 16.06.2010, 18:44   #6
LeoN
Форумчанин
 
Аватар для LeoN
 
Регистрация: 03.11.2006
Сообщений: 278
По умолчанию

в эти берутся значения: '$variable'
а в эти поля и таблицы: `id`,`users`
на сколько я помню если применять апострофы к полям и таблицам запрос будет ошибочный.
Разработка сайтов -дело прикольное
LeoN вне форума Ответить с цитированием
Старый 16.06.2010, 19:55   #7
kpachbiu
взагрузке.рф
Форумчанин
 
Аватар для kpachbiu
 
Регистрация: 13.06.2010
Сообщений: 117
По умолчанию

Совет по отладке:
Эту строку
Код:
$del_id = mysql_query("DELETE FROM 'news' WHERE 'id'='".$_POST[id]."' ");
запиши так:
Код:
$del_id = mysql_query("DELETE FROM `news` WHERE 'id'='".$_POST[id]."'") or die(mysql_error());
И так же с другими запросами, увидишь в чем ошибка.
kpachbiu вне форума Ответить с цитированием
Старый 16.06.2010, 21:03   #8
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Ну вообще это общее правило при отладке скриптов - ставить вывод ошибок в начале скрипта. А то так можно неделями пытаться искать ошибку, когда она не выводится. Там-то сразу будет написано, что за ошибка.
motorway вне форума Ответить с цитированием
Старый 17.06.2010, 13:11   #9
shytka
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 19
По умолчанию

2 kpachbiu

вывел в отдельный файлик .. ну чуть видоизменил ... не пашет (((
PHP код:
$id = @$_POST['id'];
if (
$id) {        
      if (
mysql_query("DELETE FROM `news` WHERE 'id'='".$_POST[id]."'") or die(mysql_error())) echo ('УДАЛЕНО');

...

а вот если так делаю :
PHP код:
if (mysql_query("DELETE FROM `news` WHERE `id`='".$_POST[id]."'") or die(mysql_error())) echo ('УДАЛЕНО'); 
тогда запрос отрабатывается НО КРИВО (( удаляет строку с айди равным нулю .. и всё.. больше не хочет удалять ..

Последний раз редактировалось shytka; 17.06.2010 в 13:23.
shytka вне форума Ответить с цитированием
Старый 17.06.2010, 13:35   #10
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

А если попробовать не $_POST[id], а $_POST['id'] ?
ssdm вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильное преобразование с строки в строку string. the_deer_one Общие вопросы C/C++ 10 06.04.2010 22:50
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 14:06
Удаление листов в книге по определённым условиям inside9 Microsoft Office Excel 2 07.08.2009 13:37
Правильное удаление Blob-поля из базы Neeter БД в Delphi 5 15.05.2009 17:37
Заливка определённым цветом? M17 Microsoft Office Excel 2 03.04.2009 12:45