Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z wysłaniem danych do bazy danych
Forum PHP.pl > Forum > Przedszkole
glover
Witam,
otóż tworzę pewien system newsów dla zielonych i napotkał mnie jeden problem.
Bez zbędnego gadania przejdę do środka, a więc mam kod:
  1.  
  2. <?php
  3. mysql_connect('localhost', 'root', '')
  4. or die('Nieudane polaczenie z baza danych...');
  5. mysql_select_db('spamersko')
  6. or die('Nie udalo sie wybrac bazy danych...');
  7.  
  8. if(isset($_POST['ok'])) {
  9. $id = $_POST['id'];
  10. $zapytanie = "SELECT * FROM `site_news` where `id`='$id'";
  11. $wynik = mysql_query($zapytanie);
  12. while ( $rekord = mysql_fetch_row($wynik) )
  13. echo '
  14. <div class="well"><form method="POST">
  15. <div class="news-post-date"><span class="label label-inverse"><i class="icon icon-calendar icon-white"></i> '.$rekord[3].' </span></div>
  16. <legend>Tytuł: <input type="text" name="tytul" value="'.$rekord[1].'"/></legend>
  17. Treść: <textarea style="width: 95%; height:100px; border-radius:4px;" name="tresc">'.$rekord[2].'</textarea>
  18. <br><br>
  19. <i class="pull-right">Podpis: <input type="text" name="autor" value="'.$rekord[4].'" /></i>
  20. <br/>
  21. <center><input type="submit" name="ok" value="Edytuj!" /></center>
  22. <br/>
  23. </form>
  24. </div>';
  25. }
  26. else {
  27. echo '<div class="well">
  28. <b>Jeśli zapisałeś sobie wszystkie informacje o danym ogloszeniu, wypełnij formularz!</b><br><hr>
  29. <form method="POST">
  30. Wpisz ID newsa :<input style="float:right" type="text" name="id" /> <br />
  31. <span style="font-size: 11px;
  32. color: red;">Jeśli wpiszesz ID, którego nie ma w bazie danych i tak zostanie wykonane polecenie w MySQL</span>
  33. <center><input type="submit" name="ok" value="Usun!" /></center><br />
  34. </form>
  35.  
  36.  
  37. </div>'; }
  38.  
  39. ?>
  40.  
  41.  
  42.  


Chciałbym dodać, aby po wypełnieniu formularza ( tej edycji ogłoszenia ) wykonało się takie coś :

  1.  
  2. $tytul=$_POST['tytul'];
  3. $tresc=$_POST['tresc'];
  4. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  5. if($sql)
  6. echo '<fieldset><legend>Udana Akcja</legend>Pomyślnie wyedytowałem newsa! </fieldset>';
  7. else echo '<fieldset><legend>Akcja Nie udana</legend>Nie udało się edytować newsa<br> '.mysql_error().'</fieldset>';


Nie wiem tylko jak to uwarunkwać i w jakich okolicznościach dodać tę akcję sad.gif
Proszę o pomoc, ewentualne sugestie.
b4rt3kk
Dorzuć sobie, najlepiej na samej górze kodu, ten fragment odpowiedzialny za edycję w bazie pomiędzy np.

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. // kod do update
  3. }
glover
Nie bardzo zrozumiałem co mam wpisać w miejsce // kod do update .
Móglbyś mi pokazać linijki z mojego kodu który wysłalem ,ewentualnie powiedzieć co należy dopisać?
b4rt3kk
Dorzuć ten fragment na samej górze pierwszego skryptu (tego z formularzem).

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $id = $_POST['id'];
  3. $tytul=$_POST['tytul'];
  4. $tresc=$_POST['tresc'];
  5. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  6. }


Dorzuć sobie inputa hidden, w którym będziesz miał ID edytowanego rekordu, albo przekaż to w GET, dowolnie, ale jakoś to ID musisz przekazać.
glover
Wyskakują mi blędy:
  1. Notice: Undefined index: tytul in C:\xampp\htdocs\spamersko\include\editnews.php on line 18
  2.  
  3. Notice: Undefined index: tresc in C:\xampp\htdocs\spamersko\include\editnews.php on line 19

