За последние 24 часа нас посетили 10348 программистов и 908 роботов. Сейчас ищут 270 программистов ...

Как обработать группу чекбоксов?

Тема в разделе "PHP для новичков", создана пользователем raxvell, 3 авг 2022.

Метки:
  1. raxvell

    raxvell Новичок

    С нами с:
    28 июл 2022
    Сообщения:
    6
    Симпатии:
    0
    Есть такая форма с чекбоксами:
    HTML:
    1. <label for="program_level">Уровень программы</label>
    2. <input type="checkbox" id="starting_level" value="Стартовый" name="program_level"><label class="light" for="starting_level">Стартовый</label><br>
    3.           <input type="checkbox" id="basic_level" value="Базовый" name="program_level"><label class="light" for="basic_level">Базовый</label><br>
    4.           <input type="checkbox" id="advanced_level" value="Продвинутый" name="program_level"><label class="light" for="advanced_level">Продвинутый</label>
    Есть в php такие строки, относящиеся к этой форме:
    PHP:
    1. $program_level = $_POST['program_level'];
    2.  
    3. $document->setValue('program_level', $program_level);
    Нужно чтобы передавались все выбранные пункты через запятую или маркированным списком, а передается только один.

    Что с этим можно сделать?

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

    P.S. Я в php не шарю, работаю по шаблонам
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.386
    Симпатии:
    649
    Адрес:
    Татарстан
    то что передать можно - это точно, даёте имя всем чекбоксам - name="program_level[]" что указывает, что это массив

    если на стороне сервера посмотрите
    PHP:
    1. $program_level = $_POST['program_level'];
    2. print_r($program_level);
    все увидите...
    а вот что у вас идет в
    PHP:
    1. $document->setValue('program_level', $program_level);
    хз...
    1. Может метод не предназначен для сохранения множественных значений из массива (скорее всего так и есть)
    2. Скорее всего и хранилище для это не заточено(БД например)
    нужно смотреть реализацию метода setValue()
    и переписывать его при надобности
    --- Добавлено ---
    вообще не аргумент...
    типа я не автомеханик - у меня машина не едет... посоветуйте что делать.... если не механик- какого лезешь, все равно не поймешь даже советов
     
  3. raxvell

    raxvell Новичок

    С нами с:
    28 июл 2022
    Сообщения:
    6
    Симпатии:
    0
    Весь код выглядит так:

    PHP:
    1. require_once 'vendor/autoload.php';
    2. $document = new \PhpOffice\PhpWord\TemplateProcessor('./Template.docx');
    3.  
    4. $uploadDir =  __DIR__;
    5.  
    6. $outputFile = 'review_full.docx';
    7.  
    8. $uploadFile = $uploadDir . '\\' . basename($_FILES['file']['name']);
    9.  
    10. move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile);
    11.  
    12. $birth = $_POST['birth'];
    13. $name = $_POST['name'];
    14. $tel = $_POST['tel'];
    15. $city = $_POST['city'];
    16. $full_program_name = $_POST['full_program_name'];
    17. $program_level = $_POST['program_level'];
    18. $program_direction = $_POST['program_direction'];
    19.  
    20. $document->setValue('name', $name);
    21. $document->setValue('birth', $birth);
    22. $document->setValue('tel', $tel);
    23. $document->setValue('city', $city);
    24. $document->setValue('full_program_name', $full_program_name);
    25. $document->setValue('program_level', $program_level);
    26. $document->setValue('program_direction', $program_direction);
    27.  
    28. $document->saveAs($outputFile);
    29.  
    30. $downloadFile = $outputFile;
    31.  
    32. header("Content-Type: application/octet-stream");
    33.  
    34. header("Accept-Ranges: bytes");
    35.  
    36. header("Content-Length: ".filesize($downloadFile));
    37.  
    38. header("Content-Disposition: attachment; filename=".$downloadFile);
    39.  
    40. readfile($downloadFile);
    41.  
    42. unlink($uploadFile);
    43. unlink($outputFile);
    Из формы создается .docx файл
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.386
    Симпатии:
    649
    Адрес:
    Татарстан
    тогда достаточно
    PHP:
    1. $document->setValue('program_level', implode(",",$program_level));
     
    raxvell нравится это.
  5. raxvell

    raxvell Новичок

    С нами с:
    28 июл 2022
    Сообщения:
    6
    Симпатии:
    0
    Да, теперь работает как надо! Большое спасибо!