Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] select i option
Forum PHP.pl > Forum > PHP
klyymek
Mam zapewne banalny problem. A mianowice prosty formularz:
KOD
  1. <?php
  2. <form action="index.php"><select name="nazwa"><option value="1">Pierwsza opcja<option value="1">Druga opcja<option value="1">Trzecia opcja<input type="submit" value="zmień"></form>
  3. ?>


Mam odpowiednią tabele w bazie danych MySQL która bedzie zapisywać wybór usera a następnie przed jego wyświetleniem ustawiać odpowiednią opcję na pierwszym miejscu z tej rozwijalnej listy (standartowo pierwsza na liście jest Pierwsza opcja).
Nie chodzi mi o gotowy kod, tylko o wskazówkę bo kompletnie nie wiem jak obsługuje się te atrybuty (select, option) w PHP bo nigdy z nich nie korzystałem, ale teraz nadszedł odopwiedni moment
Proszę o pomoc!
PS. Naprawdę wysarczy mi malutki kodzik jak się manipuluje select i option w PHP.
mike
Zrób:
  1. <?php
  2.  
  3. print_r($_POST);
  4.  
  5. ?>
Będziesz wiedział jak dane przychodzą winksmiley.jpg
MiFlo
po pierwsze taki kod niemoże działać :
  1. <?php
  2. <form action="index.php"><select name="nazwa"><option value="1">Pierwsza opcja<option value="1">Druga opcja<option value="1">Trzecia opcja<input type="submit" value="zmień"></form>
  3. ?>

Jeśli by coś należy użyć funkcji echo smile.gif po 2 błąd w samym html'u jest

Poprawny kod( od razu z wyświetlaniem ):
  1. <?php
  2. if(isset($nazwa))
  3. {
  4. echo 'Wybór użytkownika: '.$nazwa;
  5. }
  6. else
  7. {
  8. echo '
  9. <form action="index.php" method="post">
  10. <select name="nazwa">
  11. <option value="1">Pierwsza opcja</option>
  12. <option value="1">Druga opcja</option>
  13. <option value="1">Trzecia opcja</option>
  14. </select><br />
  15. <input type="submit" value="zmień">
  16. </form>';
  17. }
  18. ?>


O co chodzi w tym kodzie:
Najpierw instrukcją warunkową sprawdzamy czy istnieje zmienna $nazwa jeżeli jest to wyświetlamy jej zawartość zaś jeżeli nie to wyświetlamy formularz aby użytkownik podał wartość dla tej zmiennej.
W samym wyborze jest nowość ( co niebyło w twoim kodzie ) a mianowicie method="post" po dodaniu tego dane są wysyłane metodą post jakie zalety i wady ma to poszukasz sobie w kursie html do którego link dostaniesz na samym końcu tego postu. Pamiętaj że dobrym zwyczajem jest zakańczanie wszytskiego np

Ty napisałeś:
  1. ...<option value="1">Pierwsza opcja...


A powinno być:
  1. ...<option value="1">Pierwsza opcja</option>

Oczywiście te 3 kropki oznaczają że coś przed lub po tym urywku było

Przydatne linki

Manual PHP( najlepszy kurs php tyle że w większości po ang ):
http://www.php.pl/

Kurs PHP ( według mnie najlepszy zaraz po manualu ) w J.Pol:
http://www.leon.w-wa.pl/texts/kurs/index.php

Kurs HTML ( Bez tego ani rusz ):
http://www.kurshtml.boo.pl/

Pozdr MiFlo

