Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отметить чекбоксы
 
 автор: kis-kis   (11.12.2008 в 12:10)   письмо автору
 
 

Добрый день! Данный код выводит массив чекбоксов и сверяет с записью в БД ($auto['integration'] = 1,2,3,4,5,6), если записи совпадают, то чекбоксы отмечаются, ошибка в том, что отмечается только последний чекбокс, подскажите в чем ошибка? Спасибо.


$p=1;
$ar = explode (',', $auto['integration']);

while(isset($integration_auto[$p])) 
{

for ($i=0; $i<=count($ar) - 1; $i++)
{
if ($ar[$i] == $p) { $item = " checked"; } else { $item = ""; } 
}

echo "<input type=\"checkbox\" id=\"adop\" name=\"adop[".$p."]\" value=\"".$p."\"".$item."> ".$integration_auto[$p]."";
$p++;
}

  Ответить  
 
 автор: Trianon   (11.12.2008 в 12:12)   письмо автору
 
   для: kis-kis   (11.12.2008 в 12:10)
 

Исх.код HTML сгенерированной формы смотрели?

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 12:17)   письмо автору
4.5 Кб
 
   для: Trianon   (11.12.2008 в 12:12)
 

Да, вложение, отмечен только один.

  Ответить  
 
 автор: sim5   (11.12.2008 в 12:40)   письмо автору
 
   для: kis-kis   (11.12.2008 в 12:10)
 

А как они вообще могут быть отмечены, если $p равно всегда 1? Что к чему тут у вас?

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 12:43)   письмо автору
 
   для: sim5   (11.12.2008 в 12:40)
 

$integration_auto - массив, лежит в файле.


$p=1;
while(isset($integration_auto[$p])) 
{

for ($i=0; $i<=count($ar) - 1; $i++)
{
if ($ar[$i] == $p) { $item = " checked"; } else { $item = ""; } 
}

echo "<input type=\"checkbox\" id=\"adop\" name=\"adop[".$p."]\" value=\"".$p."\"".$item."> ".$integration_auto[$p]."";
$p++;
}

  Ответить  
 
 автор: sim5   (11.12.2008 в 12:58)   письмо автору
 
   для: kis-kis   (11.12.2008 в 12:43)
 

<?
$integration_auto 
= array(1=>1,5,12,4,6,9); 
$ar = array(1,3,10,4,8,9);
for (
$i=1$i<count($integration_auto)+1$i++) {
  
$item in_array($integration_auto[$i], $ar) ? " checked" $item "";
  echo 
"<input type=\"checkbox\" id=\"adop\" name=\"adop[".$integration_auto[$i]."]\" value=\"".$i."\"".$item."> ".$integration_auto[$i];
}

К чему у вас while так и не понял, уж если получете из базы, то раскладывайте сразу ресурс полученный, без дополнительных циклов.

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 13:13)   письмо автору
1 Кб
 
   для: sim5   (11.12.2008 в 12:58)
 

Так не работает, вложение - файл mods.php:

<?
include ('mods.php');

// $integration_auto = array(1=>1,5,12,4,6,9);
 
$ar = array(1,3,10,4,8,9);
for (
$i=1$i<count($integration_auto); $i++) 
{
  
$item in_array($integration_auto[$i], $ar) ? " checked" $item "";
  echo 
"<input type=\"checkbox\" id=\"adop\" name=\"adop[".$integration_auto[$i]."]\" value=\"".$i."\"".$item."> ".$integration_auto[$i];

?>

  Ответить  
 
 автор: sim5   (11.12.2008 в 13:29)   письмо автору
 
   для: kis-kis   (11.12.2008 в 13:13)
 

Вы уж, если показываете, что нет, то лучше приведите значения элементов массива $integration_auto. Я предполагаю (в примере), что вам надо разложить массив $integration_auto, сравнивая его значения с $ar. Если счетчик цикла начинается с 1, то как вы получите последний элемент массива, не преплюсовав к числу его элементов единицу?

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 13:40)   письмо автору
 
   для: sim5   (11.12.2008 в 13:29)
 

Вот как вывожу я, и получаю как раз только последний элемент...

<?php
include ('auto.php');
$p=1;
$ar = array("1","2","3","5","6","8");

while(isset(
$integration_auto[$p])) 
{

for (
$i=0$i<=count($ar) - 1$i++)
{
if (
$ar[$i] == $p) { $item " checked"; } else { $item ""; } 
}

echo 
"<input type=\"checkbox\" id=\"adop\" name=\"adop[".$p."]\" value=\"".$p."\"".$item."> ".$integration_auto[$p]."";
$p++;

?>

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 13:54)   письмо автору
 
   для: kis-kis   (11.12.2008 в 13:40)
 

Нашел ошибку, ваш и мой код работает если вот это переписать вот так:


$item = in_array($i, $ar) ? " checked" : $item = "";


Спасибо.

  Ответить  
 
 автор: sim5   (11.12.2008 в 13:55)   письмо автору
 
   для: kis-kis   (11.12.2008 в 13:40)
 

Это я уже видел, я вас просил о другом - показать массив свой. Например, мне совсем не понятно, для чего прит каждом выводе, вы присваиваете итерацию цикла как значение элменту? Если эти номера величина постоянная, то отмеченные можно сравнивать по самой итерации.

  Ответить  
 
 автор: kis-kis   (11.12.2008 в 14:06)   письмо автору
 
   для: sim5   (11.12.2008 в 13:55)
 

Массив я показал во втором вложении.

А сам вывод сделал так:


$p=1;
$ar = explode (',', $auto['integration']);
while(isset($integration_auto[$p])) 
{
$item = in_array($p, $ar) ? " checked" : $item = "";
echo "<input type=\"checkbox\" id=\"adop\" name=\"adop[".$p."]\" value=\"".$p."\"".$item."> ".$integration_auto[$p]."";
$p++;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования