Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][AJAX] zapisanie edytowaniego formularza bez przeładowania
Forum PHP.pl > Forum > Przedszkole
gagatek
mam taki problem i nie mogę się z nim uporać.
mam taki skrypcik do edycji filmów w bazie, wybiera się tytuł filmu i następnie zostają pobierane dane do formularza za pomocą ajaxa. Tyle że mam problem z przesłaniem ich po edycji. Ogólnie jak edytuje pola i kliknę zapisz, to w bazie dane się zmieniają. Ale w każdym polu pojawiają mi się <br /><b>Notice</b>: Undefined variable: ID in..
domyślam się że wynika to z tego fragmentu
  1. <form method="post" action="getuser.php?">
, bo przy zapisywaniu do bazy strona zostaje przeładowana i nie do końca wiem co mam z tym zrobić... tu jest mój kod, proszę o pomoc..

tutaj index.php:
  1. <?php
  2. include('function.php');
  3. include('config.php');
  4.  
  5. $q=$_GET["q"];
  6.  
  7. $con = mysql_connect('localhost', 'root', 'kamil22');
  8. if (!$con)
  9. {
  10. die('Could not connect: ' . mysql_error());
  11. }
  12.  
  13. mysql_select_db("wypozyczalnia", $con);
  14.  
  15. $sql="SELECT * FROM filmy f, film_gatunek fg, gatunek g WHERE f.ID=fg.ID_FILM AND fg.ID_GATUNEK=g.ID AND f.ID = '".$q."'";
  16.  
  17. $result = mysql_query($sql);
  18. while($row = mysql_fetch_array($result))
  19. {
  20.  
  21.  
  22. $ID = $row['id'];
  23. $TYTUL_POLSKI=$row['TYTUL_POLSKI'];
  24. $TYTUL_ORYGINALNY=$row['TYTUL_ORYGINALNY'];
  25. $REZYSER=$row['REZYSER'];
  26. $SCENARIUSZ=$row['SCENARIUSZ'];
  27. $ROK_PRODUKCJI=$row['ROK_PRODUKCJI'];
  28. $CZAS_TRWANIA=$row['CZAS_TRWANIA'];
  29. $CENA=$row['CENA'];
  30. $OPIS=$row['OPIS'];
  31. $GATUNEK=$row['GATUNEK'];
  32.  
  33.  
  34. }
  35. ?>
  36.  
  37. <div id="formularz">
  38. <form method="post" action="getuser.php?">
  39. <table>
  40. <tr class="tlo-b"><td>ID filmu:</td>
  41. <td> <input type="text" name="ID" readonly="readonly" value="<? echo $ID; ?>"></td></tr>
  42. <tr class="tlo-b"><td>Tytul oryginalny:</td>
  43. <td><input type="text" name="ud_TYTUL_ORYGINALNY" value="<? echo $TYTUL_ORYGINALNY; ?>"/></td></tr>
  44. <tr class="tlek"><td>Tytul polski:</td>
  45. <td><input type="text" name="ud_TYTUL_POLSKI" value="<? echo $TYTUL_POLSKI; ?>"/></td></tr>
  46. <tr class="tlo-b"><td>Reżyser:</td>
  47. <td><input type="text" name="ud_REZYSER" value="<? echo $REZYSER; ?>" /></td></tr>
  48. <tr class="tlo-b"><td>Wytwórnia:</td>
  49. <td><input type="text" name="ud_SCENARIUSZ" value="<? echo $SCENARIUSZ; ?>" /></td></tr>
  50. <tr class="tlek"><td>Rok produkcji:</td>
  51. <td><input type="text" name="ud_ROK_PRODUKCJI" value="<? echo $ROK_PRODUKCJI; ?>"/></span></td></tr>
  52. <tr class="tlo-b"><td>Czas trwania:</td>
  53. <td><input type="text" name="ud_CZAS_TRWANIA" value="<? echo $CZAS_TRWANIA; ?>"/></td></tr>
  54. <tr class="tlo-b"><td>Ilość sztuk:</td>
  55. <td><input type="text" name="ud_CENA" value="<? echo $CENA; ?>"/></td></tr>
  56. <tr class="tlo-b"><td>Opis:</td>
  57. <td><textarea cols="35" rows="10" name="ud_opis"><? echo $OPIS; ?></textarea> </td></tr>
  58. <tr class="tlo-b"><td>Gatunek:</td>
  59. <td><form name="gatunek">
  60. <?
  61. $p = mysql_query("SELECT * FROM `film_gatunek` WHERE ID_FILM = '".$q."'");
  62. $idki_gatunkow = array();
  63. while($r = mysql_fetch_array($p,MYSQL_ASSOC)) $idki_gatunkow[$r['ID_GATUNEK']] = 1;
  64. pobierzGa($idki_gatunkow);
  65. mysql_query("DELETE FROM `film_gatunek` WHERE ID_FILM = '".$q."'");
  66. ?>
  67.  
  68. </div>
  69. <tr><td colspan="2" align="center"><input type="submit" value="Zmień" /></td></tr>
  70. </table></form>
  71. </div>
  72. <?php
  73.  
  74. $ID =$_POST['ID'];
  75. $ud_TYTUL_POLSKI=$_POST['ud_TYTUL_POLSKI'];
  76. $ud_TYTUL_ORYGINALNY=$_POST['ud_TYTUL_ORYGINALNY'];
  77. $ud_REZYSER=$_POST['ud_REZYSER'];
  78. $ud_SCENARIUSZ=$_POST['ud_SCENARIUSZ'];
  79. $ud_ROK_PRODUKCJI=$_POST['ud_ROK_PRODUKCJI'];
  80. $ud_CZAS_TRWANIA=$_POST['ud_CZAS_TRWANIA'];
  81. $ud_CENA=$_POST['ud_CENA'];
  82. $gatunek = $_POST['gatunek'];
  83.  
  84. $query="UPDATE filmy SET TYTUL_POLSKI='$ud_TYTUL_POLSKI', TYTUL_ORYGINALNY='$ud_TYTUL_ORYGINALNY', REZYSER='$ud_REZYSER', SCENARIUSZ='$ud_SCENARIUSZ', ROK_PRODUKCJI='$ud_ROK_PRODUKCJI', CZAS_TRWANIA='$ud_CZAS_TRWANIA', CENA='$ud_CENA' WHERE ID = '$ID'";
  85. foreach($gatunek AS $g) mysql_query("INSERT INTO `film_gatunek` (ID_FILM, ID_GATUNEK) VALUES ('$ID', '$g')") or die("Błąd");
  86.  
  87.  
  88. mysql_query($query);
  89. var_dump($query);
  90. ?>




