Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP] Formularz edycji rekordow w bazie danych
Forum PHP.pl > Forum > Przedszkole
student87
Witam,
pisze strone w PHP/MySQL, cos a'la domowa biblioteka ebookow. Jest to moja pierwsza strona w tej technologii. Mam dwa problemy, zktorymi nie moge sobie poradzic.

1. Mam formularz edycji dla ksiazki, mam w nim pole "wydawnictwo" oraz "jezyk", sa to klucze obce tych tabel przechowujace odpowiednio nazwe wydawnictwa oraz nazwe jezyka. W skrypcie wczytuje do "selectow" (wydawnictwo i jezyk) rekordy z tabel i ustawiam je tak, aby pokazywaly ten rekord, ktory jest zapisany w tabeli.
Dla wydawnictwa wszystko jest ok, rekody wczytuja sie do selecta i wyswietlany jest rekord jaki zapisany jest w bazie danych dla danej ksiazki, natomiast dla jezyka pobierane sa rekordy z bazy, ale nie jest wyswietlany ten jezyk jaki zostal przypisany do danej ksiazki.

Systuacja podana na obrazku
Link do obrazka

Sprobowalem usunac fragment kodu, gdzie pobierane sa z bazy i wyswietlane w "select" wydawnictwa (linie 83-103) i wowczas jezyk wyswietli mi sie poprawnie.

Tutaj skrypt php:
  1. <?php
  2. require_once('conn.php');
  3.  
  4. //pobranie wydawnictw z tabeli wydawnictwo
  5. $wydawnictwa = "SELECT * FROM wydawnictwo";
  6. $resultW = mysql_query($wydawnictwa) or die(mysql_error());
  7.  
  8. while($rowWydawnictwo = mysql_fetch_array($resultW))
  9. {
  10. //pobranie dla kazdego id wydawnictwa jego nazwy
  11. $wydawnictwo[$rowWydawnictwo['wydawnictwoId']] = $rowWydawnictwo['nazwa'];
  12. }
  13.  
  14. //pobranie jezykow z tabeli jezyk
  15. $jezyki = "SELECT * FROM jezyk";
  16. $resultJ = mysql_query($jezyki) or die(mysql_error());
  17.  
  18. while($rowJezyk = mysql_fetch_array($resultJ))
  19. {
  20. //pobranie dla kazdego id jezyka jego nazwy
  21. $jezyk[$rowJezyk['jezykId']] = $rowJezyk['nazwa'];
  22. }
  23.  
  24. if($_GET['action'] == "edytuj")
  25. {
  26. $ksiazka = "SELECT * FROM ksiazka WHERE ksiazkaId = '".$_GET['id']."'";
  27. $result = mysql_query($ksiazka) or die(mysql_error());
  28.  
  29. $row = mysql_fetch_array($result);
  30. ?>
  31.  
  32. <!-- ---------------------------------- wyswietlenie formularza edycji --------------------------------->
  33. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  34. <html>
  35. <head>
  36. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  37. <meta http-equiv="Creation-date" content="2009-09-14T13:00:53Z">
  38. <meta http-equiv="Content-Language" content="pl">
  39. <meta name="Author" content="Kedzior">
  40. <link href="css/css.css" rel="stylesheet" type="text/css" />
  41. <title>Spis języków</title>
  42. </head>
  43. <body>
  44. <form action="php/commit.php?action=<?php echo $_GET['action'];?>&type=ksiazka&id=<?php echo $_GET['id']?>" method="post">
  45. <!-- To jest miejsce na treść dokumentu -->
  46. <table border="1" width="100%" align="center">
  47. <tr>
  48. <td class="table_tytul">Id</td>
  49. <td class="table_opis"><?php echo $row['ksiazkaId'];?></td>
  50. </tr>
  51.  
  52. <tr>
  53. <td class="table_tytul">Tytuł</td>
  54. <td class="table_opis">
  55. <input type="text" name="tytul" value="<?php echo $row['tytul'];?>">
  56. </td>
  57. </tr>
  58.  
  59. <tr>
  60. <td class="table_tytul">Rok wydania</td>
  61. <td class="table_opis">
  62. <select name="rok"><option value="<?php echo $row['rokWydania'];?>"><?php echo $row['rokWydania'];?></option>
  63. <?php
  64. for($year=date("Y"); $year>=1960; $year--)
  65. {
  66. ?>
  67. <option value="<?php echo $year;?>"><?php echo $year;?></option>
  68. <?php
  69. }
  70. ?>
  71. </select>
  72. </td>
  73. </tr>
  74.  
  75. <tr>
  76. <td class="table_tytul">Ścieżka do pliku
  77. <td class="table_opis">
  78. <input type="file" name="sciezka" value="<?php echo $row['sciezkaDoPliku'];?>">
  79. </td>
  80. </tr>
  81.  
  82. <tr>
  83. <td class="table_tytul">Wydawnictwo</td>
  84. <td class="table_opis">
  85. <select name="wydawnictwo">
  86. <option value="<?php echo $row['wydawnictwoId'];?>" selected>
  87. <?php echo $wydawnictwo[$row['wydawnictwoId']];?>
  88. </option>
  89.  
  90. <?php
  91. $wydawcy = "SELECT * FROM wydawnictwo";
  92. $result = mysql_query($wydawcy) or die("Niepoprawne zapytanie". mysql_error());
  93. while($row = mysql_fetch_array($result))
  94. {
  95. ?>
  96. <option value = "<?php echo $row['wydawnictwoId'];?>"><?php echo $row['nazwa'];?></option>
  97. <?php
  98. }
  99. ?>
  100. </select>
  101. </td>
  102. </tr>
  103.  
  104. <tr>
  105. <td class = "table_tytul">Język</td>
  106. <td class = "table_opis">
  107. <select name="jezyk">
  108. <option value="<?php echo $row['jezykId'];?>" selected>
  109. <?php echo $jezyk[$row['jezykId']];?>
  110. </option>
  111. <?php
  112. $wersjeJezykowe = "SELECT * FROM jezyk";
  113. $result = mysql_query($wersjeJezykowe) or die(mysql_error());
  114.  
  115. while($row = mysql_fetch_array($result))
  116. {
  117. ?>
  118. <option value = "<?php echo $row['jezykId'];?>"><?php echo $row['nazwa'];?></option>
  119. <?php
  120. }
  121. ?>
  122. </select>
  123. </td>
  124. </tr>
  125.  
  126. <tr>
  127. <td class="table_tytul" colspan="2">
  128. <center>
  129. <input type="submit" name="submit" value="Edytuj">&nbsp
  130. <input type="reset" value="Resetuj">
  131. </center>
  132. </td>
  133. </tr>
  134. </table>
  135. </form>
  136. </body>
  137. </html>
  138. <!-- ------------------------------------------------------------------------------------------->
  139.  
  140. <?php
  141. }



