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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Обработка checkbox'ов

Сообщения:  [1-6] 

 
 автор: Drago   (22.07.2005 в 04:06)   письмо автору
 
   для: Sfinks   (22.07.2005 в 03:58)
 

Вот второй вариант работает. Спасибо. Ты очень мне помог. :))

   
 
 автор: Sfinks   (22.07.2005 в 03:58)   письмо автору
 
   для: Drago   (22.07.2005 в 01:55)
 

Ой, чет я напортачил =))
Да и ваще, лучше так....
<?php

  
//Если заказ не сделан...
  
if(empty($_POST["products"]))
  {
    
//считываем товары из папки и заносим в массив
    
$hdl opendir("products");
    while(
$file readdir($hdl))
      if((
$file != ".") && ($file != "..") && ($file != "images"))
        
$a[] = $file;
    
closedir($hdl);
    
asort($a);

    
//и выводим форму заказа
    
echo"<form method='post' action='temp.php' name='form'>";
    foreach(
$a as $index => $value)
      echo
"<input type=checkbox name='products[$index]' value='$value'><b>$value</b><div align=right><input type=checkbox name='num[$index]' value=1>Два</div><br>";
    echo
"<input name='submit' type='submit' value='Выбрать'></form>";
  }

  
//иначе сохраняем заказ
  
else
  { 
$string "";
    foreach(
$_POST["products"] as $index => $value)
      if(
$_POST["num"][$index] == 1)
        
$string .= $value.",".$value.",";
      else
        
$string .= $value.",";
    
$hdl fopen("file1","w+");
      
fwrite($hdl,(substr($string,0,-1)));
    
fclose($hdl);
  }
?>

   
 
 автор: Sfinks   (22.07.2005 в 03:26)   письмо автору
 
   для: Drago   (22.07.2005 в 01:55)
 

Во первых, в обработчике ошибка!
else 

//записываем выбранное в файл 
$hdl = fopen("file1", "w+"); 
for ($i=0;$i<count($products);$i++) 
  { 
  if ($num[$i]==1) 
   $string.=$products[$i].",".$products[$i].","; 
   else 
   $string.=$products[$i].","; 
   } 
   } 
  fwrite($hdl,(substr($string,0,-1))); 
  fclose($hdl);
Здесь fopen() вызывается внутри else{}, а закрывается за else{}.

Во вторых, fopen() лучше выполнить непосредственно перед fwrite(), сразу после формирования $string, а не перед циклом.

А насчет индексов, надеяться на автоинкремент действительно не стоит, но и счетчик лишний. Лучше присваивать значения индексов массива $a. Тогда скрипт будет выглядеть примерно так.....
<?php
  
//Считываем товары из папки и заносим в массив
  
$hdl opendir("products");
  while(
$file readdir($hdl))
    if((
$file != ".") && ($file != "..") && ($file != "images"))
      
$a[] = $file;
  
closedir($hdl);
  
asort($a);

  
//делаем каталог
  
if(empty($products))
  { echo
"<form method='post' action='file.php' name='form'>";
    foreach(
$a as $value => $index)
     echo
"<input type=checkbox name='products[$index]' value='$value'><b>$value</b><div align=right><input type=checkbox name='num[$index]' value=1>Два</div><br>";
    echo
"<input name='submit' type='submit' value='Выбрать'></form>";
  }

  
//записываем выбранное в файл
  
else
  { 
$string "";
    foreach(
$products as $value => $index)
      if(
$num[$index] == 1)
        
$string .= $a[$index].",".$a[$index].",";
      else
        
$string .= $a[$index].",";
    
$hdl fopen("file1","w+");
      
fwrite($hdl,(substr($string,0,-1)));
    
fclose($hdl);
  }
?>

Должно работать =))

   
 
 автор: Drago   (22.07.2005 в 01:55)   письмо автору
 
   для: cheops   (21.07.2005 в 23:37)
 

Я пробовал делать точно также, но тогда у меня как раз и возникла сложность с обработчиком.
Пробовал делать так


<?php
for ($i=0;$i<count($a);$i++)
  {
  
$c='num.$i';
  
$b='products.$i';
  if (!empty($
$b))
  {
   if ($
$c==1)
   
$string.=$products[$i].",".$products[$i].",";
   else
   
$string.=$products[$i].",";
   }
  }
?>

Но не получилось.
Может подскажете, как правильно проверить?

   
 
 автор: cheops   (21.07.2005 в 23:37)   письмо автору
 
   для: drago   (21.07.2005 в 15:21)
 

Хм... чтобы убрать все сложности, лучше в цикле присваивать уникльные имена
<?php
$i 
0;
foreach (
$a as $value

  if (
$value!='images')               
  { 
    
$i++;
    echo 
"<input type=checkbox name='products$i' value='$value'><b>$value</b><div align=right><input type=checkbox name='num$i' value=1>Два</div>";                     
  } 
}
?>

А в обработчике - также в цикле проверить, какие из флажков отмечены.

   
 
 автор: drago   (21.07.2005 в 15:21)   письмо автору
 
 

Есть каталог товаров. Я хочу сделать так, чтобы отметив дополнительный чекбокс, можно было выбрать кол-во товара 1или 2. То есть, если чекбокс отмечен, то выбираеться два товара, если нет, то один.

Вот примерный код:

<?php
 
//Считываем товары из папки и заносим в массив
$dir='products';
$hdl=opendir($dir);
while(
$file=readdir($hdl)) 
{                                                
 if((
$file!=".")&&($file!=".."))
 
$a[]=$file;
}
closedir($hdl);
asort($a);        
//делаем каталог            
if (empty($products))
{
echo 
"<form method='post' action='file.php' name='form'>";
foreach (
$a as $value)
{
 if (
$value!='images')              
 {
  echo 
"<input type=checkbox name='products[]' value='$value'><b>$value</b><div align=right><input type=checkbox name='num[]' value=1>Два</div>";                     
 }
}
echo 
"<input name='submit' type='submit' value='Выбрать'></form>";
}
else
{
//записываем выбранное в файл
 
$hdl fopen("file1""w+");
 for (
$i=0;$i<count($products);$i++)
  {
  if (
$num[$i]==1)
   
$string.=$products[$i].",".$products[$i].",";
   else
   
$string.=$products[$i].",";
   }
   }
  
fwrite($hdl,(substr($string,0,-1)));
  
fclose($hdl);
}
?>


Собственно проблема в

<input type=checkbox name='num[]' value=1>Два

так как не знаю, как сделать, чтобы кол-во относилось к соответствующему товару.

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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