Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Przesłanie danych POST z listy wyboru
Forum PHP.pl > Forum > Przedszkole
Riff
Jako iż to mój pierwszy post na forum chciałbym się przywitać - a więc witam smile.gif. Przechodząc do rzeczy...

Nie majac nikogo, kto byłby w stanie znosić moje pytania na gg muszę zadowolić się tymże forum, gdzie nie zawsze można znaleźć odpowiedź poprzez wyszukiwarkę. Najlepsza nauka poprzez praktykę, więc od kilku dni piszę sobie skromny 'katalog osób' - idea: podany jest nick, kraj, prowincja, miasto i dane kontaktowe do osoby, która się wpisała do bazy danych. Utknąłem jednakże na następującym zagadnieniu...

Otóż, z listy rozwijanej wybieram kraj - pojawia się formularz, w którym wpisuję nazwę prowincji (stanu, województwa). Wpisane dane przetwarzane są przez skrypt, który dodaje do bazy danych identyfikator prowincji, jej nazwę oraz identyfikator kraju, pod jakim dodana została ta prowincja.

Jednakże pod formularzem chciałbym wyświetlać listę wszystkich aktualnych prowincji w wybranym kraju. Zapytanie do bazy danych wygląda więc następująco:

  1. <?php
  2. $sql = ("SELECT * FROM udir_province WHERE country_id='$id_kraju'");
  3. ?>


gdzie:
udir_province - tabela prowincji
country_id - identyfikator kraju w tabeli prowincji
$id_kraju - zmienna określona w kodzie w następujący sposób:

  1. <?php
  2. $id_kraju = $_POST['country_id'];
  3. ?>


gdzie to $_POST['country_id'] to nazwa identyfikatora przesłanego (a przynajmniej powinien być przesłany) metodą post z listy wyboru, której kod znajduje się poniżej:

  1. <form action="" method="post"> 
  2. <select name="country_name" onchange="this.form.submit()"> 
  3. <option value="">-- Choose a country --</option> 
  4. <?php 
  5. // polaczenie i wybranie bazy danych
  6. if ($dbc = @mysql_connect ($host, $user, $pass)) {
  7. if (!@mysql_select_db ($name)) {
  8. die ('<p>i am sorry, cannot select the database, because: <b>' . mysql_error . '</b></p>');
  9. }
  10. } else {
  11.  die ('<p>I am sorry, cannot connect to the database, because: <b>' . mysql_error() . '</b></p>');
  12. }
  13. // zapytanie
  14. $pozycja = mysql_query("SELECT * FROM udir_country ORDER BY country_name ASC") 
  15. or die('Error in the query');
  16. if(mysql_num_rows($pozycja) > 0) {
  17. while($r = mysql_fetch_assoc($pozycja)) { 
  18. // Tutaj następuje wyświetlenie nazwy kraju między tagami <option>
  19. echo "<option>".$r['country_name']."</option>"; 
  20. } 
  21. }
  22. ?>
  23. </select> 
  24. </form>


Po wybraniu z listy danego kraju country_name zostaje bez problemu przesłane, przez co dalszy skrypt jest w stanie dodać prowincję. I teraz przechodzimy do sedna problemu (nareszcie smile.gif).

Otóż, podczas gdy $r['country_name'] zostaje przesłane, to nie mam zielonego pojęcia jak przesłać country_id. Tworząc coś takiego:

  1. <?php
  2. echo "<option>".$r['country_name']."<b>".$r['country_id']."</b></option>";
  3. ?>


W liście wyboru zostaną wyświetlone zarówno nazwa jak i identyfikator kraju, jednakże nie zostają one poprawnie przesłane - nie wiem z jakiego powodu, póki co żaden podręcznik ani strona mnie nie oświeciły w tej kwestii, dlatego zwracam się z prośbą o pomoc tutaj - jak więc przesłać dwie osobne dane POST tak, jak przesyłana jest jedna ['country_name']? Jakieś ukryte pole czy co?

Z góry przepraszam, jeśli to co napisałem jest niezrozumiałe - tak jak powiedziałem, jestem zielonym groszkiem, któremu nie ma kto wytłumaczyć najprostrzych idei programowania w php,a przeszukiwać samemu księgi i witryny nawet cierpliwemu człowiekowi może si
 znudzić - tymbardziej, jak nie znajduje odpowiedzi po dniach poszukiwań smile.gif
drPayton
Nie wiem, czy dobrze zrozumiałem Twój problem, ale jeśli chcesz przesłać dane z pola select, musisz wartość określić w atrybucie value tagu option, czyli:
  1. <?php
  2. echo "<option value=\"".$r['country_id']."\">".$r['country_name']."</option>";
  3. ?>
Riff
Dokładnie, chodzi mi o przesłanie danych z pola select - jedną przesyła, dwóch już nie. A wstawianie country_id w value="" nie działa. Bez przesłania identyfikatora leżę...
drPayton
Ahm, czyli chcesz przesłać zarówno id jak i nazwę. Mogę zapytać po co? Wystarczy id z bazy, a nazwę pobierzesz sobie po przesłaniu. Jeśli jednak koniecznie musi to być wysyłane naraz możesz zrobić tak:
  1. <?php
  2. (...)
  3. <select name="country_name" onchange="this.form.submit()"> 
  4. (...)
  5. echo "<option value=\"".$r['country_id']."|".$r['country_name']."\">".$r['country_name']."</option>";
  6. ?>

i w pliku który odbiera te dane:
  1. <?php
  2. $country = explode('|', $_POST['country_name']);
  3. $id = $country[0];
  4. $nazwa = $country[1];
  5. ?>

Mniej więcej tak (na przykład oczywiście)
Riff
Cóż, ta metoda też nie pomogła, ale problem już rozwiązałem za pomocą odpowiedniego zapytania do bazy danych:
  1. <?php
  2. $sql = ("SELECT * FROM udir_province JOIN udir_country ON udir_province.country_id=u
    dir_country.country_id WHERE udir_country.country_name='$dzial'"
    );
  3. ?>


Z tego też powodu przyznaję rację: niepotrzebne mi było przesyłanie dwóch danych POST smile.gif. Cóż, człowiek uczy się poprzez praktykę...
rebelthorn
pewnie nie jestem expertem ale..:
1. powinienes sprobowac wykonac najpierw polaczenie do bazy a pózniej bawic sie kodem - tak bedzie czytelniej
2. po kij ci te tablice? przesyłajac jedną wybraną opcje z selecta wysyłasz jedną wartość więc wystarczy zwykła zmienna
3. to co chcesz przesłać z formularza musi być wpakowane do jakiegoś inputa .. np <input type="hidden" />
4. ogólnie kod i Twoje tłumacznie jest strasznie zagmatwane więc mam nadzieje ze pomogłem tongue.gif
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.