2. Kaskadowe usowanie rekordow w MySQL.

Przyklad na podstawie mojej bazy danych:

Pierwsza tabela autor( PK autorId, imie, nazwisko)
Druga tabela ksiazka (PK ksiazkaId, tytul,...)
Trzecia tabela ksiazka_autor (PK autorId, PK ksiazkaId)

przykladowe dane (podam same "id"),

autor
1
2
3

ksiazka
4
7
8

ksiazka_autor

4 - 1
4 - 3
7 - 1
8 - 2
8 - 3

I teraz usuwam dla przykladu z tabeli autor, np autora o id=1 i autora o id=3. W tabeli ksiazka_autor uaktualniam te dane wstawiajac w miejsce "id" usuwanego autora wartosc NULL, ale wtedy MySQL podaje mi informacje, ze to pole nie moze byc NULL, probowalem takze wstawic wartosc '0' w miejsce usuwanego "id", ale gdy pojawily sie dwa takie same rekordy w bazie danych MySQL poinformowal mnie, ze w tabeli znajduja sie zduplikowane rekordy. W jednym i w drugim przypadku rekordy nie zostaly usuniete.

Skrypt jakiego uzywam do usuniecia autora:
  1. $autor = "UPDATE ksiazka_autor
  2. SET autorId = NULL
  3. WHERE autorId = '".$_GET['id']."'";
  4.  
  5. $result = mysql_query($autor) or die(mysql_error());



Prosze o pomoc w rozwiazaniu tych dwoch problemow.
nospor
ad2)
1) skoro chcesz usuwac cos z tabeli to weź to usuwaj DELETE a nie robisz UPDATE
2) Zaloz na tabele relacje to wszystko samo automatycznie ci się bedzie usuwac i tu już nie bedziesz sie o to martwil

ad1)
Ciągle nadpisujesz zmienną $row więc nic dziwnego, ze gdy dochodzi do jezykow to juz nie ma tak rekordu konkretnego wydawnictwa

Włacz sobie pozatym wyswietlanie wszystkich bledow bo troche ich masz
Temat: Jak poprawnie zada pytanie
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.