Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapamiętywaniem wyboru z listy rozwijanej
Forum PHP.pl > Forum > Przedszkole
two
Witam,
Mam problem. Otóż mam mały program napisany w PHP. Program posiada bazę danych w pliku txt, a w niej jest spis asortymentu z cenami, czyli: nazwa asortymentu || cena w PLN || cena w euro. Mam listę rozwijaną asortymentu i chciałbym, aby po kliknięciu przycisku "oblicz" zapamiętać wybrany asortyment na liście. W miejscach gdzie miałem listę wyboru i wpisane na sztywno pola wyboru poradziłem sobie z tym, ale w przypadku jak program pobiera sobie automatycznie tę listę to mam problem. Kod jest w PHP, ale miejscami przechodzi w html i znowu w php. Sądzę, że gdzieś tutaj przy tych przejściach jest błąd, ale nie mam pojęcia gdzie. Męczę się z tym od kilku dni i nic.
  1. <select name="baza_towaru" id="baza_towaru">
  2. <?php
  3. $dane = file($plik);
  4.  
  5. for($i=0;$i<count($dane);$i++) {
  6. list($asortyment[$i], $cenaPLN[$i], $cenaEURO[$i]) = explode(" || ", $dane[$i]);
  7. }
  8.  
  9. for($i=0;$i<count($asortyment);$i++)
  10. echo '<option value="'.$i.'" '.checkSelected($i, 'baza_towaru').'>'.$asortyment[$i]."</option>";
  11.  
  12. ?>
  13. </select>
  14.  



W tym ostatnim wierszu echo gdzieś musi być błąd. Wersja bez tej opcji zapamiętywania wyglądała tak:
echo '<option value="'.$i.'">'.$asortyment[$i]."</option>";


freemp3
Jak wygląda funkcja checkSelected? Sprawdzałeś, czy działa poprawnie i zwraca to co trzeba?
markuz
  1. echo '<option value="'.$i.'"';
  2. if($_POST['baza_towaru'] == $i) echo 'selected';
  3. echo '>'.$asortyment[$i].'</option>';
two
Niestety nie działa. Teraz w ogóle nie wykrywa mi informacji z bazy. Funkcja checkSelect wygląda tak:

  1. <?php
  2. function checkSelected($fieldValue, $selectName) {
  3. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  4. if ($fieldValue == $_POST[$selectName]) echo ' selected';
  5. }
  6. }
  7. ?>


Przy wklepywaniu ręcznym każdego pola osobno funkcja działa, czyli na przykład jak mam takie coś to działa:

  1.  
  2. <select name="ilosc_kolorow" id="ilosc_kolorow">
  3. <option value="1"<?php checkSelected('1', 'ilosc_kolorow'); ?>>1</option>
  4. <option value="2"<?php checkSelected('2', 'ilosc_kolorow'); ?>>2</option>
  5. </select>
  6.  


A macie może jakiś inny sposób, żeby to rozwiązać? Jakieś propozycje?
trueblue
Jaką metodą przesyłasz formularz, GET czy POST?
Jeśli GET to zmień w powyższym kodzie.
two
POST. Funkcja działa, bo jak mam wpisane opcje wyboru na twardo z ręki to wtedy wszystko śmiga, ale tylko w tej funkcji gdzie on mi pobiera te wartości z zewnętrznego pliku .txt to mam problem. Sądzę, że to może jakoś źle zadeklarowałem w tym miejscu

  1. echo '<option value="'.$i.'" '.checkSelected($i, 'baza_towaru').'>'.$asortyment[$i]."</option>";


Ale nie upieram się do tej metody. Jeśli macie jakieś inne metody jak zrobić, żeby zapamiętywało mi wybór z tej listy rozwijanej to jestem otwarty na propozycje.
Turson
Markuz dał alternatywę
Cytat(markuz @ 27.03.2014, 11:14:24 ) *
  1. echo '<option value="'.$i.'"';
  2. if($_POST['baza_towaru'] == $i) echo 'selected';
  3. echo '>'.$asortyment[$i].'</option>';

tyle że zgubił spację przed selected
two
Próbowałem ze spacją i dalej nic. Teraz to nawet nie wyświetla mi żadnych opcji wyboru na liście.
trueblue
Ale umieściłeś ten kod od markuza (ze spacją), w pętli, którą masz w linii 9?
two
Tak, dokładnie to umieściłem to w ten sposób:

  1. <select name="baza_towaru" id="baza_towaru">
  2. <?php
  3. $dane = file($plik);
  4.  
  5. for($i=0;$i<count($dane);$i++) {
  6. list($asortyment[$i], $cenaPLN[$i], $cenaEURO[$i]) = explode(" || ", $dane[$i]);
  7. }
  8.  
  9. for($i=0;$i<count($asortyment);$i++)
  10. echo '<option value="'.$i.'"';
  11. if($_POST['baza_towaru'] == $i) echo ' selected';
  12. echo '>'.$asortyment[$i].'</option>';
  13. ?>
  14. </select>
  15.  
  16.  
  17.  
markuz
Może w for warto dodać nawiasy klamrowe?
Turson
Naciśnij CTRL+U i zobacz jak wygląda kod html
two
Działa exclamation.gif!! Wielkie dzięki. Brakowało tych nawiasów klamrowych. Męczyłem się z tym od tygodnia i powoli brakowało mi już pomysłów. Mimo wszystko jeszcze raz wielkie dzięki wszystkim którzy się udzielili w temacie !
Turson
Na przyszłość: włącz wyświetlanie błędów, bo zapewne miałbyś błąd "Undefined variable $i"
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.