Masian777
15.03.2013 - 10:29
Здравствуйте! Прошу помощи в реализации следующеей задачи.
В моей базе есть таблица со статьями, а в админке раздел удалить статью.
На сегодняшний день удаление происходит по одной статье, так как в форме input с типом radio:
echo "<form action='delete_post.php' method='post' name='deleted'>";
do{
echo "<p><label><input name='id' type='radio' value='$row[id]'> $row[title]</label></p>";
}
while ($row = mysql_fetch_array($sql));
echo "<input name='submit' type='submit' value='Удалить'></form>";
Нужно сделать так что бы была возможность удалять сразу несколько статей на пример типом checkbox:
$i = 0;
echo "<form action='delete_post.php' method='post' name='deleted'>";
do{
$i++;
echo "<p><label><input name='id$i' type='checkbox' value='$row[id]'> $row[title]</label></p>";
}
while ($row = mysql_fetch_array($sql));
echo "<input name='submit' type='submit' value='Удалить'></form>";
Вопрос в том
как вытащить переменные которые передались в файл который их обрабатывает чтобы в дальнейшем сформировать запрос к базе?Ведь не известно с каким $_POST[id$i] они передадуться.
Прошу сильно не пинать, я не спец в
php.
Michael
15.03.2013 - 10:34
Вот так именуй чекбоксы:
<input name='id[$i]'
В $_POST['id'] получишь массив.
_____________
There never was a struggle in the soul of a good man that was not hard
Masian777
15.03.2013 - 10:54
Хорошо. А как из массива $_POST['id'] вытащить все значение id которые были выбраны? Ведь я не знаю какую цифру прикрутил к id счетчик $i.
Michael
15.03.2013 - 11:00
В $_POST['id'] окажутся только отмеченные галочки.
А именовать эл-ты ты должен по id-шкам из базы.
В исходном коде у тебя будет <input name='id[100]' , значит в базе по ключу 100 этот элемент и удалишь.
_____________
There never was a struggle in the soul of a good man that was not hard
Masian777
15.03.2013 - 13:10
Цитата |
именовать эл-ты ты должен по id-шкам из базы |
В принципе да , ты прав можно обойтись и без счетчика. Но вопрос
Цитата |
А как из массива $_POST['id'] вытащить все значение id которые были выбраны? |
до сих пор мне не понятен. Я могу выбрать 3 статьи, а могу и 5. Как вытащить из массива $_POST['id'] все те переменные которые были выбраны. Может есть какая-нибудь функция которая вытаскивает все что попало в $_POST['id']?
Michael
15.03.2013 - 13:16
Цитата |
Может есть какая-нибудь функция которая вытаскивает все что попало в $_POST['id']? |
для этого используется цикл.
_____________
There never was a struggle in the soul of a good man that was not hard
killer8080
15.03.2013 - 13:16
Цитата (Masian777 @ 15.03.2013 - 11:10) |
Я могу выбрать 3 статьи, а могу и 5. Как вытащить из массива $_POST['id'] все те переменные которые были выбраны. |
if(!empty($_POST['id'])){
$query = "DELETE FROM `some_table` WHERE `id` IN (".
implode(',', array_map('intval', $_POST['id'])).")";
...
}
Valick
15.03.2013 - 14:24
Цитата |
Вот так именуй чекбоксы:
<input name='id[$i]' |
Лучше вот так:
echo "<p><label><input type='checkbox' name='id[]' value='".$row['id']."'>".$row['title']."</label></p>";
_____________
Стимулятор ~yoomoney - 41001303250491
Masian777
16.03.2013 - 23:57
$query = "DELETE FROM `some_table` WHERE `id` IN (".implode(',', array_map('intval', $_POST['id'])).")";
Данный запрос срабатывает и возвращает true. Но статьи из
базы не удаляются. :(
Игорь_Vasinsky
17.03.2013 - 00:06
ну да)) дело вкуса)
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
17.03.2013 - 01:24
Цитата (Masian777 @ 16.03.2013 - 21:57) |
Данный запрос срабатывает и возвращает true. Но статьи из базы не удаляются. |
название таблицы заменил на своё?
Masian777
17.03.2013 - 01:51
Все. Разобрался. Вот сдесь пост есть по этой теме -
ссылка. Спасибо большое за советы. Если бы про это не сказали:
`id` IN (".implode(',', array_map('intval', $_POST['id'])).")";
то недоперло бы наверное.
Игорь_Vasinsky
17.03.2013 - 01:54
по ссылке ужасный код. ужасный.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
17.03.2013 - 01:55
Цитата (Masian777 @ 16.03.2013 - 23:51) |
Все. Разобрался. |
ну так и в чем была проблема?
Цитата (Masian777 @ 16.03.2013 - 23:51) |
Вот сдесь пост есть по этой теме - ссылка. |
А то что в нем нет защиты от SQLi тебя не смущает?
Masian777
17.03.2013 - 02:12
Код получился вот такой:
$id = $_POST['id'];
if(!empty($id))
{
$query = "(";
foreach($id as $val) $query .= "$val,";
$query = substr($query, 0, strlen($query) - 1).")";
$sql = mysql_query("DELETE FROM data WHERE id IN ".$query,$db);
if($sql == true) {
echo "<p class='info_post'>Статьи удалены.</p>";
echo "<html><head><meta http-equiv='Refresh' content='2; URL=/admin/'></head></html>";}
else {echo "<p class='info_post'>Ошибка в запросе к базе данных. Пожалуйста уведомите администратора!<br /> Код ошибки: </p>";
exit (mysql_error());}}
Цитата |
и в чем была проблема? |
Четно говоря не разбирался.
Цитата |
А то что в нем нет защиты от SQLi тебя не смущает? |
Теперь смущает. А как защититься? Я ж php не очень шарю...
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.