Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błędne adytowanie wpisów
Forum PHP.pl > Forum > PHP
radziowie
Zrobiłem sobie skrypt dodawania wiadomości. Teraz zwróciłem uwagę, że dodająć np. tytuł z cudzysłowiem czyli " tytuł " to podczas edycji to pole mam puste. Jednakże gdy zapisze dane z owym pustym polem to w tabeli nadal mam " tytuł ".
Drugie co zauważyłem to to, że nie mogę edytować wyłącznie tylko tych rekordów gdzie się znajduje owy tytuł z cudzysłowami.

  1. <?php
  2. //stosować tylko do projektu do wyszukania błędów
  3. ini_set('display_errors','1');
  4. // usunąć po zakończeniu projektowania
  5. //załączenie plików
  6. include ('../meta.php');
  7. include ('../gora_logo.php');
  8. include ('./menu_admin.php');
  9. include ('../dodatki/bonus.php');
  10. polacz_baza();
  11. $data = date('Y-m-j');
  12. function add_news () {
  13. echo "<h1>NEWSY - DODAWANIE I WYŚWIETLANIE</H1>";
  14. echo '<form action="wiadomosci.php" method="post">
  15. Tytuł wiadomości: <input type="text" name="tytul" /><br />
  16. Treść wiadomości: <textarea name="text" cols="50" rows="10"></textarea><br />
  17. Autor: <input type="text" name="autor" /><br />
  18.  
  19. <input type="submit" name="submit" value="wyślij" />
  20. </form>';
  21. } ?>
  22. <table bgcolor="white" width="900" cellspacing="0" cellpadding="10" border="1" align="center">
  23. <tr>
  24. <td colspan="2" align="center" valign="middle">
  25.  
  26. <?php
  27.  
  28. //sprawdzenie czy istnieją zmienne
  29. if (isset($_POST['tytul']) && isset($_POST['text']) && isset($_POST['autor'])) {
  30. //mysql_real_escape_string Dodaje znaki unikowe w łańcuchu znaków do użycia w instrukcji SQL, trim wycina spacje
  31. $tytul = mysql_real_escape_string(trim($_POST['tytul']));
  32. $text = mysql_real_escape_string(trim($_POST['text']));
  33. $autor = mysql_real_escape_string(trim($_POST['autor']));
  34. }
  35. //sprawdza czy istnieje zmienna$_POST['submit'], czyli czy nastąpiło wysłanie danych
  36. if (isset($_POST['submit'])) {
  37. //dodawanie danych do bazy
  38. $zapytanie = "INSERT INTO newsy VALUES (NULL, '".$tytul."', '".$text."', '".$autor."', '".$data."')";
  39. $result = mysql_query($zapytanie);
  40. }
  41. //sprawdzenie czy istnieją zmienne
  42. if (isset($_GET['co']) && isset($_GET['id']) && $_GET['co'] == 'skasuj') {
  43. $wynik = mysql_query("DELETE FROM newsy WHERE id = '".$_GET['id']."'");
  44. add_news();
  45. //sprawdzenie czy istnieją zmienne
  46. } elseif (isset($_POST['co']) && $_POST['co'] == 'popraw') {
  47. if ($_POST['tytul'] && $_POST['text'] && $_POST['autor']) {
  48. $popraw = mysql_query("UPDATE newsy SET tytul = '".$_POST['tytul']."', text = '".$_POST['text']."', autor = '".$_POST['autor']."'
  49. WHERE id = '".$_POST['id']."';")
  50. $wynik = mysql_query($popraw);
  51. add_news();
  52.  
  53. }
  54. }
  55. //sprawdzenie czy istnieją zmienne
  56. elseif (isset($_GET['co']) && $_GET['co'] == 'edytuj') {
  57. $edycja = mysql_query("SELECT * FROM newsy WHERE id = '".$_GET['id']."';");
  58. $rekord = mysql_fetch_assoc($edycja);
  59. $nrid = $rekord['id'];
  60. $tytul = $rekord['tytul'];
  61. $text = $rekord['text'];
  62. $autor = $rekord['autor'];
  63. $data = $rekord['data'];
  64. echo "<table border=\"1\">
  65. <tr>
  66. <td width=\"120\"><form action=\"wiadomosci.php\" method=\"post\">
  67. nr id: ".$nrid."<input type=\"hidden\" name=\"co\" value=\"popraw\">
  68. <input type=\"hidden\" name=\"id\" value=\"".$nrid."\"><br /></td>
  69. </tr><tr>
  70. Tytuł:<input type=\"text\" name=\"tytul\" value=\"".stripslashes($tytul)."\"><br /></td>
  71. </tr><tr>
  72. <td width=\"120\">Treść wiadomości:<textarea name=\"text\" cols=\"50\" rows=\"10\">".stripslashes($text)."</textarea><br /></td>
  73. </tr><tr>
  74. <td width=\"120\">Autor:<input type=\"number\" name=\"autor\" min=\"0\" max=\"7\" value=\"".stripslashes($autor)."\"><br /></td>
  75. </tr><tr>
  76. <td>Data: ".$data."</td>
  77. </tr><tr>
  78. <td align=\"center\"><input type=\"submit\" name =\"popraw\" value=\"popraw\"><br />
  79. </form></td>
  80. </tr>
  81. </table>";
  82. //sprawdza czy nie istnieje zmienna $_GET['co'], jeśli nie istnieje wtedy wyświetlany jest funkcja add_news(), czyli formularz
  83. } elseif (!isset($_GET['co'])) {
  84. add_news();
  85. }
  86.  
  87.  
  88.  
  89.  
  90.  
  91. $wynik = mysql_query("SELECT * FROM newsy ORDER BY id DESC;") or
  92. die ("zle polecenie");
  93. //liczba rekordów
  94. $ile = mysql_num_rows($wynik);
  95. echo "Znaleziono: ".$ile." rekordów";
  96. echo "<table border=\"1\" width=\"750\"><tr><td width=\"30\">Nr. ID</td><td width=\"100\">Tytuł</td><td width=\"400\">Text</td>
  97. <td width=\"10\">autor</td>
  98. <td>data</td>
  99. <td width=\"50\">Usuwanie
  100. </td><td>Edytowanie</td></tr>";
  101. //wyświetlanie danych z bazy komórka po komórce
  102. WHILE ($rekord = mysql_fetch_assoc ($wynik)) {
  103. $nrid = $rekord['id'];
  104. $tytul = $rekord['tytul'];
  105. $text = $rekord['text'];
  106. $autor = $rekord['autor'];
  107. $data = $rekord['data'];
  108.  
  109. echo "<tr><td width=\"30\">".$nrid."</td><td width=\"100\">".stripslashes($tytul)."</td>
  110. <td width=\"40\">".stripslashes($text)."</td>
  111. <td width=\"10\">".stripslashes($autor)."</td>
  112. <td width=\"120\">".$data."</td>
  113. <td><a href=\"wiadomosci.php?co=skasuj&amp;id=$nrid\">usuń</a></td><td>
  114. <a href=\"wiadomosci.php?co=edytuj&amp;id=$nrid\">edytuj</a></td></tr>";
  115. }
  116. echo "</table>";
  117.  
  118.  
  119. ?>
  120. </tr>
  121. </table>
  122. <?php
  123. include ('../stopka.php');
  124. ?>
  125. </body>
  126. </html>
outsider
Tak wygląda Twój input przy edycji:
<input type="text" name="tytul" value=""tytul"" />
czyli value="" - pusty ciąg, dlatego nic nie widzisz, a UPDATE bazy się nie robi, bo nie jest spełniony warunek, że 'tytul' musi mieć wartość smile.gif Użyj htmlspecialchars dla każdej zmiennej przy wyświetlaniu.
radziowie
Dzięki pomogło to, tylko mam teraz jeden problem. Można owszem edytować dane, jednak nie mogą istnieć pola puste a chciałbym aby np pole $autor mogło być puste. Poprawiony kod to:

  1. //sprawdzenie czy istnieją zmienne
  2. elseif (isset($_GET['co']) && $_GET['co'] == 'edytuj') {
  3. $edycja = mysql_query("SELECT * FROM newsy WHERE id = '".$_GET['id']."';");
  4. $rekord = mysql_fetch_assoc($edycja);
  5. $nrid = $rekord['id'];
  6. $tytul = $rekord['tytul'];
  7. $text = $rekord['text'];
  8. $autor = $rekord['autor'];
  9. $data = $rekord['data'];
  10. echo "<table border=\"1\">
  11. <tr>
  12. <td width=\"120\"><form action=\"wiadomosci.php\" method=\"post\">
  13. nr id: ".$nrid."<input type=\"hidden\" name=\"co\" value=\"popraw\">
  14. <input type=\"hidden\" name=\"id\" value=\"".$nrid."\"><br /></td>
  15. </tr><tr>
  16. Tytuł:<input type=\"text\" name=\"tytul\" value=\"".htmlspecialchars($tytul)."\"><br /></td>
  17. </tr><tr>
  18. <td width=\"120\">Treść wiadomości:<textarea name=\"text\" cols=\"50\" rows=\"10\">".htmlspecialchars($text)."</textarea><br /></td>
  19. </tr><tr>
  20. <td width=\"120\">Autor:<input type=\"number\" name=\"autor\" min=\"0\" max=\"7\" value=\"".htmlspecialchars($autor)."\"><br /></td>
  21. </tr><tr>
  22. <td>Data: ".$data."</td>
  23. </tr><tr>
  24. <td align=\"center\"><input type=\"submit\" name =\"popraw\" value=\"popraw\"><br />
  25. </form></td>
  26. </tr>
  27. </table>";
outsider
30 i 48 linijka z Twojego pierwszego listingu to
  1. if ($_POST['tytul'] && $_POST['text'] && $_POST['autor']) {

żeby dopuścić puste pole autora wywal && $_POST['autor'] z warunków(z 30 i 48 linijki)
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.