Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [JS/php] Automatyczne wypełnianie pól formularza.
darth_sidious
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Witam
Od kilku (doslownie) godzin borykam sie z nastepujacym problem. Mam formularz, w ktorym po wybraniu z listy rozwijalnej nazwy dostawcy inne pola (miejscowosc, ulica, kod, itp) wypelniaja sie automatycznie. Formularz tworzony jest w php, a do automatycznego wypalniania pol uzywam JavaScript. Poszczegolne elementy rozwijanej listy tworzone sa poprzez petle i sciagane z bazy danych:

  1. <form action="wprowadz.php" method="post" name="formularz">
  2. <select name='firmy' onchange=Pokaz_zmienna()>
  3. <?php
  4. $pobranie = "select * from firmy order by nazwa_dostawcy";
  5. $wynik_pobrania = mysql_query($pobranie) or die (mysql_error());
  6. $liczba_wierszy = mysql_num_rows($wynik_pobrania);
  7. for($i = 0; $i < $liczba_wierszy; $i++)
  8. {
  9. $wiersz = mysql_fetch_array($wynik_pobrania);
  10. echo "<option value='".$wiersz['nazwa_dostawcy']."'>".$wiersz['nazwa_dostawcy']."</option><br>";
  11. }
  12. ?>
  13. </select>
  14. .
  15. .
  16. .
  17.  
  18. <td>
  19. <input type="text" name="zmienna">
  20. </td>


