<form method="post">
<div style="width: 11640px; height: 950px; overflow: auto;">
<div style="width: 540px; height: 950px; float: left;">
<?php
$sql = "SELECT * FROM message ORDER BY id_m ASC";
$message_result = mysql_query($sql, $db);
mysql_close();
while($row_message = mysql_fetch_array($message_result))
{
echo "<div id='del_messDiv' class='bdr'>
<div id='checkMessBox'><input type='checkbox' name='message[]' value='$row_message[0]' /></div>
<div id='del_messAuthor'>$row_message[2]</div>
<div id='del_messMessage'>$row_message[1]</div>
</div>";
}
if(isset($_POST['delMessSub']))
{
if(!empty($_POST))
{
$val = array();
foreach($_POST['message'] as $value)
{
if(preg_match("|^[/d]*$|", $value))
{
$val[] = $value;
}
}
}
$sql_del = "DELETE FROM message WHERE id_m IN (".implode(",", $val).")";
mysql_query($sql_del, $db);
if(mysql_query($sql_del, $db))
{
echo "<script>window.location.href='./../panel.php?del_message'</script>";
}
}
?>
</div>
</div>
<div id="admBtn" style="margin: 0 auto;"><input name="delMessSub" id="defBtn" type="submit" value="Удалить" /></div>
</form>
Мне необходимо удалить несколько записей, отмеченных чекбоксами, из базы данных. Но удаления не происходит.
Когда писал скрипт, то опирался на книгу Кузнецов/Симдянов "Головоломки на PHP для хакера".
Спустя 15 минут, 31 секунда (19.05.2012 - 22:06) redreem написал(а):
name='message[]' - у всех инпутов будет только такое имя. думается в этом проблема.
сделай
и посмотри что в посте приходит.
сделай
if(isset($_POST['delMessSub']))
{
print_r($_POST)
и посмотри что в посте приходит.
Спустя 12 минут, 1 секунда (19.05.2012 - 22:18) Acidrain написал(а):
Цитата (redreem @ 19.05.2012 - 18:06) |
if(isset($_POST['delMessSub'])) и посмотри что в посте приходит. |
Выводит это:
один чекбокс: Array ( [message] => Array ( [0] => 5 ) [delMessSub] => Удалить )
два чекбокса: Array ( [message] => Array ( [0] => 4 [1] => 5 ) [delMessSub] => Удалить )
4 и 5 соответствуют значениям выбранных чекбоксов.
Спустя 7 минут, 12 секунд (19.05.2012 - 22:25) redreem написал(а):
напиши после
$sql_del = "DELETE FROM message WHERE id_m IN (".implode(",", $val).")";
echo $sql_del;
Спустя 1 минута, 22 секунды (19.05.2012 - 22:27) Acidrain написал(а):
Но стоит мне пропустить все через это конструкцию:
то
выглядит так: Array ( ) .
if(!empty($_POST))
{
$val = array();
foreach($_POST['message'] as $value)
{
if(preg_match("|^[/d]*$|", $value))
{
$val[] = $value;
}
}
}
то
print_r($val);
выглядит так: Array ( ) .
Спустя 1 минута, 54 секунды (19.05.2012 - 22:29) Acidrain написал(а):
Цитата (redreem @ 19.05.2012 - 18:25) |
echo $sql_del; |
DELETE FROM message WHERE id_m IN ()
Спустя (19.05.2012 - 22:29) redreem написал(а):
а $row_message[0] как выглядит?
Спустя 7 минут, 2 секунды (19.05.2012 - 22:36) Acidrain написал(а):
Цитата (redreem @ 19.05.2012 - 18:29) |
а $row_message[0] как выглядит? |
Да с этим все в порядке, не раз проверял. Каждому сообщению присваивается родной id.
Спустя 4 минуты, 54 секунды (19.05.2012 - 22:41) redreem написал(а):
это к тому, что для понимания регулярки нужно видеть что распарсивается. в регулярке может вместо * поставить +
Спустя 6 минут, 12 секунд (19.05.2012 - 22:47) Acidrain написал(а):
if(preg_match("|^[/d]*$|", $value))
{
}
Закомментировал это условие и все удалилось на ура!
Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 6 [4] => 7 [5] => 8 )
DELETE FROM message WHERE id_m IN (3,4,5,6,7,8)