Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z lista rozwijana
Forum PHP.pl > Forum > Po stronie przeglądarki
lukas22333
Mam problem z formularzem, niby banalny ale nie moge tego zrobic. Otoz mam rozwijana liste i chce aby po wyborze ktorej mozliwosci z listy wartosc value byla wysylana do zmiennej i lista znikala a pojawial sie inny dowolny formularz ktory bedzie mial juz w jednym polu wpisana ta wartosc z listy.

Pozdrawiam
ziqzaq
Ponieważ nie dałeś niczego (kod) na czym można się oprzeć to podaje pomysły.
1). Formularz A z listą rozwijalną. Wybieramy element z listy i zatwierdzamy formularz (jeśli ma to być automatyczne to w select dajemy "onchange=zatwierdzenie_formularza()"). Dodatkowo w przypadku użycia js ukryłbym przycisk zatwierdzenia formularza po załadowaniu dokumentu - jeśli koś ma włączone js to zatwierdzi formularz wybierając opcję a jak nie ma to wybierze opcje i kliknie w przycisk.
Formularz A (z wybraną wartością z listy) idzie do skryptu, który generuje następny formularz - oznaczmy go jako B. W formularzu B ustawiamy wybraną wartość w liście rozwijanej (czyli w odpowiednim option dodajemy atrybut selected="selected").
2). Podobne podejście jak wyżej tylko z AJAX.

Zakładam, że wiesz:
- operować formularzami,
- wygenerować listę z wybraną opcją,
- zatwierdzić formularz javascriptem.
Jeśli czegoś nie wiesz to masz już idee i możesz znaleźć to w google, lub na forum.
lukas22333
Właśnie nie za bardzo wiem jakby miał ten kod przekazujący dane z pierwszego formularza i generujący drugi.

Oto kody 2 formularzy:
  1. <?php
  2. function form1()
  3.   {
  4.  
  5.   $ret='<form action="admin.php?page=menu&mode=edittype&id='.$id.'" method="POST">';
  6.   $ret .= '<fieldset>';
  7.   $ret .= 'Wybierz kategorię do edycji: <select name="id">';      
  8.   $ret .= '<option value="">- Wybierz -</option>';
  9.  
  10. //Wyciąganie danych do pola select w 1szym formularzu //
  11.  
  12.   $sql = 'SELECT id, name FROM menu';
  13.   $result = mysql_query($sql) or die(mysql_error());
  14.   if ($result)
  15.   {
  16.     while ($r=mysql_fetch_assoc($result))
  17.       {            
  18.         $ret .= '<option value="'.$r['id'].'">'.$r['name'].'</option>';
  19.       }
  20.    }
  21.        
  22.    $ret .= '</select><br />';
  23.    $ret .= '<p><input type="submit" value="Wybierz" /></p>';
  24.    $ret .= '</fieldset></form>';
  25.  
  26. echo $ret;
  27. }
  28.  
  29. function form2(){
  30.    $ret = '<form action="admin.php?page=menu&mode=edittype" method="POST">';
  31.    $ret .= '<fieldset>';
  32.    $ret .= '<p>Wprowadź nową nazwę: <input type="text" name="name" /></p>';
  33.    $ret .= '<p>Nowy alias: <input type="text" name="type" /></p>';
  34.    $ret .= ' Położenie: <select name="position">';      
  35.    $ret .= '<option value="">- Wybierz -</option>';
  36.  
  37. //Wyciąganie danych do pola select w 2gim formularzu //  
  38.  
  39.     $sql = 'SELECT name FROM menu_poz';
  40.     $result = mysql_query($sql) or die(mysql_error());
  41.     if ($result)
  42.      {
  43.        while ($r=mysql_fetch_assoc($result))
  44.        {            
  45.         $ret .= '<option value="'.$r['name'].'">'.$r['name'].'</option>';
  46.        }
  47.      }
  48.        $ret .= '</select><br />';
  49.        $ret .= '<p><input type="submit" value="Zapisz zmiany" /></p>';
  50.        $ret .= '</fieldset></form>';
  51. echo $ret;
  52. }
  53. ?>


