Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Przesłanie danych POST z listy wyboru
Riff
post 17.10.2007, 16:31:39
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 17.10.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
drPayton
post 17.10.2007, 17:21:33
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował drPayton 17.10.2007, 17:22:11
Go to the top of the page
+Quote Post
Riff
post 17.10.2007, 18:44:23
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 17.10.2007

Ostrzeżenie: (0%)
-----


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żę...
Go to the top of the page
+Quote Post
drPayton
post 17.10.2007, 21:27:00
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
Riff
post 18.10.2007, 20:50:29
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 17.10.2007

Ostrzeżenie: (0%)
-----


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ę...
Go to the top of the page
+Quote Post
rebelthorn
post 13.12.2007, 09:38:30
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 01:27