[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Передача данных методом пост и удаление из mysql
Страницы: 1, 2
Masian777
Здравствуйте! Прошу помощи в реализации следующеей задачи.
В моей базе есть таблица со статьями, а в админке раздел удалить статью.
На сегодняшний день удаление происходит по одной статье, так как в форме 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
Вот так именуй чекбоксы:
<input name='id[$i]'

В $_POST['id'] получишь массив.

_____________
There never was a struggle in the soul of a good man that was not hard
Masian777
Хорошо. А как из массива $_POST['id'] вытащить все значение id которые были выбраны? Ведь я не знаю какую цифру прикрутил к id счетчик $i.
Michael
В $_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
Цитата
именовать эл-ты ты должен по id-шкам из базы

В принципе да , ты прав можно обойтись и без счетчика. Но вопрос
Цитата
А как из массива $_POST['id'] вытащить все значение id которые были выбраны?

до сих пор мне не понятен. Я могу выбрать 3 статьи, а могу и 5. Как вытащить из массива $_POST['id'] все те переменные которые были выбраны. Может есть какая-нибудь функция которая вытаскивает все что попало в $_POST['id']?
Michael
Цитата
Может есть какая-нибудь функция которая вытаскивает все что попало в $_POST['id']?

для этого используется цикл.


_____________
There never was a struggle in the soul of a good man that was not hard
killer8080
Цитата (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
Цитата
Вот так именуй чекбоксы:

<input name='id[$i]'

Лучше вот так:
echo "<p><label><input type='checkbox' name='id[]' value='".$row['id']."'>".$row['title']."</label></p>";


_____________
Стимулятор ~yoomoney - 41001303250491
Masian777
$query = "DELETE FROM `some_table` WHERE `id` IN (".implode(',', array_map('intval', $_POST['id'])).")";

Данный запрос срабатывает и возвращает true. Но статьи из базы не удаляются. :(
Игорь_Vasinsky
Цитата
name='id[]'

ну да)) дело вкуса)

_____________
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
Цитата (Masian777 @ 16.03.2013 - 21:57)
Данный запрос срабатывает и возвращает true. Но статьи из базы не удаляются.  sad.gif

название таблицы заменил на своё? smile.gif
Masian777
Все. Разобрался. Вот сдесь пост есть по этой теме - ссылка. Спасибо большое за советы. Если бы про это не сказали:
`id` IN (".implode(',', array_map('intval', $_POST['id'])).")";

то недоперло бы наверное.
Игорь_Vasinsky
по ссылке ужасный код. ужасный.

_____________
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
Цитата (Masian777 @ 16.03.2013 - 23:51)
Все. Разобрался.

ну так и в чем была проблема?
Цитата (Masian777 @ 16.03.2013 - 23:51)
Вот сдесь пост есть по этой теме - ссылка.

А то что в нем нет защиты от SQLi тебя не смущает? wink.gif
Masian777
Код получился вот такой:
$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 не очень шарю...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.