I generalnie dążę do tego żeby na końcu zostało wykonane takie zapytanie do bazy(te zmienne post tylko zeby lepiej to przedstawic):

CODE
$sql = 'UPDATE menu SET name="'.$_POST['name'].'", type="'.$_POST['type'].'", pos="'.$_POST['position'].'" WHERE id="'.$_POST['id'].'"';



Pozdrawiam

Dodam tylko ze obojętnie czy to będzie w 1 formularzu czy w dwóch.
ziqzaq
Hmm. W zapytaniu które podałeś brakuje tylko 'id'.
Wnioskuje że:
- to zapytanie ma być wykonane po formularzu nr 2,
- to id (w zapytaniu) masz przekazać z pierwszego formularza do drugiego.
Więc zatwierdzając formularz nr 1, przekazujesz do skryptu zmienną $_POST['id'], więc generując formularz nr. 2 dodajesz tylko jedno pole (określające id edytowanego elementu):
  1. <?php
  2. $id_kategorii = (int) $_POST['id'] : ; // Plus jakies sprawdzenie czy jest > 0, i niepuste itd.
  3. // I np. tak:
  4. $ret .= '<p>Id: <input type="text" name="id" value="' . $id_kategorii . '" /></p>';
  5. // a jak nie chcesz zeby to bylo widoczne to tak:
  6. $ret .= '<input type="hidden" name="id" value="' . $id_kategorii . '" />';
  7. ?>

I tym sposobem z formularza nr. 2 dostajesz zmienne w tablicy post: id, name, type i position, które możesz sobie wrzucić do zapytania sql.
Wsjo.

Edit:
Acha i w drugim formularzu przydałoby się jakoś pobrać dane edytowanej (bo chyba to chcesz zrobić) kategorii.
Nie zauważyłem skąd chcesz brać 'name' i 'type' edytowanego elementu. Nie ma wcześniej żadnego zapytania do bazy.
lukas22333
Mam jeszcze jedno pytanie, czym mogę zastąpić kod java w poniższym kodzie. Ważne zeby po wybraniu danej opcji przekierowywało na adres który jest podany w polu Value.

Kod
<select onchange="self.location.href = this.value">
<option value="admin.php?page=menu&mode=edittype&id='.$r['id'].'">Costam</option>
</select>
ziqzaq
Wartość musi być chyba pełnym adresem (razem z http://...)
  1. <select onchange="window.location = this.value">
  2. <option value="http://mojastronka.pl/admin.php?page=menu&mode=edittype&id='.$r['id'].'">Costam</option>

Albo nie rób redirect (bo zadziała tylko z js) tylko normalny formularz:
  1. <form name="formik" id="formik" action="admin.php?page=menu&mode=edittype" method="post">
  2. <select name="id" onchange="document.formik.submit()">
  3. <option value="'.$r['id'].'">Costam</option>
  4. <input type="submit" value="OK" id="przycisk" />
  5. </form>

"id" (z select) przesyłasz wtedy z formularza.
Dodatkowo możesz dodać do body
  1. ...
  2. <body onload="document.getElementById('przycisk').style.display = 'none';">
  3. ...

i w ten sposób jak ktoś ma włączone js to przycisk będzie niewidoczny (bo jest niepotrzebny), w przeciwnym przypadku będzie mógł użyć przycisku do zatwierdzenia formularza.

Sorki za jakość kodu.
Co do js to możesz sobie dopisać funkcje i poprostu później je wywołać a nie wrzucać prosto do html. Zrób jak ci wygodniej.

PS I nie java tylko javascript (js) - to są dwie różne rzeczy winksmiley.jpg

Edit:
Aj! Błąd w js w onload body. Poprawione.
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.