To powinno wyglądać tak? :
  1. if(isset($_POST['ok'])) {
  2. $id = $_POST['id'];
  3. $zapytanie = "SELECT * FROM `site_news` where `id`='$id'";
  4. $wynik = mysql_query($zapytanie);
  5. while ( $rekord = mysql_fetch_row($wynik) )
  6. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  7. $id = $_POST['id'];
  8. $tytul=$_POST['tytul'];
  9. $tresc=$_POST['tresc'];
  10. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  11. }
  12. echo '
  13. <div class="well"><form method="POST">
  14. <div class="news-post-date"><span class="label label-inverse"><i class="icon icon-calendar icon-white"></i> '.$rekord[3].' </span></div>
  15. <legend>Tytuł: <input type="text" name="tytul" value="'.$rekord[1].'"/></legend>
  16. Treść: <textarea style="width: 95%; height:100px; border-radius:4px;" name="tresc">'.$rekord[2].'</textarea>
  17. <br><br>
  18. <i class="pull-right">Podpis: <input type="text" name="autor" value="'.$rekord[4].'" /></i>
  19. <br/>
  20. <center><input type="submit" name="ok" value="Edytuj!" />
  21. <input type="hidden" name="id" value="'.$rekord[0].'"/></center>
  22. <br/>
  23. </form>
  24. </div>';
  25. }
b4rt3kk
Aha, widzę, że przekazujesz ID rekordu do edycji też POST-em. W takim razie daj coś takiego:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['ok'])) {
  2. $id = $_POST['id'];
  3. $tytul=$_POST['tytul'];
  4. $tresc=$_POST['tresc'];
  5. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  6. }


Poprawka, to też będzie źle, bo widzę, że na górze już masz taki warunek. Dodaj w takim razie do formularza edycji kolejne ukryte pole, np. o nazwie edycja i wtedy if będzie wyglądał tak:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['edycja'])) {

glover
Podaję ID newsa, wykakują mi pola z value ostatnich wpisów. Kiedy zaś próbuję edytować ten tekst, a następnie klikam "Edytuj" to tekst wraca to pierwotnej postaci i nic nie zmienia się w bazie danych.
  1. if(isset($_POST['ok'])) {
  2. $id = $_POST['id'];
  3. $zapytanie = "SELECT * FROM `site_news` where `id`='$id'";
  4. $wynik = mysql_query($zapytanie);
  5. while ( $rekord = mysql_fetch_row($wynik) ) {
  6. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['edycja'])) {
  7. $id = $_POST['id'];
  8. $tytul=$_POST['tytul'];
  9. $tresc=$_POST['tresc'];
  10. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  11. }
  12. echo '
  13. <div class="well"><form method="POST">
  14. <div class="news-post-date"><span class="label label-inverse"><i class="icon icon-calendar icon-white"></i> '.$rekord[3].' </span></div>
  15. <legend>Tytuł: <input type="text" name="tytul" value="'.$rekord[1].'"/></legend>
  16. Treść: <textarea style="width: 95%; height:100px; border-radius:4px;" name="tresc">'.$rekord[2].'</textarea>
  17. <br><br>
  18. <i class="pull-right">Podpis: <input type="text" name="autor" value="'.$rekord[4].'" /></i>
  19. <br/>
  20. <center><input type="submit" name="ok" value="Edytuj!" />
  21. <input type="hidden" name="id" value="'.$rekord[0].'"/><input type="hidden" name="edycja" value=""/></center>
  22. <br/>
  23. </form>
  24. </div>';
  25. } }
b4rt3kk
Daj to na samą górę:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['edycja'])) {
  2. $id = $_POST['id'];
  3. $tytul=$_POST['tytul'];
  4. $tresc=$_POST['tresc'];
  5. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'") or die(mysql_error());
  6. }


