[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с скриптом проверки checkbox
nalezhitiy
Отмечаю checkbox и заношу их в таблицу "sgroup" базы .
id | people | pop |id_group |
1 | 1000 | 20 |1
2 | 1000 | 50 |1
3 | 1000 | 100 |1
4 | 1000 | 5 |1
5 | 3000 | 20 |1
6 | 3000 | 100 |1

После мне нужно изменить параметры checkbox.
В экшене редактировать сделал такое витление.
<? 
$people = array (1=>"1000", 2=>"2000", 3="3000");
$query = 'SELECT DISTINCT people FROM sgroup WHERE id_group='.$_GET['id'].' ORDER BY people ';
$res = mysql_query( $query );

while($item = mysql_fetch_array( $res )){
foreach($people as $k => $v){
if ($item['people'] == $v){
echo '<label><input type="checkbox" name="people[]" checked value="'.$v.'">'.$v.' шт.</label><br>';}
else{
echo '<label><input type="checkbox" name="people[]" value="'.$v.'">'.$v.' шт.</label><br>';}
}

}

?>

Но скрипт повторно выводит список пустых checkbox, количество списков зачемто равняется количеству значений с базы(((
Как можно исправить это, или переписать скрипт?



Спустя 3 часа, 40 минут, 19 секунд (4.11.2010 - 16:02) inpost написал(а):
Как-то не понятно...

Спустя 25 минут, 27 секунд (4.11.2010 - 16:27) nalezhitiy написал(а):
Я не могу правильно вывести данные. У меня много повторов checkbox(((
Что бы выводить мне вот так:
+ 1000 - активирован checkbox(+)
- 2000 - не активирован checkbox(-)
+ 3000
- 4000
Он выводить:
+ 1000
- 2000
- 3000
- 4000
- 1000
- 2000
+ 3000
- 4000
Тоесть весь список повторяет(((

Спустя 33 минуты, 15 секунд (4.11.2010 - 17:00) inpost написал(а):
DISTINCT people , While проходит 2 оборота (1000 и 3000). foreach каждый раз 3 (1000,2000,3000), итого: 2*3=6, откуда 8? =) Может у тебя массив из 4-х значений, а не трёх? Что-то этот код должен был вывести при этих данных всего 6 значений (+, -,-, -,-,+), .
И откуда в этом коде 4000?

Спустя 43 минуты, 45 секунд (4.11.2010 - 17:44) nalezhitiy написал(а):
inpost - это был только пример(конечно не удачный), за что сори.(((

+ 1000 - активирован checkbox(+)
- 2000 - не активирован checkbox(-)
+ 3000
Он выводить:
+ 1000
- 2000
- 3000
- 1000
- 2000
+ 3000
Вот ты попал прямо в точку попал
Цитата
While проходит 2 оборота (1000 и 3000). foreach каждый раз 3 (1000,2000,3000), итого: 2*3=6

Как мне сделать что бы было три оборота а не 6((((?
В этом и был мой первоначальный вопрос.
Помогите его решить

Спустя 5 минут, 23 секунды (4.11.2010 - 17:49) inpost написал(а):
В каком смысле? У тебя в выборке стоит "ВЫБРАТЬ 2 ПОЛЯ". WHILE говорит, что ОБА пройти!
array - 3 записи записано! foreach(), внутри if-else даёт результат в любом случае, значит проходит 3 записи для каждого выбранного элемента. Итого 6.
Что в этом лишнее, найди сначала, потом можно будет убрать.

Спустя 25 минут, 25 секунд (4.11.2010 - 18:15) nalezhitiy написал(а):
Да лишнее то что while запускает foreach столько раз, сколько есть записей в базу.
Но как мне так оптимизировать этот код, что бы нормальная форма вывелась без повторения?

Спустя 16 минут, 3 секунды (4.11.2010 - 18:31) inpost написал(а):
nalezhitiy
Я расписал конкретно, что каждый элемент делает! В обращении к БД поставь LIMIT 1 и всё.
И, кстати, я не вижу тут повторений. Всё выводится нормально.

Спустя 39 минут, 33 секунды (4.11.2010 - 19:10) nalezhitiy написал(а):
inpost
LIMIT 1 - выведет мне только одно значение, так как мне нужно вывести (1000, 3000).
Помощь мне нужно в оптимизации скрипта.
Берется одно (уникальное) значение из таблицы и сравнивается со всеми значениями массива.

Результат моего цикла такой получится:
___________ первый прогон
1000+
2000-
3000-
___________ второй прогон
1000-
2000-
3000+
что не есть хорошо, нужно что бы было
___________Единый прогон
1000+
2000-
3000+
Вот как мне это сделать?
я уже пробывал in_array();
и что то не понимаю

Спустя 58 минут, 12 секунд (4.11.2010 - 20:09) inpost написал(а):
foreach($people as $k => $v)
{
if ($temp[$k] == "checked") continue;
if ($item['people'] == $v)
{
$people[$k] = '<label><input type="checkbox" name="people[]" checked value="'.$v.'">'.$v.' шт.</label><br>';
$temp[$k] = "checked";
}
else
{
$people[$k] = '<label><input type="checkbox" name="people[]" value="'.$v.'">'.$v.' шт.</label><br>';
}
}

foreach($people as $v)
{
echo $v;
}


Это надо вписать вместо твоего foreach

Спустя 20 часов, 6 минут, 35 секунд (5.11.2010 - 16:15) nalezhitiy написал(а):
inpost
Большое спасибо за скрипт, но я его так и не использовал.
Дошол к такому решению
<?
...
while($item = mysql_fetch_array($res)){$itemArr[] = $item['people'];}
foreach($people as $k => $vb){
if(in_array($vb,$itemArr )){
...
}
?>

Всем большое спасибо за помощь и участие
Быстрый ответ:

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