|
|
|
| Вчера я уже создавал тему http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=75249&page=1 , но тема не удалась из-за непонимания мной вопроса. И способ который мне давали, не работает.
Теперь вопрос:
1. как можно проверить состояние чекбокса в цикле, если часть имени чекбокса берется из базы. Т.е. у каждого чекбокса свое уникальное имя (i1, i2, i3...). Из которого, цифры этих имен берутся из базы по идентификатору выбранного чекбокса.
2. Как мне в цикле совместить первую часть имени (i) и вторую часть (1, 2, 3...) и проверить на существования этих чекбоксов?
Соединять 1-ю и 2-ю часть так что ли?
<input type="checkbox" name="i$data['id']" />
|
По-другому не знаю.
И как сделать проверку?
Подскажите не знающему. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 12:54)
| | Вы сперва объясните, к чему такая привязка id к чекбоксам? И как потом вы будете выяснять кто чей? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:04)
| | Привязка такая потому что у каждого чекбокса свое уникальное имя. Что бы было проще определять, какой чекбокс был выбран, а не по значению, которое передал чекбокс. Имя состоит из 2 частей: "i" и соответствующий ему цифре по идентификатору в таблице базы - "[0-66]".
А как вы предлагаете выяснять это? Если в базе 66+ чекбоксов? | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 13:10)
| |
<input type="checkbox" name="idata[<?=$data['id'];?>]" value="<?=$data['id'];?>" />
<?print_r($_POST['idata']);?>
|
| |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:15)
| | Зачем в имя тоже вставлять ID? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:20)
| | Да необязательно — поставил для наглядности | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:23)
| | Ни к чему эта наглядность, в данном случае она лишняя. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:24)
| | Уговорили :)
<input type="checkbox" name="idata[]" value="<?=$data['id'];?>" />
<?print_r($_POST['idata']);?>
|
| |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 13:10)
| | У каждой записи свой уникальный ID, и по этому признаку и надо определять чекбоксы, а не по уникальному имени. Вы же не с ними в конечном итоге работать будете, а с записями. И получить просто массив уникальных значений равных этим ID проще, и обработать его проще. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:22)
| | Что-то не пойму, как определять чекбоксы по ID поля таблице? Поясните. Желательно с примером.
>Вы же не с ними в конечном итоге работать будете, а с записями.
Как раз на оборот. Я буду работать с значениями чекбоксов. А что бы узнать значение, мне нужно знать, у кого я взял это значение. Для этого и нужно уникальное имя. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 13:33)
| | Двлее обходите циклом массив, и в цикле получаете ид выбранных чекбоксов | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:37)
| | Не надо циклов. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:39)
| | в принципе да, можно преобразовать массив в строку | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:42)
| | Зачем в строку? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:39)
| | Как же без циклов? | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:37)
| | Как это на примере реализовать, не пойму. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 13:41)
| | Если циклом, то
foreach($_POST['idata'] AS $id)
{
/// $id - ид опроса
}
|
Ну лучше преобразовать в строку, с помощью implode | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:44)
| | Прямо таки сразу implode и баста? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:52)
| | Если в конечном итоге нужно обратится к таблице — да.
<html>
<head>
<title></title>
</head>
<body>
<form action="" method="post">
<?
for($i=1; $i<8; $i++) echo '<input type="checkbox" name="chk[]" value="'.$i.'">';
?>
<input type="submit" value="Send">
</form>
<input type="checkbox" name="idata" value="i$data['id']" />
<hr>
<?
$ids = implode(",",$_POST['chk']);
echo $sql = "...WHERE id IN({$ids});"
?>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:57)
| | Вы точно в этом уверены? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:59)
| | В чем? | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 14:00)
| | $ids = implode(",",$_POST['chk']);
echo $sql = "...WHERE id IN({$ids});" | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 14:01)
| | Уверен :) Если у Вас есть сомнения, пожалуйста, обоснуйте))) | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 14:03)
| | Нельзя необработанные от пользователя данные вставлять параметрами в запрос, ну хотя бы ради вежливости к MySQL, что-ли. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 14:10)
| | sim5, вот я честно с Вами несколько удивляюсь читая Ваши посты. Я пологаю у автора голова должна думать сама о таких вещах как безопасности. Я написал код не для того чтобы он его использовал как copy/paste. | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 14:15)
| | это не вопрос безопасности.
Это вопрос корректной обработки данных.
Вы учите автора голые строки облеплять кавычками. Это неправильно. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2010 в 14:17)
| | Какие кавычки? | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 14:25)
| | пардон. не кавычки.
Вы просто подставляете строковые данные в тело запроса, не приводя тип к числовому. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2010 в 16:00)
| | Ну да. В любом случае чтобы привести к целому типу, нужно прогнать массив в цикле либо array_walk(); | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 16:22)
| | Не надо циклов и array_walk(). | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 16:24)
| | А как? | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 16:27)
| | $_POST['name'] = implode(",", array_map('intval', $_POST['name'])); | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 14:15)
| | Это форум, и коли вы объясняя "непонимающему", хотите опустить вопрос безопасности раскрывая суть иного, то объясняйте это. Иначе в сторону и не машите саблей, вредно это для тех кому вы пытаетесь что-то объяснить. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:59)
| | Что интересно, на неправильную обработку данных перед вставкой в SQL все внимание обращают, а текст в html просто так выводят в большинстве постов, так это ничего... Странные правила) | |
|
|
|
|
|
|
|
для: sms-send
(30.07.2010 в 16:52)
| | Что именно странного? | |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 13:57)
| | Нет. В конечном итоге мне нужно не к базе по именам чекбоксов обратиться. Мне нужно сделать проверку по именам чекбоксов. А именно, проверить: если существует какой-либо чекбокс (с своим уникальным именем), то дать ему значение CHECKED.
Для Trianon как перевести строковые данные в числовые, что далее воспользоваться implode()?
sim5, нет. Вот ситуация, которую я пытаюсь решить:
Человек выбирает названия каки-либо продуктов через чекбоксы, нажимает Субмит. Его перекидывает на другую страницу, где выдает результат из базы, по значениям, которые поступили от чекбоксов. И теперь, самое главное, нужно поставить параметр CHECKED на тех чекбоксах, которые пользователь выбрал в начале. Что бы он видел, что ж он выбрал. Вот... | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 16:13)
| | Может я действительно дурной, и не понимаю ваш философский язык, ну тогда будьте так добры, объясните, что сие означает:
>1. В конечном итоге мне нужно не к базе по именам чекбоксов обратиться.
>2. Человек выбирает названия каки-либо продуктов через чекбоксы, нажимает Субмит. Его перекидывает на другую страницу, где выдает результат из базы, по значениям, которые поступили от чекбоксов.
И что вам объяснить в конечном итоге? И ще раз - не путайте уникальные имена и значения. Прежде чем научиться что-то выводить, потрудитесь понять на простой форме (пример ниже), что получаем, как выгодно и для чего. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 16:22)
| | Не пойму, что я путаю? Уникальные имена - имена, присущие только одному объекту (чекбоксу), значения - то, что находиться в value у чекбокса с уникальным именем. В чем я не прав?
А объяснить вот что:
как мне сделать так, что бы при переходе через submit на следующею страницу, которая находиться в action, помечались CHECKED`том те чекбоксы, которые выбрал пользователь? Что бы он видел то, что сам отметил (до перехода по ссылке через action). | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 16:29)
| |
<input type="checkbox" name="as1" value="1">
<input type="checkbox" name="as2" value="2">
<input type="checkbox" name="as2" value="3">
|
Это три чекбокса и каждый с уникальным именем. Теперь объясните, как вы будете получать из этих имен id значения? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 16:36)
| | А разве уникальное имя не может являться идентификатором? Я в базу обращаюсь не по ID, а по value. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 16:41)
| | Идентификатором может служить что угодно, у вас это уникальные номера записей (id). И конечно по ID вам надо обращаться, но их надо сперва получить из этих чекбоксов, как вы будете это делать? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 16:49)
| | Если по одиночки, то:
Если все сразу, то: через
$_POST['name'] = implode(",", array_map('intval', $_POST['name']));
| занесу в $abc значения $ac1, $ac2, $ac3 и ...
Правда
$_POST['name'] = implode(",", array_map('intval', $_POST['name']));
| выдает ошибку. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 17:03)
| | Это вы отвечаете по подсказке, и, думаю, совсем не представляя смысла написанного, ибо по примему с уникальними именами (выше), этого вы никак не сделаете приведенным кодом. Думаю и ошибки у вас по этой же причине. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 17:07)
| | Что посоветуете делать, что бы задумка получилась? Т.к. из-за малого опыта идей 0. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 13:33)
| | Вы уверены что вам эти чекбоксы "посмертно" теперь нужы? Надо полагать, они вам только как временные индикаторы тех или иных значений нужны, забрали их и забыли о чекбоксах. Вся эта кухня для того, чтобы в конечном итоге опять обратиться к базе.
Еще раз повторяю - не путайте уникальное имя с уникальным id, это разные понятия. Чтобы обработать уникальные имена, вам придется обращаться к каждому имени по отдельности, а вот к массиву уникальных значений одного ключа можно обратиться сразу.
Что поле таблицы, что просто вывести циклом, одно и тоже, а посему:
<form action="" method="post">
<?
for($i=1; $i<8; $i++) echo '<input type="checkbox" name="chk[]" value="'.$i.'">';
?>
<input type="submit" value="Send">
</form>
|
Отправьте эту форму и просмотрите полученный массив $_POST['chk']. Что наблюдаем? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 13:49)
| | Наблюдаю Array ( [0] => 2 [1] => 3 )....
Это все замечательно. Но вот как сделать так, основываясь на ваш пример , что бы я видел отмеченными те чекбоксы, которые я выбрал?
Что бы, когда мне выводило "Array ( [0] => 1 [1] => 3 [2] => 5 ) - выбраны 1-й. 3-й и 5-й чекбокс" эти чекбоксы (1-й, 3-й и 5-й) были отмечены CHECKED? | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 16:56)
| | Вся беда в том, что вы это считаете главной задачей, хотя это лишь как сервисную услугу можно рассматривать, второстепенное, которое можно выбросить, а основное будет спокойно работать.
Вот сценарий как:
1. Получаем записи для вывода на страницу. Если выбор по чекбоксам, то Примечание.
2. Выводим в цикле ресурс, добавляя чекбоксы.
3. Прверяем, если был получен массив чекбоксов из формы, то проверяем, есть ли в этом массиве значение равное id текущей записи, и если есть, отмечаем чекбокс, указывая ему соответсвующий атрибут.
Примечание: Если пользователь отметил чекбоксы, и нужно вывести список отмеченных, то все чекбоксы естественно нужно отметить. Смысл такого вывода? | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 17:04)
| | Блин, причем тут записи? Сейчас мы не говорим про базу. Все, кроме проверки на выборность чекбокса и присвоение ему атрибута, у меня работает. Сейчас проверка у меня работает, только вручную. А хотелось бы, что это работало на автомате (через цикл и проверку).
Сейчас структура такая:
<p class="gen_section"><label><input type="checkbox" <?php if ( $i1 ) {echo "checked='checked'";} else {echo "";} ?> name="i1" value=",1" /> Яблоки</label></p>
<p class="gen_section"><label><input type="checkbox" <?php if ( $i2 ) {echo "checked='checked'";} else {echo "";} ?> name="i2" value=",2" /> Груши</label></p>
<p class="gen_section"><label><input type="checkbox" <?php if ( $i3 ) {echo "checked='checked'";} else {echo "";} ?> name="i3" value=",3" /> Абрикосы</label></p>
|
*В базе имеются эти ингредиенты (цифры после "i" - их идентификаторы).
А мне надо совместить вывод в цикле из базы этих ингредиентов и присвоение CHECKED, где он надо. То есть цикл с проверкой. И вот это у меня не получается.
Подскажите, что мне нужно понять, что бы это сделать (т.к. изначально меня не правильно поняли). Или пример покажите. | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 17:20)
| | Может быть так до вас до «летит».
<html>
<head>
<title></title>
</head>
<body>
<form action="" method="post">
<?
$array_data = array();
$array_data = $_POST['chk'];
for($i=1; $i<8; $i++)
{
if(in_array($i,$array_data)) $checked = "checked"; else $checked = '';
echo '<input type="checkbox" name="chk[]" value="'.$i.'" '.$checked.'>';
}
?>
<input type="submit" value="Send">
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: ols
(30.07.2010 в 17:29)
| |
Warning: in_array() expects parameter 2 to be array, null given in ...
|
| |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 17:38)
| | $_POST['chk'] не существует
начали бы лучше с основ... | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 17:20)
| | Опять:
1. Блин, причем тут записи? Сейчас мы не говорим про базу.
2. А мне надо совместить вывод в цикле из базы этих ингредиентов и присвоение CHECKED, где он надо.
Вы понимаете, что несете полную ахинею? А понимаете, что if ( $i1 ) {echo "checked='checked'";}, это бессмыслица? А понимаете, что цифры после "i" - их идентификаторы нужно использовать грамонто, и так, чтобы они облегчили вам выполнение задачи?
Вы в элементарное не хотите вникнуть и понять, как же вам объяснить более серьезное? Такое впечатление, что вы сами собственной задачи не понимате. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2010 в 17:42)
| | Хорошо, тогда последний вопрос:
Как подсветить выбранную категорию, кроме такого
if ( $section1 ) {echo "style='color:red;'";} else {echo "style='color:black;'"}
|
метода | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 18:04)
| | 8-/ | |
|
|
|
|
|
|
|
для: psychomc
(30.07.2010 в 18:15)
| | На том же habrahabr.ru, когда заходишь в "посты", надпись подсвечивается черным. Как это реализовано? | |
|
|
|
|
|
|
|
для: lElectroHardl
(30.07.2010 в 18:38)
| | спросите у habrahabr.ru | |
|
|
|