X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> Checkbox и PHP, проверка и вывод
Banderas
Banderas
Topic Starter сообщение 12.2.2011, 2:33; Ответить: Banderas
Сообщение #1


Здрасте! Захотел реализовать удаление выбранных статей. Конечно же надо использовать checkbox, но я не знаю как правильно его задать...
Форма вроде правильно написана
[php] $articles = mysql_query("SELECT id, title FROM articles", $db);
$myrow = mysql_fetch_array($articles);
echo "<form action='hendler_mdf_articles.php' method='post'>";
do {
printf ("<input type='checkbox' name='checkbox' value='%s' /> %s </br>", $myrow['id'], $myrow['title']);
}
while ($myrow = mysql_fetch_array($articles));
echo "</br><input type='submit' value='Удалить выбранные статьи' /></form>";[/php]
Обработчик даже не знаю как написать. Алгоритм такой:
1) принимаю массив checkbox (он должен быть массивом) в котором value = id статьи
2) сравниваю value с id из базы
3) если идентичны - удаляю

Думаю, что такой способ не рационален. Но для начала задам вопрос "почему у меня checkbox не массив"?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 12.2.2011, 2:37; Ответить: sc2r2bey
Сообщение #2


потому что читать книжки надо и изучить материал про массивы

name='checkbox[]'


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 12.2.2011, 2:54; Ответить: Banderas
Сообщение #3


Спасибо, я перечитал несколько статей по чекбоксу, но нигде не написано зачем [], хотя я скобки видел, думал что у меня неотобразился символ)))
значит сейчас форма
[php] $articles = mysql_query("SELECT id, title FROM articles", $db);
$myrow = mysql_fetch_array($articles);
echo "<form action='hendler_mdf_articles.php' method='post'>";
do {
printf ("<input type='checkbox' name='checkbox[]' value='%s' /> %s </br>", $myrow['id'], $myrow['title']);
}
while ($myrow = mysql_fetch_array($articles));
echo "</br><input type='submit' value='Удалить выбранные статьи' /></form>";[/php]
обработчик
[php] <?php
$articles = mysql_query("SELECT id, title FROM articles", $db);
$myrow = mysql_fetch_array($articles);
isset($_POST['checkbox']) ? $id=$_POST['checkbox'] : '';
foreach ($id as $value) {
$value = intval($value);
do {
if ($value=$myrow['id']) {
mysql_query("DELETE FROM articles WHERE id='$value'", $db);
echo "</br>Запись удалена!";
}
}
while ($myrow = mysql_fetch_array($articles));
}
?>[/php]
Но почему удаляет все статьи, а не выбранные?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 12.2.2011, 3:02; Ответить: sc2r2bey
Сообщение #4


патаму что я тебе сказал что читать?

сделай print_r($_POST['checkbox'])

и print_r($id)

что там?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 12.2.2011, 3:06; Ответить: Banderas
Сообщение #5


Идентичны!
Array ( [0] => 18 [1] => 15 )
---------------
Array ( [0] => 18 [1] => 15 )

Код
[php] isset($_POST['checkbox']) ? $id=$_POST['checkbox'] : '';
print_r ($_POST['checkbox']);
echo '</br>---------------</br>';
print_r ($id);[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 12.2.2011, 3:33; Ответить: sc2r2bey
Сообщение #6


что так не догадался?
а отлаживать так и научился?
зачем тебе вложенные циклы?
[php] foreach ($id as $value) {
$value = intval($value);
mysql_query("DELETE FROM articles WHERE id='$value'", $db);
echo "</br>Запись удалена!";
}[/php]


--------------------
Заметки о разработке и не только
программирую web и для we


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 12.2.2011, 11:01; Ответить: Banderas
Сообщение #7


Я уже понял о чем ты...
Сделал вложенный цикл, потому что массив $id может быть $id=[3][5][8], а массив $myrow[id]=[3][5][6][8][12][17];
Работаем по циклу....
3 -> 3 - удалили
5 -> 5 - удалили
8 -> 6 - не удалили
Массив $id закончился, выходим из цикла. Если сделать вложенный цикл, то каждый элемент массива $id будет сравниваться с каждым элементом массива $myrow['id']

пс. усе, понял о чем ты, все правильно. Мы вывели id из базы, потом передали их обработчику, который удаляет id, что нам передал чекбокс. Проверка не требуется, id для удаления переданы четко и ясно. Нужно просто их подставить в функцию mysql_query
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 12.2.2011, 11:16; Ответить: sc2r2bey
Сообщение #8


ну и ладушки, рад что ты понял, после формы тв получил готовый, просто надо удалить записи с id равными значениям элементов массива ;)


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 13.2.2011, 13:59; Ответить: ZiTosS
Сообщение #9


Banderas, Жесть ну и кодик ;)
Во-первых, какие вложенные массива типа $id=[3][5][8], покажу на примере:
1) Массив с данными (тот что получается у нас при передаче формы)
Array (
   0 => 3,
   1 => 5,
   2 => 8,
   .....
   N => [id]
);

2) Вложенные массивы, это массив в массиве, например
Array (
   0 => Array (...),
   1 => 5,
   2 => Array (...),
   .....
   N => [id]
);


Во-вторых, с форматом checkbox[] можно провести ассоциацию с PHP-кодом:
[php]$checkbox = array(); // определяем массив
$checkbox[] = 3; // добавляем значение 3 в конец массива $checkbox
$checkbox[] = 5; // добавляем значение 5 в конец массива $checkbox
$checkbox[] = 8; // добавляем значение 8 в конец массива $checkbox[/php]
На выходе получим массив представленный в первом примере выше.

В-третьих, зачем такие сложности с перебором присланных ID. Вообщем если мы организуем управление скриптом, явно в эту часть скрипта будет допущен пользователь, который не собирается ломать скрипт, поэтому входящие данные можно не проверять, ну конечно на всякий случай можно и обезопаситься и просто прогнать присланные $checkbox через intval();
Мы удаляем данные, а не перебираем все существующие это не нужно. Нам нужно просто взять и удалить из базы те данные, id которых нам передали. Не нужно даже заботиться о проверке наличия этих данных в таблице, если их нет, ничего страшного не произойдет.
[php]<?php
$ids = $_POST['checkbox'];

// перебираем присланные id и делаем их безопасными
foreach($ids as $index => $id)
$ids[$index] = intval($id);

$ids = implode(",", $ids); // объединяем все id в массиве в строку формата "3,5,8,...,N"
$mysql_query("DELETE FROM table WHERE id IN ({$ids})"); // удаляем записи из таблицы table, id которых перечислены в скобках
?>[/php]


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Tixiy
Tixiy
сообщение 2.5.2011, 16:30; Ответить: Tixiy
Сообщение #10


Всем здрасьте. Подскажите, пожалуйста, как сделать такую вещь: Имеется три файла с содержинием песен для каждого диска соответственно. Очень хочется сделать на сайте, чтобы люди выбрав один диск, видели содержимое его, если снимут галочку, то содержимое становится невидимым, чтобы не мешаться. И так на одной страничке совместить три диска, чтоб страничка динамически изменялась в соответствии с выбором пользователя. Возможно это ерундовая задача, но я еще полный ноль в этом деле, только учусь. Помогите, плиз.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3388 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1237 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44890 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1885 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3398 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 17.4.2024, 1:21
Дизайн