|
|
|
| Есть каталог товаров. Я хочу сделать так, чтобы отметив дополнительный чекбокс, можно было выбрать кол-во товара 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>Два
|
так как не знаю, как сделать, чтобы кол-во относилось к соответствующему товару. | |
|
|
|
|
|
|
|
для: 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>";
}
}
?>
|
А в обработчике - также в цикле проверить, какие из флажков отмечены. | |
|
|
|
|
|
|
|
для: 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].",";
}
}
?>
|
Но не получилось.
Может подскажете, как правильно проверить? | |
|
|
|
|
|
|
|
для: 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)
| | Ой, чет я напортачил =))
Да и ваще, лучше так....
<?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:58)
| | Вот второй вариант работает. Спасибо. Ты очень мне помог. :)) | |
|
|
|