Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][MySQL][PHP]Podwójna lista rozwijana nie działa przy wyborze pierwszego
timeo
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Mam dwa pliki cennik5.php i getdata.php. Chcę mieć dwie listy rozwijane zależne od siebie pobierające dane z bazy sql. Pierwsza pięknie pobiera druga nie. Połączenie w configbase i jest połączenie. Podpowiedzcie co robię nie tak.
  1. <?php include('../configbase.php'); ?>
  2. <!Doctype html>
  3. <html>
  4. <head>
  5. <title></title>
  6. </head>
  7.  
  8. <body>
  9. <label>Marka</label>
  10. <select name="marka" onchange="getId(this.value);">
  11. <option value=""> Wybierz Markę</option>
  12. <?php
  13. $result = $db->prepare("SELECT * FROM Marki");
  14. $result ->execute();
  15. foreach($result as $marki){
  16. ?>
  17. <option value="<?php echo $marki["CID"]; ?>"><?php echo $marki["Marka"];
  18. print_r($marki); ?> </option>
  19. <?php
  20. }
  21.  
  22. ?>
  23.  
  24. </select>
  25.  
  26. <label>Model</label>
  27. <select name="model" id="listamodeli">
  28. <option value=""></option>
  29. </select>
  30. <scritp src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  31. <script>
  32. function getId(val){
  33.  
  34. $.ajax({
  35. type: "POST",
  36. url: "getdata.php",
  37. data: "CID="+val,
  38. success: function(data){
  39. $(#listamodeli).html(data);
  40. }
  41.  
  42. });
  43. }
  44. </script>
  45.  
  46. </body>
  47. </html>


getata.php
  1. <?php
  2. include ("../configbase.php");
  3.  
  4. if (!empty($_POST["CID"])){
  5.  
  6. //$cid = $_POST["CID"];
  7. $result = $db->prepare("SELECT * FROM cennikmobi10 WHERE CID = :cid");
  8. $result -> bindValue(':cid', $_POST["CID"], PDO::PARAM_INT);
  9. $result -> execute();
  10.  
  11. foreach ($result as $model)
  12. {
  13. ?>
  14. <option value="<?php echo $model["Model_ID"]; ?>"><?php echo $model["Model"]; ?></option>
  15. <?php
  16. }
  17. }
  18. ?>
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 57)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Metoda execute zwraca prawdę, albo fałsz, czyli w obydwu przypadkach nie pobierasz wyników.
W pierwszym przypadku prepare nie jest potrzebne, wystarczy query+fetch/fetchAll.
Go to the top of the page
+Quote Post
timeo
post
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Zmieniłem i nadal nic. Spójrzcie.
Wszystkie kolumny w db są. Rekordy w rozwijaku mi się pojawiają, bo zrobiłem print_r i jest to co mi potrzebne. Być może coś z AJAX jest nie tak. Nie wiem już gdzie szukać.
  1. <?php include('../configbase.php'); ?>
  2. <!Doctype html>
  3. <html>
  4. <head>
  5. <title></title>
  6. </head>
  7.  
  8. <body>
  9. <label>Marka</label>
  10. <select name="marka" onchange="getId(this.value);">
  11. <option value=""> Wybierz Markę</option>
  12. <?php
  13. $result = $db->query("SELECT * FROM Marki");
  14. // $result ->execute();
  15. //
  16.  
  17. //$marki = $result ->fetch(PDO::FETCH_ASSOC)
  18. foreach($result as $marki)
  19. {
  20. ?>
  21. <option value="<?php echo $marki["CID"]; ?>"><?php echo $marki["Marka"];
  22. print_r($marki); ?> </option>
  23. <?php
  24. }
  25.  
  26. ?>
  27.  
  28. </select>
  29.  
  30. <label>Model</label>
  31. <select name="model" id="listamodeli">
  32. <option value=""></option>
  33. </select>
  34. <scritp src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  35. <script>
  36. function getId(val){
  37.  
  38. $.ajax({
  39. type: "POST",
  40. url: "getdata.php",
  41. data: "CID="+val,
  42. success: function(data){
  43. $(#listamodeli).html(data);
  44. }
  45.  
  46. });
  47. }
  48. </script>
  49.  
  50. </body>
  51. </html>


  1. <?php
  2. include ("../configbase.php");
  3.  
  4. if (!empty($_POST["CID"])){
  5.  
  6. //$cid = $_POST["CID"];
  7. $result = $db->prepare("SELECT * FROM cennikmobi10 WHERE MODEL_ID = :cid");
  8. $result -> bindValue(':cid', $_POST["CID"], PDO::PARAM_INT);
  9. //$result -> execute();
  10.  
  11. foreach ($result as $model)
  12. {
  13. ?>
  14. <option value="<?php echo $model["Model_ID"]; ?>"><?php echo $model["Model"]; ?></option>
  15. <?php
  16. }
  17. }
  18. ?>
(IMG:http://nastrone.eu/meczyki/Przechwytywanie.PNG)

Ten post edytował timeo 10.10.2016, 05:41:29
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nadal nie pobierasz rekordów.
Jeśli masz coś w zmiennej $marki, to na pewno nie z powyższego kodu, bo w nim nigdzie nie ustalasz wartości tej zmiennej.
Go to the top of the page
+Quote Post
timeo
post
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Poniższy kod nic nie daje.
  1. $marki = $result ->fetch(PDO::FETCH_ASSOC)

Jest tylko jeden rekord i nie przekazuje dalej zmiennej.
Szukam dalej. Może jakaś podpowiedź z czym ten fetch zestawić?
TAK?
  1. while($result = $marki ->fetch()) // foreach($result as $marki)
  2. {
  3. ?>
  4. <option value="<?php echo $marki["Marka_ID"]; ?>"><?php echo $marki["Marka"];
  5. print_r($marki); ?> </option>
  6. <?php
  7. }
  8.  
  9. ?>


Ten post edytował timeo 10.10.2016, 07:52:12
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Możesz fetchAll, tak jak pisałem?
Go to the top of the page
+Quote Post
timeo
post
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Zrobiłem tak, ale efekt mizerny
  1. <?php
  2. $result = $db->query("SELECT * FROM Marki");
  3. // $result ->execute();
  4. //
  5. $marki = $result->fetchAll();
  6. {
  7. ?>
  8. <option value="<?php echo $marki["CID"]; ?>"><?php echo $marki["Marka"];
  9. //print_r($marki); ?> </option>
  10. <?php
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Może dlatego, że nie iterujesz po elementach tablicy? Czyli brak np. foreach.
Go to the top of the page
+Quote Post
timeo
post
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Dobrze zapytam.. No nadal nic
  1. $result = $db->query("SELECT * FROM Marki");
  2.  
  3. $key = $result->fetchAll();
  4. foreach ($key as $marki) {
  5.  
  6.  
  7. ?>
  8. <option value="<?php echo $marki["CID"]; ?>"><?php echo $marki["Marka"];
  9. ?> </option>
  10. <?php
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Pokaż co wyświetla wynik: var_dump($key); (po fetchAll).
Go to the top of the page
+Quote Post
timeo
post
Post #11





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Na stronie nic nie pokazuje, jest tylko lista z wszystkimi markami.
Mogę podać kod źródłowy strony, jeśli to coś pomoże.
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Wstaw pierwszy wiersz tablicy, żeby określić czy faktycznie są takie klucze jak piszesz.
Go to the top of the page
+Quote Post
timeo
post
Post #13





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Nie bardzo rozumiem. Z bazy danych mam wstawić wiersz?
Go to the top of the page
+Quote Post
viking
post
Post #14





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pierwszy element z tablicy var_dump($key); albo inaczej var_dump($key[0]);
Go to the top of the page
+Quote Post
timeo
post
Post #15





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Na stronie nic mi nie pokazuje. Są tylko dwie optionlist z czego jedna ma marki (czyli pokazuje mi wszystkie elementy z tablicy) a druga jest pusta. Wrzuciłem to
  1. <?php
  2. $result = $db->query("SELECT * FROM Marki");
  3. // $result ->execute();
  4. //
  5. $key = $result->fetchAll(PDO::FETCH_ASSOC);
  6. var_dump($key[0]);
  7. foreach ($key as $marki)
  8. {
  9. ?>
  10. <option value="<?php echo $marki["Marka_ID"]; ?>"><?php echo $marki["Marka"];?> </option>
  11. <?php
  12. }
  13. ?>
Go to the top of the page
+Quote Post
viking
post
Post #16





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Czyli wychodzi z tego że zapytanie nic nie zwraca.
Go to the top of the page
+Quote Post
timeo
post
Post #17





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Czy w związku z tym jakoś inaczej pytanie wprowadzić?
Jednak lista marek jest - pytanie dlaczego?
Mogę ewentualnie podać adres odnośnika, żeby pokazać Wam gdzie leży błąd. Nie wiem jak regulamin.

Ten post edytował timeo 10.10.2016, 11:27:54
Go to the top of the page
+Quote Post
viking
post
Post #18





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Wstaw bo tak można gdybać. I włącz raportowanie błędów.
Go to the top of the page
+Quote Post
timeo
post
Post #19





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Ups - a jak włączyć raportowanie błędów - podpowiedz.
  1. ini_set('display_errors',1);

Testy

Ten post edytował timeo 10.10.2016, 11:35:52
Go to the top of the page
+Quote Post
viking
post
Post #20





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Po stronie php masz <b>Notice</b>: Undefined offset: 0 in <b>/home/vol2_1/byethost15.com/b15_3428001/bdp.22web.org/htdocs/mobidoktor/cennik5.php</b> on line <b>24</b><br /> Co jest w tej linii?
Po stronie JS: SyntaxError: illegal character $(#listamodeli).html(data); powinno być $('#listamodeli')

Go to the top of the page
+Quote Post
timeo
post
Post #21





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Już poprawiam - usuwam:
  1. var_dump($marki[0]);

I JS też poprawiam

KOD wygląda tak
  1. <?php include('../configbase.php');
  2. ini_set('display_errors',1);
  3. ?>
  4. <!Doctype html>
  5. <html>
  6. <head>
  7. <title></title>
  8. </head>
  9.  
  10. <body>
  11. <label>Marka</label>
  12. <select name="marka" onchange="getId(this.value);">
  13. <option value=""> Wybierz Markę</option>
  14. <?php
  15. $result = $db->query('SELECT * FROM Marki');
  16. // $result ->execute();
  17. //
  18. $key = $result->fetchAll(PDO::FETCH_ASSOC);
  19. var_dump($key[0]);
  20. foreach ($key as $marki)
  21. {
  22. ?>
  23. <option value="<?php echo $marki["Marka_ID"]; ?>"><?php echo $marki["Marka"];?> </option>
  24. <?php
  25. }
  26. ?>
  27. </select>
  28.  
  29. <label>Model</label>
  30. <select name="model" id="listamodeli">
  31. <option value=""></option></select>
  32. <scritp src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  33. <script>
  34. function getId(val){
  35.  
  36. $.ajax({
  37. type: "POST",
  38. url: "getdata.php",
  39. data: "Marka_ID="+val,
  40. success: function(data){
  41. $('#listamodeli').html(data);
  42. }
  43.  
  44. });
  45. }
  46. </script>
  47.  
  48. </body>
  49. </html>


GETDATA PHP
  1. <?php
  2. include ("../configbase.php");
  3.  
  4. if (!empty($_POST["Marka_ID"])){
  5.  
  6. //$cid = $_POST["CID"];
  7. $result = $db->query("SELECT * FROM cennikmobi10 WHERE ID = :cid");
  8. $result -> bindValue(':cid', $_POST["Marka_ID"], PDO::PARAM_INT);
  9. //$result -> execute();
  10.  
  11. foreach ($result as $model)
  12. {
  13. ?>
  14. <option value="<?php echo $model["Marka_ID"]; ?>"><?php echo $model["Model"]; ?></option>
  15. <?php
  16. }
  17. }
  18. ?>


Ten post edytował timeo 10.10.2016, 11:45:23
Go to the top of the page
+Quote Post
viking
post
Post #22





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Masz jeszcze błędy w JS ReferenceError: $ is not defined, opakuj to w
Kod
$(function() {
});


Zresztą marki ci dzialają.

I script nie scritp.

Ten post edytował viking 10.10.2016, 12:00:40
Go to the top of the page
+Quote Post
timeo
post
Post #23





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Poprawiłem, ale nadal nie widzę poprawy. Niestety moja wiedz ogranicza się do prośby o Waszą pomoc.
Go to the top of the page
+Quote Post
viking
post
Post #24





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zerknij czasami w konsolę. Teraz masz ReferenceError: getId is not defined
Całe script wrzuć do head.
Go to the top of the page
+Quote Post
timeo
post
Post #25





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Przerzuciłem i pokazuje mi to samo. Nie wiem czy gdzieś w JS trzeba definiować ten parametr?
Go to the top of the page
+Quote Post
viking
post
Post #26





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zamiast inline przrzuć to do script
  1. $('select[name="marka"]').on('change', function(e) {
  2. getId(this.value);
  3. });
Go to the top of the page
+Quote Post
timeo
post
Post #27





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


W ten sposób?
  1. <script>
  2.  
  3. $(function() {
  4.  
  5. function getId(val){
  6. $.ajax({
  7. type: "POST",
  8. url: "getdata.php",
  9. data: "Marka_ID="+val,
  10. success: function(data){
  11. $('select[name="marka"]').on('change', function(e) {
  12. getId(this.value);
  13. });
  14. }
  15. });
  16. }
  17. });
  18. </script>
Go to the top of the page
+Quote Post
viking
post
Post #28





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


No nie. getId wywołujesz na zmianę selecta. Pomyśl chwilkę logicznie.
Pod tę funkcję.
Go to the top of the page
+Quote Post
timeo
post
Post #29





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Czyli, że tak?
  1. <label>Marka</label>
  2. <select name="marka" onchange="$('select[name="marka"]').on('change', function(e) {
  3. getId(this.value);
  4. });">
  5. <option value=""> Wybierz Markę</option>
  6.  


cennik5.php:28 Uncaught SyntaxError: Invalid or unexpected token

Ten post edytował timeo 10.10.2016, 14:14:05
Go to the top of the page
+Quote Post
viking
post
Post #30





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


No nie. Wywalasz to całe onchange z selecta i zapominasz o takim pisaniu JS. A kod który podałem wklejasz pod funkcję.
Go to the top of the page
+Quote Post
timeo
post
Post #31





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Już się boję pytać, ale spróbuję
Za GETID odpowiedzialna jest funkcja w JS, więc teraz myślę, że myślę dobrze.
  1. <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  2. <script>
  3.  
  4. $(function() {
  5.  
  6. function getId(val){
  7. $('select[name="marka"]').on('change', function(e) {
  8. getId(this.value);
  9. });
  10. $.ajax({
  11.  
  12. type: "POST",
  13. url: "getdata.php",
  14. data: "Marka_ID="+val,
  15. success: function(data){
  16. $('#listamodeli').html(data);
  17. }
  18. });
  19. }
  20. });
  21. </script>
Go to the top of the page
+Quote Post
viking
post
Post #32





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pfff. Tym sposobem byś nigdzie funkcji nie wywołał.
Cytat
function getId(val){...}

$('select[name="marka"]').on('change', function(e) {
getId(this.value);
});
Go to the top of the page
+Quote Post
timeo
post
Post #33





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Zmieniłem i konsola pokazuje mi:
(link jest cały czas aktywny jakby co (IMG:style_emoticons/default/smile.gif) )
  1. POST <a href="http://nastrone.eu/mobidoktor/getdata.php" target="_blank">http://nastrone.eu/mobidoktor/getdata.php</a> 500 (Internal Server Error)send @ jquery-1.12.0.min.js:4ajax @ jquery-1.12.0.min.js:4getId @ cennik5.php:10onchange @ cennik5.php:27ListPicker._handleMouseUp @ about:blank:686


Ten post edytował timeo 10.10.2016, 14:49:00
Go to the top of the page
+Quote Post
viking
post
Post #34





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Gdzieś w getdata masz problem. Zobacz logi serwera i włącz też wyświeltanie błędów.
Go to the top of the page
+Quote Post
timeo
post
Post #35





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Wrzuciłem do GETDATA i niestety nic nie pokazuje.
Żadnego błędu. Poszukam jak dojadę do domu.
Go to the top of the page
+Quote Post
viking
post
Post #36





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Ja tam widzę:
Cytat
<b>Fatal error</b>: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or
access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ':cid' at line 1'


A wynika to stąd, że query nie binduje parametrów tylko prepare.

Ten post edytował viking 10.10.2016, 15:11:17
Go to the top of the page
+Quote Post
trueblue
post
Post #37





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


I znów nie pobierasz wyników w getdata.php.
query w pierwszym przypadku, tak jak pisałem, bo nie bindujesz, więc nie trzeba. W drugim zgodnie ze wskazówką viking'a, prepare.
Go to the top of the page
+Quote Post
timeo
post
Post #38





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Panowie czapki z głów. Dziękuję - jesteście WIELCY. Od dzisiaj to forum jest moim forum.
Nie zrobiłbym niczego bez Waszej pomocy!!!
Każdemu piwq
A tutaj kod jaki działa.
  1. <?php include('../configbase.php');
  2. ini_set('display_errors',1);
  3. ?>
  4. <!Doctype html>
  5. <html>
  6. <head>
  7. <title></title>
  8. <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  9. <script>
  10. function getId(val){
  11.  
  12. $.ajax({
  13. type: "POST",
  14. url: "getdata.php",
  15. data: "Marka_ID="+val,
  16. success: function(data){
  17. $('#listamodeli').html(data);
  18. }
  19.  
  20. });
  21. }
  22. $('select[name="marka"]').on('change', function(e) {
  23. getId(this.value);
  24. });
  25. </script>
  26. </head>
  27. <body>
  28. <label>Marka</label>
  29. <select name="marka" onchange="getId(this.value)">
  30. <option value=""> Wybierz Markę</option>
  31. <?php
  32. $result = $db->query('SELECT * FROM Marki');
  33. // $result ->execute();
  34. //
  35. $key = $result->fetchAll(PDO::FETCH_ASSOC);
  36.  
  37. foreach ($key as $marki)
  38. {
  39. ?>
  40. <option value="<?php echo $marki["Marka_ID"]; ?>"><?php echo $marki["Marka"];?> </option>
  41. <?php
  42. }
  43. ?>
  44. </select>
  45.  
  46. <label>Model</label>
  47. <select name="model" id="listamodeli">
  48. <option value=""></option></select>
  49.  
  50.  
  51. </body>
  52. </html>


getdada
  1. <?php
  2. include ("../configbase.php");
  3. ini_set('display_errors',1);
  4.  
  5. if (!empty($_POST["Marka_ID"])){
  6.  
  7. //$cid = $_POST["CID"];
  8. $result = $db->prepare("SELECT * FROM cennikmobi10 WHERE ID = :cid");
  9. $result -> bindValue(':cid', $_POST["Marka_ID"], PDO::PARAM_INT);
  10. $result -> execute();
  11.  
  12. foreach ($result as $model)
  13. {
  14. ?>
  15. <option value="<?php echo $model["Marka_ID"]; ?>"><?php echo $model["Model"]; ?></option>
  16. <?php
  17. }
  18. }
  19. ?>



Ten post edytował timeo 10.10.2016, 18:31:26
Go to the top of the page
+Quote Post
viking
post
Post #39





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Miałeś się pozbyć onchange="getId(this.value)" z select.

To teraz jeszcze pomyśl co się stanie w przypadku błędu. Nie oprogramowałeś wyjątków PDO, nie robisz nic w przypadku błędu żądania ajaxowego - done/fail. I produkcyjnie informacje debugowe (error_reporting) mają być wyłączone. Brak ci odpowiednich nagłówków. Czemu takie stare jquery? Jest już v3.

Ten post edytował viking 10.10.2016, 18:57:37
Go to the top of the page
+Quote Post
timeo
post
Post #40





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Już poprawiam.
To będzie zahasłowane i zaszyfrowane logowaniem i nikt nie będzie miał dostępu. Będę to eweluuował, ale trochę później. Na szybko jest mi potrzebne. Nie znam zbytnio JS i Ajaxa muszę się nauczyć.
Teraz mam pytanie i prośbę. Działa, ale jest jeden mały problem - modeli jest kilka do jednej marki. Co zrobić żeby one się grupowały? Wystarczy Group By? - wystarczy
Wyrzuciłem onchange tak jak kazałeś, ale przestaje działać.

  1. <script src="//code.jquery.com/jquery-3.1.1.min.js"></script>

P.S.
Dopiero do tego usiadłem i już zmieniam.

Plik configbase
  1. try {
  2. $db = new PDO('mysql:host=localhost;dbname=artykuly', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  3. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4. } catch (PDOException $e) {
  5. die( "Połączenie nie mogło zostać utworzone: {$e->getMessage()}");
  6. }
  7.  


A teraz dziwne pytanie jakbym chciał zrobić jeszcze 3 listę zależną od drugiej? Da się jakoś z tego co mam?

Ten post edytował timeo 10.10.2016, 19:38:37
Go to the top of the page
+Quote Post
viking
post
Post #41





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Dokładnie tak samo jak drugą. A co nie działało konkretnie z zapisem moim? Jakieś błędy w konsoli?
Go to the top of the page
+Quote Post
timeo
post
Post #42





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


To miałem wyrzucić select
  1. onchange="getId(this.value)"
a coś tam trzeba wstawić za to?
Czyli kolejny plik GETDATA, żeby pobierał i tam całe zapytanie?
Go to the top of the page
+Quote Post
viking
post
Post #43





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Kod który ci podałem
Cytat
$('select[name="marka"]').on('change', function(e) {
getId(this.value);
});


Jest dokładnie odpowiednikiem tego onchange liniowego. Możesz nowy plik albo dodatkową wartość.
Cytat
data: {"Marka_ID": val, costam2: y}

i w getdata sprawdzac czy występuje $_POST['costam2']
Go to the top of the page
+Quote Post
timeo
post
Post #44





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Ale on jest w script w head a nie w select. Select - jak to usunąłem to nie działał
Cytat
Cytat
$('select[name="marka"]').on('change', function(e) {
getId(this.value);
});
Go to the top of the page
+Quote Post
viking
post
Post #45





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Niesamowite, czary jakieś
https://jsfiddle.net/vgmnv7ez/
Go to the top of the page
+Quote Post
timeo
post
Post #46





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Cytat(viking @ 11.10.2016, 12:53:35 ) *
Niesamowite, czary jakieś
https://jsfiddle.net/vgmnv7ez/


Fakt tutaj tak, a u mnie nie. (IMG:style_emoticons/default/smile.gif)
Mozesz sam zobaczyć.
Klik
Go to the top of the page
+Quote Post
nospor
post
Post #47





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak z czystej ciekawosci: kiedy ty w koncu zaczniesz zagladac w konsole bledow js? Juz nie raz w tym temacie cie o to upominano a ty dalej swoje.... toz masz bledy tam.
Go to the top of the page
+Quote Post
timeo
post
Post #48





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Cytat(nospor @ 11.10.2016, 13:46:18 ) *
Tak z czystej ciekawosci: kiedy ty w koncu zaczniesz zagladac w konsole bledow js? Juz nie raz w tym temacie cie o to upominano a ty dalej swoje.... toz masz bledy tam.

Jak skończę wszystko co jest potrzebne mi a potem zabiorę się za błędy. Szybko potrzebuję strony, a potem kosmetyka.... i... nauka...
Go to the top of the page
+Quote Post
kapslokk
post
Post #49





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Czyli po prostu wolisz truć dupę na forum bo "nie działa" niż spojrzeć w konsole błedów, która mówi dlaczego nie działa, tak ? :/

Ten post edytował kapslokk 11.10.2016, 14:56:04
Go to the top of the page
+Quote Post
timeo
post
Post #50





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Myślę, że ta dyskusja nie ma dalej sensu. Napiszę jak poprawię błędy i podeślę. Obiecuję, że to zrobię... (IMG:style_emoticons/default/smile.gif)

OK, pokazuje, że brakuje linii pomocnej, już szukam w googlu i poprawiam
  1. Uncaught SyntaxError: Unexpected token <


Podpowiedzcie, czy ten kod jest poprawny
  1. <script>
  2. $.ajax({
  3. type: "POST",
  4. url: "getdata.php",
  5. data: "Marka_ID="+val,
  6. success: function(data){
  7. $('select[name="marka"]').on('change', function(e) {
  8. getId(this.value);
  9. });
  10. }
  11. });
  12. </script>


Ten post edytował timeo 12.10.2016, 10:52:28
Go to the top of the page
+Quote Post
nospor
post
Post #51





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ReferenceError: val is not defined


data: "Marka_ID="+val,
Naprawde my to mamy sprawdzac za ciebie poraz kolejny? NIe, ten kod nie jest poprawny. Mowi ci o tym wyraznie komunikat bledu
Go to the top of the page
+Quote Post
timeo
post
Post #52





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Ok. Zrobiłem tak jak mówiliście i niestety nie pojawiają się marki. W konsoli nie widzę żadnych błędów chyba że jest inna konsola niż ta wyświetlana F12.
(Pewnie macie mnie dość (IMG:style_emoticons/default/facepalmxd.gif) )
  1. <?php include('../configbase.php');
  2. ini_set('display_errors',1);
  3. ?>
  4. <!Doctype html>
  5. <html>
  6. <head>
  7. <title></title>
  8. <script src="//code.jquery.com/jquery-3.1.1.min.js"></script>
  9. <script>
  10. function getId(val){
  11.  
  12. $.ajax({
  13. type: "POST",
  14. url: "getdata.php",
  15. data: "Marka_ID=",
  16. success: function(data){
  17. $('#listamodeli').html(data);
  18. }
  19.  
  20. });
  21. }
  22. $('select[name="marka"]').on('change', function(e) {
  23. getId(this.value);
  24. });
  25.  
  26. </script>
  27. </head>
  28. <body>
  29. <label>Marka</label>
  30. <select name="marka">
  31. <option value=""> Wybierz Markę</option>
  32. <?php
  33. $result = $db->query('SELECT * FROM Marki');
  34. // $result ->execute();
  35. //
  36. $key = $result->fetchAll(PDO::FETCH_ASSOC);
  37.  
  38. foreach ($key as $marki)
  39. {
  40. ?>
  41. <option value="<?php echo $marki["Marka_ID"]; ?>"><?php echo $marki["Marka"];?> </option>
  42. <?php
  43. }
  44. ?>
  45. </select>
  46.  
  47. <label>Model</label>
  48. <select name="model" id="listamodeli">
  49. <option value=""></option></select>
  50.  
  51.  
  52. </body>
  53. </html>


Ten post edytował timeo 12.10.2016, 12:02:19
Go to the top of the page
+Quote Post
kapslokk
post
Post #53





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


1.
[JAVASCRIPT] pobierz, plaintext
  1. $('select[name="marka"]').on('change', function(e) {
  2. getId(this.value);
  3. });
[JAVASCRIPT] pobierz, plaintext

Wsadz w $(function(){});
Czyli

[JAVASCRIPT] pobierz, plaintext
  1. $(function(){
  2. $('select[name="marka"]').on('change', function(e) {
  3. getId(this.value);
  4. });
  5. });
[JAVASCRIPT] pobierz, plaintext


Bo przy załadowaniu strony jeszcze nie masz selecta, a juz probujesz do niego przypisac event.


2.
[JAVASCRIPT] pobierz, plaintext
  1. data: "Marka_ID=",
[JAVASCRIPT] pobierz, plaintext


Chyba by wypadalo tutaj wstawic id, prawda?
Go to the top of the page
+Quote Post
viking
post
Post #54





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Miałeś już poprawnie ale strasznie chcesz nas chyba zirytować. Cofnij się do http://forum.php.pl/index.php?s=&showt...t&p=1201912 i zastosuj. DOM nie jest gotowy przed operacją na nim.

Ten post edytował viking 12.10.2016, 12:19:02
Go to the top of the page
+Quote Post
timeo
post
Post #55





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


Poprawiłem. Działa.
Teraz zabieram się za resztę poprawek.
Panowie - przepraszam, uczę się jeszcze a nie zawsze wszystko można umieć jak się w tym zaczyna.

  1. <script src="//code.jquery.com/jquery-3.1.1.min.js"></script>
  2. <script>
  3. function getId(val){
  4.  
  5. $.ajax({
  6. type: "POST",
  7. url: "getdata.php",
  8. data: "Marka_ID="+val,
  9. success: function(data){
  10. $('#listamodeli').html(data);
  11. }
  12.  
  13. });
  14. }
  15. $(function(){
  16. $('select[name="marka"]').on('change', function(e) {
  17. getId(this.value);
  18. });
  19. });
  20. </script>
Go to the top of the page
+Quote Post
nospor
post
Post #56





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
a nie zawsze wszystko można umieć jak się w tym zaczyna.
Nikt do ciebie nie ma pretensji ze czegos nie umiesz.
To co nas drazni to fakt, ze nie czytac co sie do ciebie pisze i nie sprawdzasz konsoli bledow.
Go to the top of the page
+Quote Post
timeo
post
Post #57





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 28.06.2011

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


A wiecie co oznacza? Pokazywało mi to wcześniej. Czego szukać w JS czy w kodzie PHP?
  1. Uncaught SyntaxError: Unexpected token <


Panowie to Wy mi pokazaliście konsolę błędów i obiecuję, że będę z niej korzystał.
Dziękuję za pomoc.

Ten post edytował timeo 12.10.2016, 12:41:36
Go to the top of the page
+Quote Post
viking
post
Post #58





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Konsola pokaże ci błędy JS. Jeśli jakieś są (bo np. włączyłeś wyświetlanie błędów jak w tym wyjątku PDO) widzoczne będą w odpowiedzi. Tu ci zresztą brakuje obsługi błędów, jest success tylko.

Uprzedzając pytanie: https://api.jquery.com/deferred.fail/

Ten post edytował viking 12.10.2016, 12:55:07
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 23.08.2025 - 03:53