Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL]Jak przekazać dodatkową informację ?
Forum PHP.pl > Forum > PHP
study
Mam taki kod:
  1. <form action='f_11c2.php' method=post>
  2. <select name=\"Nazwa_s\">
  3. <option> ..::.Wybierz z listy.::S.. </option>
  4. <?
  5. $baza = 'xxxxx';
  6. $tab = 's_przystanek00';
  7. $connection = mysql_connect('localhost','yyyyyy','zzzzzz');
  8. $wybierz = mysql_select_db($baza, $connection) or die ('Nie udało się wybrać bazy !');
  9. $Numer = $HTTP_POST_VARS['Numer'];
  10. $Nazwa = $HTTP_POST_VARS['Nazwa'];
  11. $Typ = $HTTP_POST_VARS['Typ'];
  12. $Strefa  = $HTTP_POST_VARS['Strefa'];
  13. $Data  = $HTTP_POST_VARS['Data'];
  14. $Status  = $HTTP_POST_VARS['Status'];
  15. $pokaz_s = &#092;"SELECT Nazwa, Numer AS numers FROM $tab ORDER BY Nazwa\";
  16. $wynik = mysql_query($pokaz_s, $connection) or die ('Bład zapytania do bazy !');
  17.  if ($wynik)
  18.  {
  19. while ($wiersz = mysql_fetch_array($wynik))
  20. {
  21. $numers = $wiersz['numers'];
  22. $Nazwa  = $wiersz['Nazwa'];
  23. $Typ  = $wiersz['Typ'];
  24. $Strefa = $wiersz['Strefa'];
  25. $Data = $wiersz['Data'];
  26. $Status = $wiersz['Status'];
  27. ?>
  28. <option value=\"<?echo $wiersz['Nazwa']; ?>\"><?echo $wiersz['Nazwa']; ?></option>
  29. <?
  30. }
  31.  }
  32. $wyswietls=&#092;"<input type=hidden name='numers' value='$numers'>\"; echo\"$wyswietls\";
  33. ?>
  34. </select>

Działa to na tablicy, w której są dane:
Kod
7423    przyst1      j       I      2005-06-01      1
7424    przyst2      d       I      2005-06-01      1
7444    przyst23     d       II     2005-06-01      1
7445    przyst29     d       I      2005-06-01      1
7501    przyst48     j       I      2005-06-01      1

A teraz pytanie: Dlaczego zawsze tj. niezależnie od wybranej pozycji z listy, zmienna $wyswietls otrzymuje wartość 7501 questionmark.gif Jak dopiszę kolejną pozycję gdzie numer będzie następny (większy) to zawsze wybiera wartość max zamiast wartość odpowiednią do wybranej?
Chcę aby do zmiennej $wyswietls podstawiła się wartość "7424" gdy z listy wybiorę $Nazwa_s wartość "przyst2", albo gdy $Nazwa_s="przyst29" to $wyswietls="7445".
Co źle robię i jak to powinno być questionmark.gif
Natomiast w formularzu (skrypcie) 'f_11c2.php' będzie wykonywane INSERT do innej tablicy właśnie tego co będzie w parametrze $wyswietls.
nospor
po pierwsze: w sql chcesz 2 pola, a w petli pobierasz wiecej
po drugie: w selecie wstawiasz pole typu hidden
po trzecie: zmienna $wyswietls otrzymuje zawsze ostatnią wartość numers, gdyż do tej zmiennej przypisujesz dopiero po pobraniu wszystkich wartości, czyli po każdej iteracji nadpisujesz poprzednią i w rezultacie pozostaje ci ostatnia
study
ad1.) wiem o tym, ale jeszcze nie optymalizowałem kodu winksmiley.jpg
ad.2) to dobrze czy źle ?
ad.3) rozumiem, ale jak to poprawić ?
SongoQ
@study co to znaczy nie optymalizowalem kodu? Robisz kopiuj - wklej z innego projektu?
2. oczywiscie ze zle, po co CI pole ukryte?
3. petla w ktorej zwracasz rekordy.
study
odp.1) tak - robię ^C ^V ale ze swojego projektu bo jest mi tak łatwiej - a co questionmark.gif nie wolno ?!?! tongue.gif - po za tym to nic nie wnosi do mojego pytania :/
odp.2) proszę przeczytać DOKŁADNIE mojego pierwszego posta !
odp.3) hmm, ale to nie jest oczekiwana odpowiedź sad.gif - co to pętla to wiem, ale jak rozwiązać ten problem questionmark.gif
SongoQ
ad 1. to nie jest zle, tak tylko skojarzylem ze to pewnie pozostalosc po kopiuj - wklej, sam nieraz tak robie i takie rzeczy sa nieuniknione.
ad 2. chodzilo mi o zastosowanie czegos innego niz ukrytego pola, ale ok.
ad 3. tak jak pisal @nospor $wyswietls="<input type=hidden name='numers' value='$numers'>"; echo"$wyswietls"; zawiera zawsze ostatni rekord.
Cytat
Chcę aby do zmiennej $wyswietls podstawiła się wartość "7424" gdy z listy wybiorę $Nazwa_s wartość "przyst2", albo gdy $Nazwa_s="przyst29" to $wyswietls="7445"

