Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zmienna POST z checkboxa do tablicy array - jak wstawić?
Forum PHP.pl > Forum > Przedszkole
casperii
Witam wszystkich, otóż mam problem z którym borykam się od paru godzin i wiem, że ten błąd jest strasznie śmieszny ale coś robię ewidentnie źle.
Mam w formularzu form kilka input type checkbox o nazwie ch[].
Chciałbym , żeby wstawiło mi do tablicy array tylko te zaznaczone checkboxy.

  1. <form name="xxl" method="post">
  2. <input type="checkbox" name="ch[]" value="999">
  3. <input type="checkbox" name="ch[]" value="888">
  4. </form>


Oczywiście w/w input jest pokazywany z bazy mysql a przy każdym rekordzie wyświetlana jest inna wartość value. Czyli ile rekordów z bazy tyle inputów.
Teraz kod php

  1. for($ixo=0; $ixo < $ile; $ixo++){
  2.  
  3. $ch = $_POST['ch'][$ixo];
  4. $ch = $ch;
  5. $plik = 'sciezka_do_pliku/'.$ch.'.jpg';
  6. print $plik;
  7. }


print $ch pokazuje mi 2 łączone wartości inputa checkbox czyli 999888
print $plik pokazuje także ścieżke do tych dwóch.

  1. $files_to_zip = array(TU CHCE WSTAWIĆ do tablicy zaznaczone $plik); //
  2.  
  3. $dir = '';
  4. $new_files = array();
  5. foreach($files_to_zip as $value){
  6. $new_files[] = $dir.$value;
  7. }
  8. print_r($new_files);
  9. $archive = new PclZip("spakowany.zip");
  10.  
  11. $files_archive = $archive->add($new_files, PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_OPT_ADD_PATH, '');


Czy ktoś może mi pomóc?
Jak wstawię w array zmienną $plik to pakuje mi się tylko 1 zaznaczony.


by_ikar twoja podpowiedź dała wynik:

  1. Array
  2. (
  3. [ch] => Array
  4. (
  5. [0] => 999
  6. [1] => 888
  7. )
  8.  
  9. [xxl] => Pobieraj
  10. )
  11.  
  12. Array
  13. (
  14. [ch] => Array
  15. (
  16. [0] => 999
  17. [1] => 888
  18. )
  19.  
  20. [xxl] => Pobieraj
  21. )


Sorry za usunięcie moich wyżej postów ale zaczynał się śmietnik zrobić, dlatego dałem w 1 post i pozamieniałem to co źle było.
Michael2318
Tu masz gotowy kod z mojej aplikacji. Jako value mam podane ID danego rekordu (masowe usuwanie, poprzez zaznaczanie checkboxa).

  1. $tab_del_news = '';
  2. if ( !empty($_POST['del_news']) )
  3. {
  4. foreach($_POST['del_news'] AS $del_news)
  5. {
  6. if ( empty($_POST['del_news']) )
  7. {
  8. continue;
  9. }
  10. else
  11. {
  12. $tab_del_news .= intval($del_news).', ';
  13. }
  14. }
  15.  
  16. $tab_del_news = trim($tab_del_news, ',');
  17. $sql = "DELETE FROM ".NEWS_INFO." WHERE info_for_uid = ".$userdata['user_id']." AND info_id IN (".$tab_del_news.")";
  18. if ( !($result = $db->sql_query($sql)) )
  19. {
  20. message_die(GENERAL_ERROR, 'Could not delete info in news_info table.', '', __LINE__, __FILE__, $sql);
  21. }
  22. }


Do zmiennej $tab_del_news jest doklejane każde ID zaznaczonego rekordu, po kolei, po przecinku, potem zmienna leci do warunku SQL.

$_POST['del_news'] to odpowiednik Twojego $ch[] (czyli $_POST['ch']).
pitu
W $_POST['ch'] masz już tablicę, ty robisz z tego ciąg znaków i z niego znów próbujesz rozbijać id...
by_ikar
Cytat
Chciałbym , żeby wstawiło mi do tablicy array tylko te zaznaczone checkboxy.

Do post przesyłane są tylko zaznaczone checkboxy. Tak samo w przypadku radio. Zrób tak:

  1. <?php
  2.  
  3. echo '<pre>'.print_r($_POST, true).'</pre>';


i sprawdź co się znajduje w tablicy post. Tak jak @pitu napisał, ch[] jako name inputa tworzy tablicę, wiec twoje $_POST['ch'] już jest tablicą.
casperii
by_ikar zrobiłem tak jak napisałeś, wynik w moim pierwszym poście.

Michael kombinuje twoim sposobem, wydaje mi się, że jest prawie ok

  1. $tab = '';
  2. if (!empty($_POST['ch'])){
  3. foreach($_POST['ch'] AS $ch){
  4. $tab .= 'sciezka_do_pliku/'.$ch.'.jpg'.',';
  5. }
  6. $tab = trim($tab, ',');
  7. }
  8.  
  9.  
  10. //print $tab;
  11.  
  12. $files_to_zip = array(''.$tab.'');
  13. $dir = '';
  14. $new_files = array();
  15. foreach($files_to_zip as $value){
  16. $new_files[] = $dir.$value;
  17. }
  18. print_r($new_files);


Problem teraz leży w tego typu sprawie, że jak wybiorę 1 checkbox to jest ok, ale jak wybiorę już 2 checkboxy to wtedy postać w array jest sciezka_do_pliku/999.jpgsciezka_do_pliku/888.jpg i wywala błędem , że dany plik nie istnieje co jest oczywiste. Możesz pomóc jeszcze z tym ?
by_ikar
  1. <?php
  2.  
  3. $filesToZip = array();
  4.  
  5. if(!empty($_POST['ch']) && is_array($_POST['ch']))
  6. {
  7. foreach($_POST['ch'] as $row)
  8. {
  9. $filesToZip[] = 'sciezka_do_pliku/'.$row.'.jpg';
  10. }
  11. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.