Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z foreach i select
Forum PHP.pl > Forum > Przedszkole
Klepsydra
Witam,

Mam następujący problem.

Przygotowałem pewien formularz, gdzie są tradycyjne selecty, np:

  1. <tr><td>Województwo: </td><td><SELECT NAME=wojewodztwo_id value="$wojewodztwo_id" size=1 MULTIPLES>
  2. <OPTION value=1 selected > dolnośląskie
  3. <OPTION value=2 > kujawsko-pomorskie
  4. <OPTION value=3 > lubelskie
  5. [...]
  6. <OPTION value=15 > wielkopolskie
  7. <OPTION value=16 > zachodniopomorskie </OPTION>
  8. </SELECT></td></tr>


Do bazy (MySQL) wszystko dodaje się poprawnie. Problem jest, kiedy ładuję formularz do edycji, ponieważ wtedy zmienne z select nie mają zaznaczonych tych z bazy, a te, które ja mam w formularzu oznaczone jako select (w powyższym przykładzie value=1).





Zrobiłem więc dodatkowy plik, dla przykładu wojewodztwa.php, który wygląda tak:
  1. <?
  2. $wojewodztwa[1] = "dolnośląskie";
  3. $wojewodztwa[2] = "kujawsko-pomorskie";
  4. $wojewodztwa[3] = "lubelskie";
  5. [...]
  6. $wojewodztwa[15] = "wielkopolskie";
  7. $wojewodztwa[16] = "zachodniopomorskie";
  8. ?>



W pliku index.php, zamieniłem select z pierwszego źródła na następujący:



  1. if ($akcja=="form") {
  2. if ($data=="") $data = date("Y-m-d H:i:s");
  3. foreach ($wojewodztwa as $klucz=>$wartosc) {
  4. if ($wojewodztwo==$klucz) $wybierz = "selected=\"selected\"";
  5. else $wybierz="";
  6. $select1 .= "<option value=\"$klucz\" $wybierz>$wartosc</option>";
  7. }
  8. echo <<<KONIEC
  9. <form action="$skrypt" method="post" enctype="multipart/form-data">
  10. <input type="hidden" name="MAX_FILE_SIZE" value="100000">
  11. <input type="hidden" name="akcja" value="dodaj">
  12. <input type="hidden" name="id" value="$id">
  13. <table border=0>
  14.  
  15.  
  16.  
  17.  
  18. <tr><td>Województwo:</td><td>
  19. <input type="hidden" name="MAX_FILE_SIZE" value="200000" />
  20. <input type="hidden" name="id" value="$id" />
  21. <select name="wojewodztwo"> $select1 </select>



W tym przypadku działa poprawnie, tj. formularz do edycji pamięta zaznaczone dane.



Problem polega na tym, że mam więcej pól select.

Nie udało mi się znaleźć informacji, jak połaczyć parokrotnie foreach -kiedy zdefiniowałem oprócz województwa inne selecty, a foreach doklejałem klolejne, zmieniajac zmienne, index.php wyświetla "Parse error: syntax error, unexpected $end in /URL/index.php on line 328".

Drugim rozwiązaniem jest ominięcie tablic i pobranie tego jakos z bazy.


Poproszę o solucję, nie wiem jak pobrać "selected" z selectów przy edycji formularza.
nospor
Cytat
a foreach doklejałem klolejne, zmieniajac zmienne, index.php wyświetla "Parse error: syntax error, unexpected $end in /URL/index.php on line 328".
No to pokaz jak zrobiles to ci powiemy co zrobiles źle i jak to naprawic
Klepsydra
Cytat(nospor @ 12.02.2010, 12:21:35 ) *
No to pokaz jak zrobiles to ci powiemy co zrobiles źle i jak to naprawic


Dzięki za odpowiedź.
Nie wiem dokładnie gdzie to dokleić, ostatnia wersja z tym błędem to ta:


  1. if ($akacja=="form") {
  2. if ($data=="") $data = date("Y-m-d H:i:s");
  3. foreach ($wojewodztwa as $klucz=>$wartosc) {
  4. if ($wojewodztwo==$klucz) $wybierz = "selected=\"selected\"";
  5. else $wybierz="";
  6. $select1 .= "<option value=\"$klucz\" $wybierz>$wartosc</option>";
  7. foreach ($czypokazac as $klucz=>$wartosc) {
  8. if ($pokazac==$klucz) $wybierz = "selected=\"selected\"";
  9. else $wybierz="";
  10. $select2 .= "<option value=\"$klucz\" $wybierz>$wartosc</option>";
  11. }

No i w formularzu analogicznie dla poprzedniego, zmieniłem $select1 na $select2, a w pliku wojewodztwa.php dodałem zmienne $czypokazać z wartościami 1/2 dla tak/nie z bazy.
neverever
Wystarczy uważnie czytac komunikaty. Zapomniałeś pozamykać pętle foreach, ot cała filozofia.

  1. if ($akacja=="form") {
  2. if ($data=="") $data = date("Y-m-d H:i:s");
  3. foreach ($wojewodztwa as $klucz=>$wartosc) {
  4. if ($wojewodztwo==$klucz) $wybierz = "selected=\"selected\"";
  5. else $wybierz="";
  6. $select1 .= "<option value=\"$klucz\" $wybierz>$wartosc</option>";
  7. }
  8. foreach ($czypokazac as $klucz=>$wartosc) {
  9. if ($pokazac==$klucz) $wybierz = "selected=\"selected\"";
  10. else $wybierz="";
  11. $select2 .= "<option value=\"$klucz\" $wybierz>$wartosc</option>";
  12. }
  13. }
Klepsydra
Cytat(neverever @ 12.02.2010, 12:46:56 ) *
Wystarczy uważnie czytac komunikaty. Zapomniałeś pozamykać pętle foreach, ot cała filozofia.
[...]


Czytać to ja go przeczytałem, raczej spowiedzałbym się treści "} expected" w tym przypadku.
Dziękuję Ci bardzo, śmiga wyśmienicie.


Jeszcze pytanie, już teoretyzując, ponieważ wersja z foreach działa. Czy można w inny sposób to zrobić, np. na przykładzie tradycyjnego, zdefiniowanego selecta (jak w moim pierwszym poście), aby wskazywał zaznaczone w bazie a nie w defaultowym formularzu, czy tutaj foreach jest jedyną bądź najlepszą formą?


PS. "pomógł" przyznane.
neverever
Cytat(Klepsydra @ 12.02.2010, 15:00:06 ) *
Jeszcze pytanie, już teoretyzując, ponieważ wersja z foreach działa. Czy można w inny sposób to zrobić, np. na przykładzie tradycyjnego, zdefiniowanego selecta (jak w moim pierwszym poście), aby wskazywał zaznaczone w bazie a nie w defaultowym formularzu, czy tutaj foreach jest jedyną bądź najlepszą formą?


Można albo tak jak to robisz -wygenerować w php kod tego selecta na podstawie wczytanych z bazy danych
Można też operować na gotowym kodzie za pomocą kombinacji php+js
-php pobierasz dane z bazy, dane te przekazujesz do skryptu js realizującego zaznaczanie odpowiednich pól.

Jak dla mnie pierwszy sposób jest szybszy i wygodniejszy, ale też zależy to od konkretnych sytuacji i potrzeb.
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.