Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][PHP]Problem z dynamicznym generowaniem formularza
sebap123
post
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Witam
Od niedawna tworzę coś w JavaScript i dlatego postanowiłem umieścić ten problem tutaj, ale nie wiem czy należy on do błędów podstawowych. Ale do rzeczy.
Znalazłem w necie dosyć prostą instrukcję, a raczej gotowy skrypt, który przy zmianie wybranej opcji pola typu select pobiera z bazy danych dane na ten temat i wyświetla bez przeładowania na stronie.
Mi jest potrzebny podobny skrypt, jednak ten ma pod wpływem wyboru w jednym polu select pobrać dane z tablicy i umieścić je jako opcje w drugim polu select. Trochę już nad tym siedzę, dlatego postanowiłem tutaj spytać się co może robię źle.
Oto całość:
index.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. <script type="text/javascript">
  5. function showColor(nr)
  6. {
  7. if(window.XMLHttpRequest){
  8. xmlhttp = new XMLHttpRequest();
  9. }
  10. else{
  11. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  12. }
  13. xmlhttp = new onreadystatechange = function()
  14. {
  15. if(xmlhttp.readyState==4 && xmlhttp.status==200){
  16. document.getElementById("selector_c").innerHTML=xmlhttp.responseText;
  17. }
  18. }
  19. xmlhttp.open("GET","getproduct.php?pr="+nr,true);
  20. xmlhttp.send();
  21. }
  22. <title>Untitled Document</title>
  23. </head>
  24.  
  25. <div class="selector2">
  26. <label for="rozmiar">rozmiar:</label>
  27. <select name="rozmiar" id="selector_r" onchange="showColor(this.value)">
  28. <option value="0"></option>
  29. <option value="1">czarny</option>
  30. <option value="2">marka1</option>
  31. </select>
  32. </div>
  33.  
  34. <div class="selector2">
  35. <label for="kolor">kolor:</label>
  36. <select name="color" id="selector_c">
  37. <option value=""></option>
  38. </select>
  39. </div>
  40. </body>
  41. </html>