PS Może być jakiś błąd bo nie sprawdzałem tego ( no może bardziej niedopatrzenie niż błąd )
lenczewski
swoją drogą nie zapomnij o zmianie parametru value o elemencie option
klyymek
Ehh sorki za błędy ale mnie nie rozumiecie. Nie jestem takim laikiem na jakiego wyszedłem w tym błędnym poście. Ja wiem jak odbierać dnae z formularzy. Chodzi mi o dynamiczne zmienianie kolejności wyświetlania listy tongue.gif (zagmatwałem) Posłuchajce: Jeśli jest lista z taką kolejnością
- opcja I
- opcja II
- opcja III
To w okienku select jest widoczna bez rozwijania opcja I i teraz jak użytkownik wybierze inną opcję (II lub III) i naciśnie submit to jego ybór jest zapisywany w bazie i wyświetlany, ale nie tylko! Przy następnej wizycie dane są odczytywane z bazy (dokładnie jego wybór) i ta widoczna bez rozwijania "ruletka" to ma być ta którą uprzednio wybrał. O to mi chodzi. Jak takie coś zrealizować?
MiFlo
Banał smile.gif
User się loguje i w tablicy nazwy = array('Opcja I','Opcja II','Opcja III');
Wykonujemy zapytanie aby pokazało nam numer jego wyboru np 3 i taki oto skrypt
  1. <?php
  2. Wcześniej było zapytanie:
  3. $q = mysql_query('i tutaj zapytanie o wyswietlenie numerka);
  4. echo '<select name="nazwa">';
  5. $i=1;
  6. while($r=mysql_fetch_array($q))
  7. {
  8. if($r['numerek'] == $i)
  9. {
  10. echo '<option value="'.$i.'" selected>'.$nazwy[$i].'</option>';
  11. }
  12. else
  13. {
  14. echo '<option value="'.$i.'">'.$nazwy[$i].'</option>';
  15. }
  16. $i++;
  17. }jeśli o to ci chodziło 
  18. echo '</select>
  19. ?>

No i to by było na tyle o ile to działa napisałem to tak na szybkiego tu możliwe ze czegoś zapomniałem
Pozdr MiFlo
klyymek
Warunek pętli while jest niedobry w moim przypadku ponieważ wykonuje się jeden raz, dlatego że ja mam tylko jeden wiersz z infem o wyborze i go updatatuje ciągle... na jaki warunek zmienić żeby było poprawnie?

Ok spoko już mam ^^
wojtekwro
nie chce zakładać nowego wątku, a przy okazji przepraszam autora, że się wtrącam w jego biggrin.gif uzyskałem cześciowo odp na swój problem jednak nie wiem jak go rozwiązac dalej. Musze stworzyć formularz w którym dane zostaną pobrne z jednej tabeli, i zapisane do 2, ale nie w tym problem.

Chciałbym aby w formularzu 1 pole było polem wyboru (lista rozwijana). Działanie tego pola: m sprawdzic dla każdego wiersza pole np. test wartość równa jest 1 jeżeli tak wyświetl wartość pola test2 w liście rozwiajnej. TEraz jeżeli już wybierzemy coś z tej listy to niektóre pola formularza zostaną automatologicznie;] wypełnione na podstawie pozostałych danych z wiersza w którym występuje wartość z listy. mam nadzieje, że wyraziłęm to dość jasno ;]
klyymek
Nie mam pojęcia dlaczego ten kod nie działa teraz na checkboxach:
  1. <?php
  2. if (isset($_POST['kn']))
  3.  {
  4. echo 'dfdf'.$_POST['kn'];
  5.  mysql_query("update options set kn='".$_POST['kn']."' where id=1");
  6.  $_SESSION['dodany'] = 1;
  7.  }
  8.  
  9. // operacje bazowe
  10. if ($row1['kn'] == 1) { echo "<input type='checkbox' name='kn' value='0' checked>"; }
  11. else { echo "<input type='checkbox' name='kn' value='1'>"; }
  12. ?>


Chodzi mi o taki sam efekt jak wyżej. Skrypt zachowuje wybór usera i zaznacza lub nie checkbox.
MiFlo
Update działa ? tzn czy aktualizuje dane. wpisz też
  1. <?php
  2. echo $row['kn'];
  3. ?>