tutaj ajax i formularz wyboru tytułów:
  1. <?php
  2. include('function.php');
  3. include('config.php');
  4.  
  5. ?>
  6. <head>
  7. <script type="text/javascript">
  8. function showUser(str)
  9. {
  10. if (str=="")
  11. {
  12. document.getElementById("txtHint").innerHTML="";
  13. return;
  14. }
  15. if (window.XMLHttpRequest)
  16. {// code for IE7+, Firefox, Chrome, Opera, Safari
  17. xmlhttp=new XMLHttpRequest();
  18. }
  19. else
  20. {// code for IE6, IE5
  21. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  22. }
  23. xmlhttp.onreadystatechange=function()
  24. {
  25. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  26. {
  27. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  28. }
  29. }
  30. xmlhttp.open("GET","getuser.php?q="+str,true);
  31. xmlhttp.send();
  32. }
  33. </script>
  34. </head>
  35. <body>
  36.  
  37. <form>
  38. <select name="users" onChange="showUser(this.value)">
  39. <?php pobierzNazwy(); ?>
  40. </select>
  41. </form>
  42. <br />
  43. <div id="txtHint"><b>Person info will be listed here.</b></div>
  44.  
  45. </body>
  46.  
  47.  
  48.  
  49.  
  50.  
Magic WWW
Lpszym rozwiązaniem będzie tutaj użycie jQuery. Tam komunikacja AJAX jest bardzo fajnie i przejrzyście zrobiona smile.gif Pamiętaj, że jeśli obsługujesz przesyłanie formularza, to po wysłaniu danych przez AJAX musisz dać na końcu return false; spowoduje to zatrzymanie odświeżenia stron smile.gif


Kod
<form method="post" action="get.php" id="check">

</form>


W jQuery:
Kod
$("#check").submit(function()
{
$.ajax({
   url: $(this).attr('action'),
   type: $(this).attr('method'),
   data: {atrybut: wartosc},
   dataType: "html"
});
return false;
});


Podkreślam, że to tylko przykład, który można ulepszać na tysiące sposobów smile.gif

Wesołych świąt smile.gif
gagatek
Cytat(Magic WWW @ 24.12.2011, 10:50:40 ) *
Lpszym rozwiązaniem będzie tutaj użycie jQuery. Tam komunikacja AJAX jest bardzo fajnie i przejrzyście zrobiona smile.gif Pamiętaj, że jeśli obsługujesz przesyłanie formularza, to po wysłaniu danych przez AJAX musisz dać na końcu return false; spowoduje to zatrzymanie odświeżenia stron smile.gif


Kod
<form method="post" action="get.php" id="check">

</form>


W jQuery:
Kod
$("#check").submit(function()
{
$.ajax({
   url: $(this).attr('action'),
   type: $(this).attr('method'),
   data: {atrybut: wartosc},
   dataType: "html"
});
return false;
});


Podkreślam, że to tylko przykład, który można ulepszać na tysiące sposobów smile.gif

Wesołych świąt smile.gif



takie pytanie, to co podałeś wyżej to przesyłanie formularza za pomocą jQuery? Bo nie znam kompletie tego..
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.