W jaki sposob wybierasz? zapytaniem? Mozesz troszeczke jasniej opisac mechanizm dzialania?
study
odp.1) - ok winksmiley.jpg
odp.2) to przyszło mi do głowy
odp.3) ma to działać tak:
poszczególne pozycje wybieram z listy (SELECT z bazy) po jej wybraniu, a następnie kliknięciu "wyślij" (type submit) ma nastąpić przesłanie dwóch informacji:
a.) pozycja z listy - zmienna $Nazwa_s
b.) numerek odpowiedni do tej pozycji - zmienna $numers
Dlatego tak ponieważ ten następny formularz (skrypt) ma zrealizować INSERT do bazy właśnie ten numerek z b.) a nie nazwę z a.) .
nospor
Nie rozumiem? Dla danej nazwy masz kilka odpowedzi ($numers)? Ale widać se skryptu że $nuemrs pobierasz z tego samego rekordu co nazwa, więc chyba jest to relacja jeden do jeden. W takim wypadku $numers wystarczy dać jako wartość w <option value="$numers"> i już będziesz mial numer dla nazwy
study
Ciężko tu mówić o "relacji" w jednej tablicy, ale fakt, że $numers jest z tego samego rekordu w tablicy co $Nazwa_s winksmiley.jpg
Wygląda na to, że wiesz o co mi "biega" winksmiley.jpg A możesz pomóc wstawić <option value="$numers"> do mojego skryptu questionmark.gif - Proszę Cię smile.gif
nospor
źle użylem slowa relacje biggrin.gif chodzilo mi oto, oco mi chodzilo, i niepotrzebnie te relacje wstawilem

  1. <?php
  2.  
  3. //.....
  4. while ($wiersz = mysql_fetch_array($wynik))
  5.  {
  6. //........
  7.  echo &#092;"<option value=\"$numers\">$Nazwa</option>\";
  8.  }
  9. //....
  10.  
  11. ?>

i juz tego pola hidden nie dodawaj
study
smile.gif
Jest prawie, że oki tylko jak wstawię to tak:
  1. <?
  2. //.......[ciach]......
  3.  
  4. $Status = $wiersz['Status'];
  5.  
  6. echo &#092;"<option value=\"$numers\">$Nazwa</option>\";
  7. ?>
  8. <?
  9. }
  10.  }
  11. ?>
  12. </select>

to zmienna $Nazwa_s jest pusta sad.gif a też jest mi potrzebna ! :|
nospor
jaka $Nazwa_s. Wcześniej pisales $Nazwa. Się zdecyduj bo już nie wiem o co ci chodzi biggrin.gif
Jeśli nazwe teżchcesz przekazywać, możesz też dodać do option razem z numers tylko oddzielić np |:
  1. <?php
  2.  
  3. echo &#092;"<option value=\"$numers|$Nazwa\">$Nazwa</option>\";
  4.  
  5. ?>

przy odbieraniu zrobisz explode:
  1. <?php
  2.  
  3. $select=explode('|',$_POST['twojselect']);
  4. $numers=$select[0];
  5. $Nazwa=$select[1];
  6.  
  7. ?>
