Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Problem z edycją tekstu
marcwars
post 16.01.2012, 06:53:38
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 14.02.2011
Skąd: Wawa

Ostrzeżenie: (0%)
-----


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..

Ten post edytował marcwars 16.01.2012, 08:17:41
Go to the top of the page
+Quote Post
lukasz_p
post 16.01.2012, 08:12:54
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował lukasz_p 16.01.2012, 08:13:48
Go to the top of the page
+Quote Post
marcwars
post 16.01.2012, 08:16:24
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 14.02.2011
Skąd: Wawa

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
lukasz_p
post 16.01.2012, 08:36:11
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
marcwars
post 16.01.2012, 09:31:13
Post #5





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 14.02.2011
Skąd: Wawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
lukasz_p
post 16.01.2012, 16:35:40
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.07.2025 - 03:57