przed :
  1. <?php
  2. if ($row1['kn'] == 1) { echo "<input type='checkbox' name='kn' value='0' checked>"; }
  3. else { echo "<input type='checkbox' name='kn' value='1'>"; }
  4. ?>
klyymek
Sprawdzałem już wszystko. Wychodzi na to że te rozwiązanie jest niepoprawne... Najpierw $row1 ma wartość 1 (standartowo w bazie) po odświeżeniu 0 a za następnym w ogóle nie istnieje. Dane są zapisyane poprawnie do bazy.
Nie wierze, że nie wiecie jak to zrobić... tongue.gif
envp
  1. function isSelected($mValueFromBase, $mSelectValue)
  2. {
  3. return ($mValueFromBase == $mSelectValue) 'selected = "selected"' : null
  4. }
  5.  
  6. <select name = "category_id" onchange="document.getElementById('myform').submit()">
  7. <?php foreach ($aCategories as $aCategory) : ?>
  8. <option value="<?=$aCategory['id']?> <?=isSelected($aCategory['id'], $iMySelectedId)?> ></option>
  9. </select>


Prosta sprawa, w $iSelectedId dajesz to id ktore odczytasz z bazy, a w $aCategory podajesz wszystkie wartości pobrane z bazy...
klyymek
Ale bez JS bym prosił dry.gif
mike
A gdzie w powyższym masz JavaScript?
~envp zapomniał o tagu i tyle (no i zrobił dwa małe błędy :-)
  1. <?php
  2.  
  3. function isSelected($mValueFromBase, $mSelectValue)
  4. {
  5. return ($mValueFromBase == $mSelectValue) ? 'selected = "selected"' : null
  6. }
  7.  
  8. ?>
  9.  
  10. <select name = "category_id" onchange="document.getElementById('myform').submit()">
  11. <?php foreach ($aCategories as $aCategory) : ?>
  12. <option value="<?=$aCategory['id']?><?=isSelected($aCategory['id'], $iMySelectedId)?> ></option>
  13. </select>
klyymek
  1. <?php
  2. onchange="document.getElementById('myform').submit()
  3. ?>

A to co? HTML? PHP?
mike
No stary, bez przesady. Inaczej tego nie zrobisz. Jak nie chcesz mieć cienia JacaScript to daj listę pojedynczych linków.
I czemu aż tak bardzo nie chcesz JavaScript?
klyymek
Cytat(mike @ 20.05.2007, 15:53:01 ) *
No stary, bez przesady. Inaczej tego nie zrobisz. Jak nie chcesz mieć cienia JacaScript to daj listę pojedynczych linków.
I czemu aż tak bardzo nie chcesz JavaScript?

Nie lubie JS - nie wiem, może dlatego że niektórzy ludzie nie mają go jeszcze w przeglądarkach, albo świadomie wyłączają, a ja lubie mieć pewność że działa tak jak ja chcę biggrin.gif

Nie no to żeby to zrobić trzeba JS użyć questionmark.gif!
Niewieże... tongue.gif
mike
Masz dwa wyjścia:
1. Korzystasz z JS i wtedy wszystko jest wysyłane po wybraniu opcji.
2. Nie korzystasz z JS i do listy rozwijalnej (osadzonej w formularzu) dokładasz przycisk wysyłający formularz po tym jak w przycisk klikniesz.

smile.gif
klyymek
Ale ja mam przycisk który trzeba nacisnąc aby checkboxa zatwierdziło, sęk w tym że coś tu mi nie działa (patrz wyżej)...
Wygląda to tak że jest to panel z ustawieniami (nie jest ich mało) w różnych typach: text, password, selecty i no i pozostał checkbox, którego rozgryźdź nie mogę smile.gif Wszystko zatwierdza się jedyn submitem winksmiley.jpg

Macie coś?

Ludzie pomóżcie! ;0
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.