study
smile.gif
Jest coraz lepiej ale to jeszcze nie jest to sad.gif
A dlatego, że:
a.) $Nazwa - to nazwa zmiennej, pobieranej z tablicy;
b.) $Nazwa_s - to nazwa, w której przechowywana jest wartość wybrana z pkt. a.) wg "<select name="Nazwa_s" " - dlatego zrobiłem tak, ponieważ na tej samej stronie jeszcze raz wybieram $Nazwa, ale zapisuję pod $Nazwa_d - troszku może dziwne, ale tak jest mi to potrzebne, a nie chcę opisywać całego mojego projektu;
c.) o sposobie w jaki "odbieram" nie pisałem, a teraz to napiszę:
  1. <?
  2.  
  3. $Nazwa_s =$HTTP_POST_VARS['Nazwa_s'];
  4. $numers  =$HTTP_POST_VARS['numers'];
  5.  
  6. $wyswietl=&#092;"
  7. <p style='position:absolute; top:130px; left:220px;'><b>Skąd:</b></p>
  8. <p style='position:absolute; top:160px; left:130px;'><font size=1>$numers</font> $Nazwa_s</p><input type=hidden name='Nazwa_s' value='$Nazwa_s'>
  9. &#092;";
  10. echo &#092;"$wyswietl\";
  11. ?>

i teraz to by było na tyle winksmiley.jpg
Co teraz zrobić po stronie "wysyłającej" ?
nospor
Nazwa_s to nazwa selecta? tak. oki. Chcesz pobrać, to co gościu wybral, czyli nazwę i numer dla tej nazwy. Czyli robisz jak pisalem:
  1. <?php
  2.  
  3. echo &#092;"<option value=\"$numers|$Nazwa\">$Nazwa</option>\";
  4.  
  5. ?>


a pobierasz tez jak pisalem:
  1. <?php
  2.  
  3. $select=explode('|',$_POST['Nazwa_s']);
  4. $numers=$select[0];
  5. $Nazwa_s=$select[1];
  6.  
  7. ?>
study
Wszystko gra exclamation.gif
Dzięki exclamation.gif
smile.gif

Jednak nie do końca sad.gif
Jak zmodyfikować kod:
  1. <form action=\"f_11c3.php\" method=post>
  2. <?
  3. $selects =explode('|',$HTTP_POST_VARS['Nazwa_s']);
  4. $numers  =$selects[0];
  5. $Nazwa_s =$selects[1];
  6. $wyswietl  =&#092;"
  7. <p style='position:absolute; top:130px; left:220px;'><b>Skąd:</b></p>
  8. <p style='position:absolute; top:160px; left:130px;'><font size=1>$numers</font> $Nazwa_s</p><input type=hidden name='Nazwa_s' value='$Nazwa_s'>
  9. &#092;";
  10. echo &#092;"$wyswietl\";
  11. ?>

aby móc dalej przekazać nie tylko to co jest w zmiennej $Nazwa_s ale również, (a zwłaszcza) to co jest w zmiennej $numers ?
Najlepiej by było, aby można było przekazać tak jedną jak i drugą zmienną.
nospor
no tak jak zrobiles z Nazwa_s. Dodaj jeszcze jedno pole ukryte dla $numers
study
Ale właśnie nie wiem jak sad.gif (różnie kombinowałem i nic) i dlatego proszę Cię o pomoc winksmiley.jpg
I to musi być z $HTTP_POST_VARS - tylko gdzie ?
Jak w explode dopisać inny parametr?
nospor
Jak to nie wiesz jak? Ktoś Ci pisal ten skrypt? Masz przecież jak wól wstawione pole ukryte dla NAzwa_S

proszę (juz też z $numers):
  1. <?php
  2.  
  3. $wyswietl  =&#092;"
  4.  .... 
  5. <input type=&#092;"hidden\" name=\"Nazwa_s\" value=\"$Nazwa_s\">
  6. <input type=&#092;"hidden\" name=\"numers\" value=\"$numers\">
  7. &#092;";
  8. echo &#092;"$wyswietl\";
  9.  
  10. ?>
study
hmm :|
Albo czegoś nie rozumiem (możliwe) albo coś nie tak z tym kodem:
  1. <form action=\"f_11c3.php\" method=post>
  2. <?
  3. $selects =explode('|',$HTTP_POST_VARS['Nazwa_s']);
  4. $numers  =$selects[0];
  5. $Nazwa_s =$selects[1];
  6. $wyswietl  =&#092;"
  7. <p style='position:absolute; top:130px; left:220px;'><b>Skąd:</b></p>
  8. <p style='position:absolute; top:160px; left:130px;'><font size=1>$numers</font> $Nazwa_s</p><input type=&#092;"hidden\" name=\"Nazwa_s\" value=\"$Nazwa_s\">
  9. <input type=&#092;"hidden\" name=\"numers\" value=\"$numers\">
  10. &#092;";
  11. echo &#092;"$wyswietl\";
  12. ?>