Przed wszystkimi innymi instrukcjami.
glover
Zrobiłem jak radzisz, jednakże efekt wciąż taki sam sad.gif Obecny cały kod wygląda następująco:

  1. <?php
  2. mysql_connect('localhost', 'root', '')
  3. or die('Nieudane polaczenie z baza danych...');
  4. mysql_select_db('spamersko')
  5. or die('Nie udalo sie wybrac bazy danych...');
  6. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['edycja'])) {
  7. $id = $_POST['id'];
  8. $tytul=$_POST['tytul'];
  9. $tresc=$_POST['tresc'];
  10. $sql = mysql_query("UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'");
  11. }
  12. if(isset($_POST['ok'])) {
  13. $id = $_POST['id'];
  14. $zapytanie = "SELECT * FROM `site_news` where `id`='$id'";
  15. $wynik = mysql_query($zapytanie);
  16. while ( $rekord = mysql_fetch_row($wynik) )
  17. echo '
  18. <div class="well"><form method="POST">
  19. <div class="news-post-date"><span class="label label-inverse"><i class="icon icon-calendar icon-white"></i> '.$rekord[3].' </span></div>
  20. <legend>Tytuł: <input type="text" name="tytul" value="'.$rekord[1].'"/></legend>
  21. Treść: <textarea style="width: 95%; height:100px; border-radius:4px;" name="tresc">'.$rekord[2].'</textarea>
  22. <br><br>
  23. <i class="pull-right">Podpis: <input type="text" name="autor" value="'.$rekord[4].'" /></i>
  24. <br/>
  25. <center><input type="submit" name="ok" value="Edytuj!" />
  26. <input type="hidden" name="id" value="'.$rekord[0].'"/><input type="hidden" name="edycja" value=""/></center>
  27. <br/>
  28. </form>
  29. </div>';
  30. }
  31.  
  32.  
  33.  
  34.  
  35. else {
  36. echo '<div class="well">
  37. <b>Jeśli zapisałeś sobie wszystkie informacje o danym ogloszeniu, wypełnij formularz!</b><br><hr>
  38. <form method="POST">
  39. Wpisz ID newsa :<input style="float:right" type="text" name="id" /> <br />
  40. <span style="font-size: 11px;
  41. color: red;">Jeśli wpiszesz ID, którego nie ma w bazie danych i tak zostanie wykonane polecenie w MySQL</span>
  42. <center><input type="submit" name="ok" value="Usun!" /></center><br />
  43. </form>
  44.  
  45.  
  46. </div>'; }
  47.  
  48. ?>
b4rt3kk
Nie dodałeś or die(mysql_error()) po zapytaniu. Może jest tam jakiś błąd? Dorzuć też do warunku podanego przeze mnie print_r($_POST) i zobacz jakie dane są przesyłane POST-em.
glover
Wyskoczył komunikat: Query was empty.
Zapytanie nic nie pobrało ?
b4rt3kk
Wyświetl sobie zapytanie, to będziesz wiedział co może być z nim nie tak:

  1. $query = "UPDATE `site_news` SET `tytul`='$tytul' `tresc`='$tresc' WHERE `id`='$id'";
  2. echo $query;
  3. mysql_query($query) or die(mysql_error());
glover
Jako przykład edytowałem sobie pewnego newsa:
  1. UPDATE `site_news` SET `tytul`='Polskie znaki?' `tresc`='W języku polskim jest dziewięć liter tworzonych za pomocą znaków diakrytycznych (litery diakrytyzowane, litery diakrytyczne): ą, ć, ę, ł, ń, ó, ś, ź, ż. Spornym jest, czy literę „ł” należy również do nich zaliczyć, czy też jest to po prostu litera z polskiego alfabetu. Niepoprawnie pojęciami znaki diakrytyczne i diakrytyki określa się litery diakrytyzowane, czyli tworzone poprzez dodanie znaków diakrytycznych.wdadawdawd' WHERE `id`='11'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 '`tresc`='W języku polskim jest dziewięć liter tworzonych za pomoc&#65533;' at line 1
  2.  

Tak wygląda te query
b4rt3kk
Hehe, brakuje przecinka w zapytaniu, po `tytul`='$tytul'
glover
Taaaak, właśnie dzisiaj z kolegą rozkminiliśmy ! biggrin.gif
Taki błąd, mimo wszystko wielkie dzięki za zainteresowanie ;-)
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.