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

Форум PHP

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

 

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

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

тема: много чекбоксов ->php
 
 автор: opex   (16.02.2007 в 20:36)   письмо автору
 
 

Скрипт выводит список файлов. Слева каждого файла надо сделать чекбокс, а потом с выбранными файлами сделать какое-нибудь действие. Если <input type="checkbox" name="name" value="value" /> то при нажатии на submit в php появляется переменная например $_POST['name'] со значением value, я прав? В данном случае чекбоксов много, и их имена неизвестны. Посоветуйте, пожалуйста.

   
 
 автор: Фитч   (16.02.2007 в 20:38)   письмо автору
 
   для: opex   (16.02.2007 в 20:36)
 

А нельзя именовать чекбоксы по каому нибудь правилу?
И ещё: список чекбоксов формируется, как я понимаю, PHP-скриптом? Тогда можно где-нить ещё хранить имена...

   
 
 автор: opex   (16.02.2007 в 20:44)   письмо автору
 
   для: Фитч   (16.02.2007 в 20:38)
 

Можно именовать по правилу. Получится туча переменных. Нельзя все чекбоксы как-нибудь в один массив загнать? Насчет именования по правилу: приведите пример, пожалуйста. как мне потом из всех этих переменных узнать, какие чекбоксы выбраны.

   
 
 автор: Sl   (16.02.2007 в 20:42)   письмо автору
 
   для: opex   (16.02.2007 в 20:36)
 

Да вы правы. Полю name передастся значение value. Тут можно выводить циклом чекбоксы с файлами и автоматически присваивать полю value какие либо значения
Например
name=check[$i++]

   
 
 автор: opex   (16.02.2007 в 20:46)   письмо автору
 
   для: Sl   (16.02.2007 в 20:42)
 

Не понял, как связать чекбоксы и имена файлов?

   
 
 автор: Sl   (16.02.2007 в 20:51)   письмо автору
 
   для: opex   (16.02.2007 в 20:46)
 

Ну например когда вы выводите файлы, нужно с ними же и выводить чекбоксы. Там же автоматически будет меняться имя каждого чекбокса для каждого файла.
Все это должно делаться в цикле. Вы список файлов каким образом выводите ?

   
 
 автор: opex   (16.02.2007 в 21:18)   письмо автору
 
   для: Sl   (16.02.2007 в 20:51)
 


<?php
if (is_dir($dir))
    {
        if (
$dh opendir($dir))
        {
            while ((
$file readdir($dh)) !== false)
            {
                if (
$file !== '.' and $file !== '..')
                echo 
$file;
            }
            
closedir($dh);
         }
    }

   
 
 автор: Sl   (16.02.2007 в 21:29)   письмо автору
 
   для: opex   (16.02.2007 в 21:18)
 


<?php 
$in 
0;
$iv 0;
if (
is_dir($dir)) 
    { 
        if (
$dh opendir($dir)) 
        { 
            while ((
$file readdir($dh)) !== false
            { 
                echo 
"<input type=checkbox name='check[$in++]' value='$iv++'>&nbsp;&nbsp";
                if (
$file !== '.' and $file !== '..'
                echo 
$file."<br />"
            } 
            
closedir($dh); 
         } 
    } 

Попробуйте вот эту идею реализовать

   
 
 автор: Trianon   (16.02.2007 в 21:33)   письмо автору
 
   для: Sl   (16.02.2007 в 21:29)
 

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

   
 
 автор: Trianon   (16.02.2007 в 21:20)   письмо автору
 
   для: opex   (16.02.2007 в 20:46)
 


<?php
   
if(isset($_POST['f'])&& is_array($_POST['f']))
   {
     foreach(
glob('*') as $name$nms[md5($name)]=$name;

     foreach(
$_POST['f'] as $h)
       if(isset(
$nms[$h]))
       {
           
unlink($name=$nms[$h]);
           echo 
"$name deleted<br/>\r\n";
       }
   }
   echo 
"<form method=post>";
   foreach(
glob('*') as $name)
   {
       
$h md5($name);  $nhtmlspecialchars($name);
       echo 
"<input type=checkbox name=f[] value=$h /> $n<br/>\r\n";
   }
   echo 
"<input type=submit value=del /><form>";
?>

   
 
 автор: opex   (17.02.2007 в 09:50)   письмо автору
 
   для: Trianon   (16.02.2007 в 21:20)
 

То есть если я всем чекбоксам присвою одинаковое имя name="massiv[]", значения напишу разные (например value1, value2), то при субмите появляется $_POST['massiv'] вида
0->value1
1->value2
так? А если есть чекбокс у которого value3 и его не отметили, то он не появится в массиве? В таком случае можно в value написать имена файлов, и получится список отмеченных файлов. Только имена файлов надо записывать так, чтобы они спецсимволами (слешами, кавычками) ничего не испортили. Поправьте меня, если я не прав.

   
 
 автор: tAleks   (16.02.2007 в 22:47)   письмо автору
 
   для: opex   (16.02.2007 в 20:36)
 

Я бы сделал так:


<?
<?php 
if (is_dir($dir)) 
    { 
        if (
$dh opendir($dir)) 
        { 
            while ((
$file readdir($dh)) !== false
            { 
                if (
$file !== '.' and $file !== '..'
                echo 
'<input type="checkbox" name="file['.$file.']" /> '.$file;
            } 
            
closedir($dh); 
         } 
    } 
?>


В итоге, после нажатия кнопки субмит вы имеете в скрипте массив, ключи которого это имена отмеченных файлов, а значения 'on'.

   
 
 автор: Trianon   (17.02.2007 в 00:02)   письмо автору
 
   для: tAleks   (16.02.2007 в 22:47)
 

А так имя файла, содержащее какую-нибудь кавычку, апостроф или квадратную скобку, порвёт тег, как тузик тряпку.

В моем способе, кстати, тоже огрехи есть. Может, кто укажет :)

   
Rambler's Top100
вверх

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