A może źle odbieram tym skryptem (f_11c3.php):
  1. <?
  2. $baza = &#092;"zzz\";
  3. $tab = &#092;"s_czas00\";
  4. $connection = mysql_connect(&#092;"localhost\",\"xxx\",\"yyy\");
  5. $wybierz = mysql_select_db($baza, $connection) or die (&#092;"Nie udało się wybrać bazy !\");
  6.  
  7.  $numers =$HHTP_POST_VARS['numers'];
  8.  $Nazwa_s  =$HTTP_POST_VARS['Nazwa_s'];
  9.  
  10. $wstaw = &#092;"INSERT INTO $tab
  11.  (Skad)
  12.  VALUES
  13.  ('$numers')
  14.  &#092;";
  15. $wynik = mysql_query($wstaw, $connection);
  16.  
  17. if ($wynik)
  18.  {
  19. &#092;"
  20. <p style='position:absolute; top:130px; left:220px;'><b>Skąd:</b></p>
  21. <p style='position:absolute; top:160px; left:130px;'><font size=1>$numers</font>$Nazwa_s</p>
  22.  
  23. <input type=button value='Powrót' OnClick=&#092;"self.location.href='f_11_czasiodleglosc.php'\" style='width: 80px; height: 30px; position:absolute; top:290px; left:500px;'>
  24. &#092;";
  25.  }
  26. else { echo &#092;"<h2>Nie dopisano do słownika :(</h2>
  27.  
  28. <input type=button value='Powrót' OnClick='history.back()' style='width: 80px; height: 30px; position:absolute; top:290px; left:500px;'>
  29. &#092;";
  30.  }
  31. ?>

Proszę poradź co zrobić exclamation.gif
nospor
1)Ale co? jakis blad ci wywala?
2) czy ty wogóle zamykasz ten formualrz gdzie masz ola ukryte?
3)daj se echo w tym f_11c3.php i powiedz czy otrzymales te zmienne:
echo "Numers: $numers; Nazwa_s: $Nazwa_s";
study
ad.1) nie, błedu nie wywala tylko w tablicę polecenie INSERT wstawia "0" natomiast gdy zastąpię VALUES ('$numers') tym VALUES ('789') to wstawia właśnie "789", więc na tej podstawie twierdzę, że $numers jest puste, a ponadto pkt.3.) poniżej
ad.2) formularz jest zamykany tylko tego tutaj nie widać ponieważ po tym skrypcie są jeszcze inne skrypty - wiem wiem, nie ma obawy o "przesłanianie" zmiennych bo nazwy są inne - sprawdziłem winksmiley.jpg
ad.3) dodatkowego echo nie ma potrzeby wstawiać bo jest już realizowane przez 22 i 23 linię kodu skryptu f_11c3.php:
Kod
<font size=1>$numers</font>$Nazwa_s</p>

i w $Nazwa_s jest tekst, w w $numers jest puste.
nospor
Mistrzu, ty sięprzyjrzyj w jaki sposób pobierasz zmienną numers:
$numers =$HHTP_POST_VARS['numers'];
widzisz błąd? nie? powinno być tak:
$numers =$HTTP_POST_VARS['numers'];
widać różnicę?no, to dobrze biggrin.gif

daj se error_reporting(E_ALL); i powinienes wówczas wychwytywać takie rzeczy.

A tak przy okazji czemu nie korzystasz z $_POST?
study
O kurcze exclamation.gif exclamation.gif tongue.gif
Ale gafa - wstyd mi sad.gif
A jest to mój pierwszy i na dokładkę cholernie (jak dla mnie) duży projekt i zdaję sobie sprawę, że jeszcze duuuużo nie wiem o php :| ale ..... cały czas rzeźbię, a jak przećwiczę (i się obronię tongue.gif ) to na pewno będę ...... więcej wiedział. Oczywiście kolosalne znaczenie mają takie odpowiedzi jak Twoje "nospor" i bardzo sobie je cenię smile.gif
A dlaczego stosuję $HTTP_POST_VARS zamiast $_POST? - ano dlatego, że serwer, na którym ma to być (oceniane) ma php v4.0 a nie 4.1 sad.gif

Pozdrowionka i BIG WIELKIE DZIEKUJE ! smile.gif

ps. Dlaczego nie można pisać DUŻEGO "ę" questionmark.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.