Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem z edycją tekstu
Forum PHP.pl > Forum > Przedszkole
marcwars
Piszę ćwiczebnie coś a'la prosty cms w OOP. Jednym ze sposób jest przerabianie formy struturalnej na obiektową, ale nie mogę uzyskać funkcji edytowania artykułów.
Generalnie na razie w tej części cmsa wszystko zachodzi między 2 plikami:
edit.php
  1. .........
  2. //włączanie opcji edycji na liście artykułów
  3. if (isset($_POST['action']) and $_POST['action'] == 'Edytuj')
  4. {
  5. $id = $_POST['id'];
  6. $id_art = $_POST['id'];
  7. include_once("../apps/db/db.php");
  8. $db = new baza ('aaa', 'aaaa', 'aaa', 'aaa');
  9. $db->sqlQuery('SELECT * FROM artykul where id="'.$id_art.'"');
  10. $result = $db->result;
  11. while($row = mysql_fetch_assoc($result))
  12. {
  13. $out[]=$row;
  14. }
  15. $articles = array();
  16. foreach ($out as $art)
  17. {
  18. $articles[$art['tytul']] = new Article ($art['id'], $art['imie'], $art['tytul'], $art['tekst']);
  19. }
  20. include '../apps/view/editform.view.php';
  21. }
  22. //edytowanie artykułu
  23. if (isset($_POST['action']) and $_POST['action'] == 'Zmien')
  24. {
  25.  
  26. $id_art = $_POST['id'];
  27. $tytul = mysql_real_escape_string($_POST['tytul']);
  28. $tekst = mysql_real_escape_string($_POST['tekst']);
  29. include_once("../apps/db/db.php");
  30. $db = new baza ('aaa', 'aaa', 'aaa', 'aaaa');
  31. $db->sqlQuery('UPDATE artykul SET
  32. tekst="'.$tekst.'",
  33. tytul="'.$tytul.'"
  34. WHERE id="'.$id_art.'"');
  35. header('Location: edit.php');
  36. exit();
  37. }
  38. else
  39. {}
  40. .........


i editform.view.php
  1. <form action="?" method="POST">
  2. <?php
  3. foreach ($articles as $tytul => $article)
  4. {
  5. echo '<div>';
  6. echo '<label for="text">Tekst artykułu:</label>';
  7. echo '<textarea id="tekst" name="tekst" rows="3" cols="40">'.$article->tekst.'</textarea></div>';
  8. echo '<div><label for="tytul">Tytuł artykułu:</label><textarea id="tytul" name="tytul" rows="3" cols="40">'.$article->tytul.'</textarea></div>';
  9. echo '<div><input type="hidden" name="id" value="'.$article->id.'"/><input type="submit" value="Zmien"/></div>';
  10. }
  11. ?>
  12. </form>


Po wybraniu opcji edytuj, wszystko chodzi dobrze- wyświetla się w osobnym formularzu tekst i tytuł artykułu do edycji.
Problem jest potem, bo po wysłaniu $_POST['action'] == 'Zmien', plik wraca do starej tabelki, ale nie nanosi zmian.
Na pewno dobre jest połączenie z bazą danych, bo w edit.php (tutaj nie pokazałem dla jasności przekazu), mam opcję kasowania i to działa prawidłowo..
lukasz_p
Hej!

A możesz pokazać klasę baza? Może coś jest nie tak w funkcji sqlQuery?

I jeszcze wskazówka/dobra praktyka smile.gif

  1. <form action="?" method="POST">
  2. <?php foreach ($articles as $tytul => $article) : ?>
  3.  
  4. <div>
  5. <label for="text">Tekst artykułu:</label>
  6. <textarea id="tekst" name="tekst" rows="3" cols="40"> <?php $article->tekst ?></textarea></div>
  7. <div><label for="tytul">Tytuł artykułu:</label><textarea id="tytul" name="tytul" rows="3" cols="40"><?php $article->tytul ?></textarea></div>
  8. <div><input type="hidden" name="id" value="<?php $article->id ?>"/><input type="submit" value="Zmien"/></div>
  9.  
  10. <?php endforeach; ?>
  11. </form>


W ten sposób staje się to czytelniejsze smile.gif
marcwars
Ok, klasa baza:
  1. class baza
  2. {
  3. public $sql;
  4. public $result;
  5. public function __construct ($host, $user, $pswd, $db)
  6. {
  7. $connection = mysql_connect($host, $user, $pswd);
  8. $conn = mysql_select_db($db, $connection);
  9. }
  10.  
  11. public function sqlQuery($query)
  12. {
  13. $this->sql = $query;
  14. $this->result = mysql_query($this->sql);
  15. }
  16. }
lukasz_p
Hmm... nie wiem co jest nie tak.

A możesz sprawdzić co się dzieje w funkcji sqlQuery?

Ja bym to zrobił tak:

  1. public function sqlQuery($query)
  2. {
  3. $this->sql = $query;
  4. if ( ! $this->result = mysql_query($this->sql))
  5. {
  6. die('Edycja nie powiodła się. Zapytanie, które dotarało do funkcji:'.$query)
  7. }
  8. }
marcwars
Nie wywaliło żadnego błędu, ale dalej nie działa. Natomiast plik editform.view.php nie wyświetla już dotychczasowego artykułu (tylko puste pola formularza), więc chyba lepiej wrócić do poprzedniej wersji.
lukasz_p
Chyba źle Cię zrozumiałem smile.gif Cały czas szukałem problemu w bazie danych ale może tam dane zostały aktualizowane? Możesz to sprawdzić?
Może problem tkwi w skrypcie odpowiadającym za wyświetlanie artykułów?

Daj znać czy dane w bazie po edicie/edycie? (jak to odmienić biggrin.gif) zmieniają się.
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.