Poradzilem sobie z wypelnieniem jednego pola o nazwie "zmienna". Poprzez JS przekazuje wybrana z listy firme do zmiennej "x", ktora nastepnie wypelnia zawartosc INPUTA o nazwie "zmienna".

  1. <script LANGUAGE="JavaScript">
  2. <!--
  3. function Pokaz_zmienna() {
  4. var v = document.formularz.firmy.selectedIndex;
  5. var x = document.formularz.firmy[v].value;
  6. document.formularz.zmienna.value=x;
  7.  
  8. //-->


Kolejny INPUT chcialem wypelnic nazwa miejscowosci, w ktorej znajduje sie dana firma i... tu zaczynaja sie dla mnie schody, bo po prostu nie wiem jak polaczyc JS i php. A musze to zrobic, poniewaz miejscowosc rowniez jest pobierana z bazy na podstawie wybranej z listy firmy. Probowalem tak:

  1. <script LANGUAGE="JavaScript">
  2. <!--
  3. function Pokaz_zmienna() {
  4. var v = document.formularz.firmy.selectedIndex;
  5. var x = document.formularz.firmy[v].value;
  6. var y =
  7. <?php
  8. $pobierz = "select miasto from firmy where nazwa_dostawcy = ".x."";
  9. $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
  10. echo $wynik_pobierz;
  11. ?>
  12. document.formularz.miejscowosc.value=y;
  13.  
  14. }
  15. //-->


I niestety nic z tego (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Co robie zle? Czy kombinujac z polaczeniem JS i php czegos nie pochrzanilem? Nie wiem... Moze Wam uda sie to rozwiklac, badz tez naprowadzic mnie chociaz na jakis slad/kod, ktory pomoze mi dalej juz isc samemu.
I jeszcze jedna uwaga - tych pol/inputow, ktorych trzeba wypelnic na podstawie wybranej firmy jest jeszcze kilka kod pocztowy, nr tel, itp.

Pozdrawiam
Darth
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kod
$pobierz = "select miasto from firmy where nazwa_dostawcy = ".x."";
   $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
   echo $wynik_pobierz;

Gdzie fetchujesz wynik?
Go to the top of the page
+Quote Post
darth_sidious
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Wynik przypisuje, a wlasciwie chcialbym przypisac do zmiennej Y:

  1. function Pokaz_zmienna() {
  2. var v = document.formularz.firmy.selectedIndex;
  3. var x = document.formularz.firmy[v].value;
  4. document.formularz.zmienna.value=x;
  5. var y =
  6. <?php
  7. $pobierz = "select miasto from firmy where nazwa_dostawcy = ".x."";
  8. $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
  9. echo $wynik_pobierz;
  10. ?>
  11. document.formularz.miejscowosc.value=y;


a nastepnie przypisac ja do inputu o nazwie miejscowosc;
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No, ale $wynik_pobierz, to przecież zasób, a nie tablica, czy string...

Możesz spróbować:
Kod
var y = "
   <?php
   $pobierz = "select miasto from firmy where nazwa_dostawcy = ".x."";
   $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
   $wynik_pobierz = mysql_fetch_assoc($wynik_pobierz);
echo $wynik_pobierz['miasto'];
   ?>";
   document.formularz.miejscowosc.value=y;
Go to the top of the page
+Quote Post
darth_sidious
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


W tym przypadku w ogole nie wyswietla formularza :-(
Nie wiem czy uzycie tablicy asocjacyjnej jest odbrym rozwiazaniem. Z bazy pobieram przeciez tylko jedna dana - nazwe miasta.
Moze problem jest przy wyborze miasta na podstawie wyniku z selecta?

  1. <?php
  2. $pobierz = "select miasto from firmy where nazwa_dostawcy = ".x."";
  3. ?>


gdzie "x" to:

  1. var v = document.formularz.firmy.selectedIndex;
  2. var x = document.formularz.firmy[v].value;
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Wartość dla nazwa_dostawcy w zapytaniu nie jest w cudzysłowie.
A co wywala mysql_error" title="Zobacz w manualu php" target="_manual?
Go to the top of the page
+Quote Post
darth_sidious
post
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Nawiasy zaraz podokladam, a mysql_error nic nie wywala...

Ok... Nawiasy dorzucone, ale tym razem formularz wyswietlany jest prawidlowo. Jednak wybieranie z listy firm nic nie daje - nie wyswietla sie juz nawet pierwszy input o nazwie "zmienna".

A mam takie pytanie.
Czy pobierajac dane z bazy, na podstawie wartosci x, wartosc ta na pewno jest dobrze interpretowana?
  1. <script LANGUAGE="JavaScript">
  2. <!--
  3. function Pokaz_zmienna() {
  4.  var v = document.formularz.firmy.selectedIndex;
  5.  var x = document.formularz.firmy[v].value;
  6.  document.formularz.zmienna.value=x;
  7.  <?php
  8.  $pobierz = "select miasto from firmy where nazwa_dostawcy = "".x.""";
  9.  $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
  10.  echo "var y = $wynik_pobierz";
  11.  ?>;
  12.  document.formularz.miejscowosc.value=y;
  13.  
  14. }
  15. //-->
  16. </SCRIPT>

Jesli nie to piwinien chyba wywalic komunikat o bledzie.
Drugie pytanko - jak sprawdzic jak wartosc faktycznie pod koniec wykonania skryptu ma wartosc $wynik_pobierz ?

Ten post edytował darth_sidious 11.10.2006, 22:03:41
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. echo "var y = $wynik_pobierz";
  3. ?>

Ale wartość w kodzie JS też musisz dać w cudzysłowy!
  1. <?php
  2. echo "var y = "$wynik_pobierz"";
  3. ?>


Cytat
Drugie pytanko - jak sprawdzic jak wartosc faktycznie pod koniec wykonania skryptu ma wartosc $wynik_pobierz ?

Nie zrozumiałem :S
W JS czy w php, czy jak?
Go to the top of the page
+Quote Post
darth_sidious
post
Post #9





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Cytat(erix @ 12.10.2006, 15:22:51 ) *
  1. <?php
  2. echo "var y = $wynik_pobierz";
  3. ?>

Ale wartość w kodzie JS też musisz dać w cudzysłowy!
  1. <?php
  2. echo "var y = "$wynik_pobierz"";
  3. ?>

Nie zrozumiałem :S
W JS czy w php, czy jak?



Wszystko jedno, chodzi tylko o to aby testowo moze wyswietlic, tak dla sprawdzenia w tej chwili, jaka wartosc ma zmienna $wynik_pobierz

Faktycznie nawiasy uaktywnily puste do tej pory pole input, lecz zamiast wartosci wyswietla sie ciagle Resource id #5 cokolwiek bym nie wybral... Ale i tak jest juz postep... cos wyswietla ;-)
Mam nadzieje, ze dzis uda nam sie z tym uporac.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
  1. <?php
  2. $wynik_pobierz = mysql_query($pobierz) or die (mysql_error());
  3. ?>

Moja tępa głowa; nie zauważyłem tego wcześniej !@!

$wynik_pobierz, to jest zasób z wynikiem zapytania; musisz go jeszcze potraktować mysql_fetch_array" title="Zobacz w manualu php" target="_manual/mysql_fetch_assoc" title="Zobacz w manualu php" target="_manual.
Go to the top of the page
+Quote Post
Sabistik
post
Post #11


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


chwila chwila
  1. <?php
  2. $pobierz = "select miasto from firmy where nazwa_dostawcy = "".x.""";
  3. ?>

x to przeciez zmienna js to jak ty chcesz to wykorzystac w php ? ;o chyba troche sie zagalopowales. takie zeczy o tylko w erze, znaczy ajaxie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Po zatym jak juz wspomnial erix nie zabardzo wiesz co zwraca mysql_query
Go to the top of the page
+Quote Post
darth_sidious
post
Post #12





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


W takim razie jak przekazac do SELECTA nazwe wybranego dostawce, a nastepnie po wyciagnieciu, np nr kodu pocztowego tego dostawcy, zwrocic kod do skryptu i przypisac do zmiennej, ktora pozniej wyswietli go w inpucie - w tym jest wlasnie problem.

Racja, nie wiem co tak na prawde zwraca mysql_query mimo mysql_error i nie wiem jak to sprawdzic :-(

Ten post edytował darth_sidious 12.10.2006, 19:42:24
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zerkałeś do manuala dla tych funkcji? Tam masz wszystko pięknie opisane, co należy zrobić. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Sabistik
post
Post #14


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Wszystko cos na wzor tego:

  1. <form action="wprowadz.php" method="post" name="formularz">
  2. <select name='firmy' onchange=Pokaz_zmienna()>
  3. <?php
  4. $pobranie = "select * from firmy order by nazwa_dostawcy";
  5. $result = mysql_query($pobranie) or die (mysql_error());
  6. while ($wiersz= mysql_fetch_array($result, MYSQL_ASSOC))
  7. {
  8. $wiersz = mysql_fetch_array($wynik_pobrania);
  9. echo "<option value='".$wiersz['nazwa_dostawcy']."'>".$wiersz['nazwa_dostawcy']."</option><br>";
  10. }
  11. ?>
  12. </select>
  13. .
  14. .
  15. .
  16.  
  17. <td>
  18. <input type="text" name="zmienna">
  19. </td>


  1. <?php
  2. <script LANGUAGE="JavaScript">
  3. <!--
  4. function Pokaz_zmienna() {
  5. var v = document.formularz.firmy.selectedIndex;
  6. var x = document.formularz.firmy[v].value;
  7.  
  8. advAJAX.post({
  9. url: "pob.php.",
  10. parameters : {
  11. "nazwa" : x
  12. },
  13. onSuccess : function(obj) { var y = obj.responseText; },
  14. onError : function(obj) { alert("Error: " + obj.status); },
  15. });
  16.  
  17.  
  18. document.formularz.miejscowosc.value=y;
  19.  
  20. }
  21. //-->
  22. </SCRIPT>
  23. ?>


pob.php:
  1. <?php
  2. $pobierz = "select miasto from firmy where nazwa_dostawcy = ".$_POST['nazwa'];
  3. $result = mysql_query($pobierz) or die (mysql_error());
  4. $row = mysql_fetch_array($result, MYSQL_ASSOC)
  5. echo $row['miasto'];
  6. ?>


Mozliwe jakies bledy bo pisane z palca.

Nie zapomnij obibliotece AdvancedAJAX.
Go to the top of the page
+Quote Post
darth_sidious
post
Post #15





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Dzieki... zaraz poprobuje...



Niestety nadal nic - okienko miasto puste, a najgorsze, ze nie wywala zadnych bledow... NIC.
Moze zaproponujecie jakies inne rozwiazanie?

Chcialem robic bez przeladowywania strony, ale bez tego chyba sie nie obejdzie. Probuje teraz z onChange=submit() w SELECT
Go to the top of the page
+Quote Post
Sabistik
post
Post #16


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


  1. <script type="text/javascript" src="advajax.js"></script>
  2. <script LANGUAGE="JavaScript">
  3. <!--
  4. function Pokaz_zmienna() {
  5. var v = document.formularz.firmy.selectedIndex;
  6. var x = document.formularz.firmy[v].value;
  7.  
  8. advAJAX.post({
  9. url: "pob.php",
  10. parameters : {
  11. "nazwa" : x
  12. },
  13. onSuccess : function(obj) { document.formularz.zmienna.value = obj.responseText; },
  14. onError : function(obj) { alert("Error: " + obj.status); },
  15. });
  16.  
  17.  
  18. }
  19. //-->
  20.  
  21.  
  22. <form action="wprowadz.php" method="post" name="formularz">
  23. <select name='firmy' onchange=Pokaz_zmienna()>
  24. <!-- tu sobie potem zamien na pob z db -->
  25. <option value="krk">krk</option>
  26. <option value="waw">waw</option>
  27. <option value="wroc">wroc</option>
  28. </select>
  29. <input type="text" id="zmienna" name="zmienna">
  30. </form>


pob.php jak przedtem

w takiej formie mi dziala - przetestowane.
Go to the top of the page
+Quote Post
darth_sidious
post
Post #17





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Dziala (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) zmienilem tylko kilka rzeczy w pliku pob.php
- dolozylem linie laczace z baza danych / byly w glownym pliku ale widocznie tu tez musza byc,
- zmienilem troche pobieranie nazwy miasta:

  1. <?php
  2. include 'polaczenie.inc';
  3. $pobierz_miasto = "select * from firmy where nazwa_dostawcy="$_POST[nazwa]"";
  4. $result = mysql_query($pobierz_miasto) or die (mysql_error());
  5. if (mysql_num_rows($result) > 0) {
  6. while($row = mysql_fetch_assoc($result)) {
  7. echo $row['miasto'];
  8. }
  9. }
  10. ?>


W jaki jednak sposob moge teraz za pomoca funkcji Pokaz_zmienna() odwoloywac sie do innych pol formularza (nip, ulica,...) Nie znam Ajaxa wiec nie wiem jak do tego sie zabrac (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ... i kolejne schody
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Na przykład tak:
Kod
<script LANGUAGE="JavaScript">
<!--
function Pokaz_zmienna(obiekt) {
var v = document.formularz.elements[obiekt].selectedIndex;
var x = document.formularz.elements[obiekt].value;

advAJAX.post({
    url: "pob.php",
    parameters : {
      "nazwa" : x
    },
    onSuccess : function(obj) { document.formularz.zmienna.value = obj.responseText; },
    onError : function(obj) { alert("Error: " + obj.status); },
});


}
//-->
</SCRIPT>
Go to the top of the page
+Quote Post
darth_sidious
post
Post #19





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 19.12.2005

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


Wybaczcie ale z Ajaxa jestem noga. Wrzucilem ten kod i jak sie domyslacie lipa.
Mam jednak kilka pytan:
1. Ten kod odpowadal za pobranie i przypisanie do zmiennej x wyniku SELECTA, a w tej chwili co robi:
  1. function Pokaz_zmienna(obiekt) {
  2. var v = document.formularz.elements[obiekt].selectedIndex;
  3. var x = document.formularz.elements[obiekt].value;


2. Co mam podstawic pod "obiekt"?
3. Czy moglbys rozpisac, jak by wygladalo pobranie wartosci dla dwoch elementow, dajmy na to nip i miasto?
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Możesz robić w całym formularzu:
Kod
<select name='firmy' onchange=Pokaz_zmienna('firmy')>


Ale teraz się przyjrzałem temu i można to zrealizować dużo prościej:
Kod
var v = document.formularz.elements[obiekt].selectedIndex;

To nie jest nigdzie używane :/

Kod
<script type="text/javascript">
<!--
function Pokaz_zmienna(obiekt) {
var x = obiekt.value;

advAJAX.post({
    url: "pob.php",
    parameters : {
      "nazwa" : x
    },
    onSuccess : function(obj) { document.formularz.zmienna.value = obj.responseText; },
    onError : function(obj) { alert("Error: " + obj.status); },
});


}
//-->
</script>

I jako zdarzenie onchange dla każdego sprawdzanego elementu input/select podpinasz funkcję Pokaz_zmienna(this).

Jeśli Ci się nie chce, to możesz przejść przez wszystkie elementy formularza pętlą i ustawić funkcję do zdarzenia.

Ten post edytował erix 13.10.2006, 21:00:09
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.05.2026 - 09:39