getproduct.php
  1. <?
  2. include('engine/config.php');
  3. $p=$_GET['pr'];
  4. echo'<option value="1">nowy</option>';
  5. $sql=mysql_query("SELECT FROM colors WHERE id='".$p."'");
  6. if(mysql_fetch_array($sql)==1){
  7. $size=mysql_fetch_array($sql);
  8. {
  9. echo'<option value="'.$size['s_id'].'">'.$size['size'].'</option>';
  10. }
  11. else{
  12. <option value=""></option>
  13. <option value="1">r</option>
  14. <option value="2">rodzaj1</option>';
  15. }
  16. ?>

Oba pliki są na tym samym poziomie.
Możliwe, że jest to jakiś głupi błąd, ale ja jakoś patrzę i nic nie widzę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. if(mysql_fetch_array($sql)==1){
  2. $size=mysql_fetch_array($sql);
  3. {

zamień na
  1. if(mysql_fetch_array($sql)==1){
  2. {
  3. $size=mysql_fetch_array($sql);
Go to the top of the page
+Quote Post
sebap123
post
Post #3





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Zamieniłem tak jak mówiłeś i nadal nic. Prawdę powiedziawszy, to nie wiem za bardzo co dała twoja zmiana. Jedyne co zauważyłem, to to, że mam dwa nawiasy klamrowe po if, a tylko jeden jest mi potrzebny dlatego drugiego wywaliłem. Aktualnie kod getproduct.php wygląda tak:
  1. <?
  2. include('engine/config.php');
  3. $p=$_GET['pr'];
  4. echo'<option value="1">nowy</option>';
  5. $sql=mysql_query("SELECT FROM colors WHERE id='".$p."'");
  6. if(mysql_fetch_array($sql)==1)
  7. {
  8. $size=mysql_fetch_array($sql);
  9. echo'<option value="'.$size['s_id'].'">'.$size['size'].'</option>';
  10. }
  11. else{
  12. <option value=""></option>
  13. <option value="1">r</option>
  14. <option value="2">rodzaj1</option>';
  15. }
  16. ?>


I co najgorsza, cały czas nie chce się ruszyć nic.
Go to the top of the page
+Quote Post
lord2105
post
Post #4





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


Dlaczego tak:
  1. if(mysql_fetch_array($sql)==1)
  2. {

a nie tak:
  1. if(mysql_num_rows($sql)==1)
  2. {


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
sebap123
post
Post #5





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Prawdę powiedziawszy to nie do końca wiem czemu akurat tak, ale nawet po zmianie nie chce się ruszyć, tak więc to nie to.
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Przetestowałeś poprawność działania AJAX?
Na początek sprawdzić czy jest ok dając jakieś echo.

Jeśli się wyświetla idziesz krok dalej, pobranie zmiennej - czy działa.

Jeśli tak to coś z zapytaniem.

Kod
mysql_query("SELECT FROM colors WHERE id='".$p."'");


Nie wystarczy:
Kod
mysql_query("SELECT FROM colors WHERE `id` = $p ");

? Oczywiście jeśli id jest numeryczne.

Potem jeśli jest wszystko ok to pętla i warunek.
Tu już bym ponowił zalecenia Lord'a.


--------------------
Go to the top of the page
+Quote Post
lord2105
post
Post #7





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


dziwisz się ze nie działa skoro tego nie chcesz, karzesz wyciągać z bazy ale co?

  1. $sql=mysql_query("SELECT FROM colors WHERE id='".$p."'");


a może:

  1. $sql=mysql_query("SELECT s_id,size FROM colors WHERE id='".$p."'");


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
sebap123
post
Post #8





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Dobra, ten pomysł się sprawdził, w pewnym sensie. Sprawdziłem, czy zwykła komenda ruszy.
Wszystko oprócz getproduct.php zostało takie samo.
Teraz skrypt ma pobierać wartość wybranej opcji, a następnie umieszczać ją w kolejnym selekcie.

Taki jest kod gedproduct.php:
  1. $p=$_GET['pr'];
  2. echo'<option value="1">&nbsp;-&nbsp;'.$p.'</option>';


No i teraz też milczy. Czyli mam podejrzewać, że AJAX nie działa?
Go to the top of the page
+Quote Post
markonix
post
Post #9





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Heh, nie zauważyłem tego byka, a nawet go zacytowałem wacko.gif

Edit: ogólnie to bym polecił AJAXem bawić się za pomocą jakiejś biblioteki np. jQuery.

Ten post edytował markonix 12.12.2010, 17:11:25


--------------------
Go to the top of the page
+Quote Post
sebap123
post
Post #10





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


No wiem, że można bawić się bibliotekami, ale jakoś nigdy nie miałem ochoty żadnej się nauczyć. A ten cały skrypt to jest moja modyfikacja skryptu wziętego z wydaje mi się bardzo dobrej strony ->http://www.w3schools.com/PHP/php_ajax_database.asp
No i albo ja coś zupełnie poplątałem, albo tego nie da się przerobić (tutaj już wątpię, żeby się nie dało).
Go to the top of the page
+Quote Post
CuteOne
post
Post #11





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Może najpierw odpal plik PHP bez AJAXA i sprawdź czy nie wywali błędów
Go to the top of the page
+Quote Post
sebap123
post
Post #12





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Tak jak poleciłeś, sprawdziłem plik PHP bez AJAXA.No wszytko działa. Dodam tylko, że nieco pozmieniałem kod, żeby był w miarę prosty, żeby móc stwierdzić, gdzie leży błąd.
Teraz kod wygląda tak:
getproduct.php
  1. <?
  2. if($_GET['pr']==1){
  3. $p=$_GET['pr'];
  4. echo'Zmienna wynosi '.$p.'';}
  5. else{
  6. echo'brak zmiennej';
  7. }
  8. ?>


plik w którym jest AJAX (nazwałem go testowa.html (a tak na marginesie, czy mogę też uruchomić AJAXA w plikach z rozszerzeniem php?):
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. <script type="text/javascript">
  5. function showColor(nr)
  6. {
  7. if(window.XMLHttpRequest){
  8. xmlhttp = new XMLHttpRequest();
  9. }
  10. else{
  11. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  12. }
  13. xmlhttp = new onreadystatechange = function()
  14. {
  15. if(xmlhttp.readyState==4 && xmlhttp.status==200){
  16. document.getElementById("selector2").innerHTML=xmlhttp.responseText;
  17. }
  18. }
  19. xmlhttp.open("GET","getproduct.php?pr="+nr,true);
  20. xmlhttp.send();
  21. }
  22. <title>Untitled Document</title>
  23. </head>
  24.  
  25. <div class="selector2">
  26. <label for="rozmiar">rozmiar:</label>
  27. <select name="rozmiar" id="selector_r" onchange="showColor(this.value)">
  28. <option value="0"></option>
  29. <option value="1">czarny</option>
  30. <option value="2">marka1</option>
  31. </select>
  32. </div>
  33.  
  34. <div id="selector2">
  35. <b>tekścik</b>
  36. </div>
  37. </body>
  38. </html>


Może, teraz ktoś mi coś pomoże, bo ja jeszcze nie umiem na tyle dobrze JavaScript, żeby móc coś samemu orzec.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #13





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Zamień:

xmlhttp = new onreadystatechange

Na:

xmlhttp.onreadystatechange


Polecam Ci zaglądać w konsolę błędów w przeglądarce oraz zainstalować sobie firebuga
Go to the top of the page
+Quote Post
sebap123
post
Post #14





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Dzięki wielkie. Teraz już działa. A teraz powiedz mi jeszcze jedno, czy jak chcę mieć jakiś efekt (np. rozsuwanie się tekstu czy jakiś błysk, no cokolwiek) to wtedy muszę użyć jQuery, czy sam też mogę coś takiego napisać?
Dobra może średnio dobrze zadane pytanie. Chodzi mi o to, czy napisanie własnych takich efektów jest rzeczą trudną, czy bardzo trudną (może lepiej będzie użyć słowa - pracochłonną.)
Po drugie, czy jest jakaś różnica, jeśli ten skrypt umieszczę nie bezpośrednio w kodzie, tylko przez dopisanie

<script type="text/javascript" src="ścieżka_do_skryptu"></script>

No i jeśli jeszcze mogę się spytać o coś, to powiedz mi czy mogę podobny kod umieścić w pliku o rozszerzeniu php a nie html jak teraz zrobiłem?

A co do konsoli błędów i firebuga, to muszę powiedzieć, że słyszałem już takie rady, ale ja używam Chrome i średnio nawet wiem, czy coś takiego już jest dla Chrome. Tak więc jakby ktoś miał jakieś info co do tego to będę wdzięczny.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #15





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Co do efektów to można znaleźć w sieci gotowe funkcje (niekoniecznie wielkie frameworki typu jQuery). Napisanie samemu takowych nie jest zbyt skomplikowane ale wymaga dobrej znajomości css i js.
Co do <script type="text/javascript" src="ścieżka_do_skryptu"></script> to nie ma różnicy (zakładając że wszystko jest poprawnie).
Rozszerzenie pliku pobieranego przez ajax nie ma znaczenia.
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 Aktualny czas: 21.08.2025 - 06:36