Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pętlą foreach()
Forum PHP.pl > Forum > Przedszkole
Jarod
Poniższy skrypt działa prawidłowo gdy do wyświetlania danych użyję pętli for(). Natomiast gdy użyję foreach to już wszystko się pieprzy..

  1. <?php
  2. include 'funkcje.php';
  3.  
  4. //Tablica ze spisem uprawnień
  5. $spisUprawnien = array ('Panel' => 'Panel administracyjny:',
  6. 'ZmianaHasla' => 'Zmiana hasła:',
  7. 'Pasazerski'  => 'Dział pasażerski:',
  8. 'Rampa' => 'Dział rampy:',
  9. 'GrafikPasazerski' => 'Rozpiska stanowisk (pasażerski):');
  10.  
  11.  
  12. ////////////////////////////////////////////////////////////////
  13. for ($i=0; $i<10; $i++) echo '<br>Prawa: '.$_POST['kto'][$i];
  14. ////////////////////////////////////////////////////////////////
  15.  
  16.  
  17. //Połączenie z bazą danych
  18. $conn = m_connect($server, $identyfikator, $haslo)
  19. or die ('Nie udało się połączyć z bazą danych!');
  20. //Wybór bazy danych
  21. or die ('Nie udało się wybrać bazy!');
  22.  
  23.  
  24. $id  = intval($_GET['id']);
  25. $l = $_GET['l'];
  26. $i = $_GET['i'];
  27. $n = $_GET['n'];
  28. $np  = $_GET['np'];
  29. $d = $_GET['d'];
  30. $s = $_GET['s'];
  31.  
  32.  
  33. //Dla przypadku wejścia przez opcję 'Szukaj pracownika', ustalamy opcję przez, którą odbyło się szukanie
  34. if ( !empty($l) ) $szukaj = '&l='.$l;
  35. else if ( !empty($i) ) $szukaj = '&i='.$i;
  36. else if ( !empty($n) ) $szukaj = '&n='.$n;
  37. else if ( !empty($np)) $szukaj = '&np='.$np;
  38. else if ( !empty($d) ) $szukaj = '&d='.$d;
  39. else if ( !empty($s) ) $szukaj = '&s='.$s;
  40.  
  41.  
  42.  
  43. //Pobieramy prawa dostępu dla danego użytkownika
  44. $query = 'SELECT modul, odczyt, zapis FROM uprawnienia WHERE konto_id='.$id;
  45. $result = mysql_query($query) or die ('Zapytanie nieudane!');
  46.  
  47.  
  48. echo '<div class="uprawnienianaglowek" style="margin-left: 240px !important; margin-left: 120px;">Odczyt</div>';
  49. echo '<div class="uprawnienianaglowek">Zapis</div>';
  50.  
  51.  
  52. echo '<form action="'.basename($PHP_SELF).'?'.SID.'&val=115&id='.$id.$szukaj.'" method="post">';
  53.  
  54. //Wyświetlamy prawa dostępu
  55. while ( $query_data = mysql_fetch_row($result) )
  56. {
  57. echo '<div class="uprawnieniaspis">'.$spisUprawnien[$query_data[0]].'</div>';
  58. echo '<div class="uprawnieniawartosc">';
  59. echo '<select name="kto[]" style="font-size: 11px; width: 100px;">';
  60. if ( $query_data[1] == 1 ) $domyslne = 'selected'; else $domyslne = '';
  61. echo '<option selected>Nie</option>';
  62. echo '<option '.$domyslne.'>Tak</option>';
  63. echo '</select>';
  64. echo '</div>';
  65. echo '<div class="uprawnieniawartosc">';
  66. echo '<select name="kto[]" style="font-size: 11px; width: 100px;">';
  67. if ( $query_data[2] == 1 ) $domyslne = 'selected'; else $domyslne = '';
  68. echo '<option selected>Nie</option>';
  69.  echo '<option '.$domyslne.'>Tak</option>';
  70. echo '</select>';
  71. echo '</div>';
  72. }
  73. echo '<div style="margin-top: 10px; width: 510px; clear: both; float: left;">';
  74. echo '<div style="margin-bottom: 10px; width: 60px; clear: both; float: right;"><input type="image" src="img/zapisz.gif" /></div>';
  75. echo '<div style="width: 44px; clear: both; float: right;"><a href="'.basename($PHP_SELF).'?'.SID.'&val=13'.$szukaj.'"><img src="img/wroc.gif" width="44px" height="19px" alt="Wróć" border="0" /></a></div>';
  76. echo '</div>';
  77.  
  78. echo '</form>';
  79.  
  80. ?>


Gdy zamiast
  1. <?php
  2. ////////////////////////////////////////////////////////////////
  3. for ($i=0; $i<10; $i++) echo '<br>Prawa: '.$_POST['kto'][$i];
  4. ////////////////////////////////////////////////////////////////
  5. ?>

użyję

  1. <?php
  2. foreach (array($_POST['kto']) as $key => $kto) echo '<br>Prawa: '.$kto[$key];
  3. ?>


to nie działa. Co robię źle?
Cysiaczek
Wszystko. smile.gif

  1. <?php
  2. foreach ($_POST as $key=>$value){
  3. print $key.' : '.$value;
  4. }
  5. ?>
kszychu
$kto nie jest tablicą, tylko wartością danego pola tablicy.
siemakuba
domyślam się, że to powiązane z tym tematem: Temat: php Nie dziaand322a error reporting E ALL
ale mniejsza z tym.
masz tak:
  1. <?php
  2. foreach (array($_POST['kto']) as $key => $kto) 
  3. { echo '<br>Prawa: '.$kto[$key];
  4. }
  5. ?>


jeżeli $_POST['kto'] jest tablica, to pakujesz go do kolejnej tablicy. W efekcie bedziesz mial nowa tablice z jednym elementem w ktorym bedzie tablica z $_POST['kto']. Chciałeś zrobić zdaje się rzutowanie typu zmiennej, ale nie wyszło. Więc po pierwsze, zamiast
  1. <?php
  2. array($_POST['kto'])
  3. ?>
musisz mieć
  1. <?php
  2. (array)$_POST['kto']
  3. ?>

Po drugie, musisz jeszcze raz sprawdzić jak działa pętla foreach" title="Zobacz w manualu php" target="_manual. W zmiennej $kto z twojego przykladu juz masz wartosc kolejnych elementów tablicy, a w zmiennej $key masz kolejno odpowiednie klucze. Więc, odwołanie $kto[$key] nic nie da. Tę wartość masz już w $kto.

BTW, czy tak ciężko zrobić sobie echo czy print_r, popatrzec na to i zauwazyc gdzie jest bląd?

pozdr.
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.