ďťż
Podstrony
|
telcocafeuczę sie php, i mam problem, coś nie działa... nie wywala żadnych błędów, ale jak chcę zrobić wpis, to mi go nie zapisuje do pliku, przeglądałem kod już kilka razy ale nie wiem gdzie się ten chochlik schował :(form.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Dodaj wpis do Ksiegi Gosci</title> </head> <body> <form action="book.php" method="post"> <table> <tr> <td> Nick: </td> <td> <input name="nick" type="text" size="20" /> </td> </tr> <tr> <td> Adres email: </td> <td> <input name="mail" type="text" size="40" /> </td> </tr> <tr> <td> Twój wpis: </td> <td> <textarea name="wpis" type="text" style="height:100px; width:300px;"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="Wpisz sie" /> </td> </tr> </table> </form> </body> </html> class.php <?php class guest_book { public $file_p; #wskaznik na plik z wpisami public $book_content; #tablica do ktorej wczytujemu i dodajemy wpisy public $enters_count; #licznik wpisów w tablicy $book_content #konstruktor public function __construct($file_name) { if(!file_exists($file_name)) { @ $this->file_p = fopen($file_name,'wb'); $this->enters_count = 0; } else { $this->book_content = file($file_name); $this->enters_count = count($this->book_content); @ $this->file_p = fopen($file_name,'wb'); } #sprawdzenie czy otworzono plik do zapisu if(!$this0>file_p) { echo "<p>Nie można otworzyć pliku z ksiągą gości. Spróbuj ponownie za chwilę.</p>"; } #zablokowanie pliku do zapisu flock($this->file_p, LOCK_EX); } #destruktor public function __destruct() { #zapisanie ksiegi do pliku for($i=0;$i<$this->enters_count;$i++) { fwrite($this->file_p, $this->book_content[$i], strlen($this->book_content)); } #odclokowanie pliku flock($this->file_p, LOCK_UN); #zamnkięcie pliku fclose($this->file_p); } #wyswietlanie ksiegi gosci public function show_book() { if($enters_count==0) { echo "<p>Brak wpisów.</p>"; } else { for($i=0;$i<$this->enters_count;$i++) { $wiersz = explode('\t',$this->book_content[$i]); ?> <table> <tr> <td>Imię (Nick):</td> <td><?php echo "$wiersz[1]"; ?></td> </tr> <tr> <td>Mail:</td> <td><?php echo "$wiersz[2]"; ?></td> </tr> <tr> <td>IP:</td> <td><?php echo "$wiersz[3]"; ?></td> </tr> <tr> <td>Wpis:</td> <td><?php echo "$wiersz[4]"; ?></td> </tr> </table> <?php } } } #dodanie wpisu i wyswietlenie całej ksiegi gosci. public function enter_book($nick,$mail,$wpis) { $this->book_enters[$this->enters_count] = $nick.'\t'.$mail.'\t'.$_SERVER['REMOTE_ADDR'] .'\t'.$wpis.'\n'; $this->enters_count++; $this->show_book(); } } ?> book.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Guest Book</title> </head> <body> <?php require('class.php'); $ksiega = new guest_book('ksiega.txt'); #utworzenie krótkich nazw zmiennych $nick = $_POST['nick']; $mail = $_POST['mail']; $wpis = $_POST['wpis']; $ksiega->enter_book($nick,$mail,$wpis); ?> </body> </html> EDIT: CODEBOX Użytkownik Krzymar edytował ten post 10 sierpień 2006, 17:22 Pousuwaj "@" przed funkcjami, to zobaczysz jakie są błędy. N amoje to nie może otworzyć pliku do zapisu z powodu uprwnień. żaden błąd nie wyskoczył dalej to samo, po dodaniu wpisu formularzem, pisze: Brak wpisów :| Jak używasz php5 to masz file_get_contents i file_put_contents :) Poza tym programowanie obiektowe nie polega na tym że umieszczasz HTML w klasie i gotowe. Jak używasz php5 to masz file_get_contents i file_put_contents :) oki, sprawdzę to, może pomoże :) Poza tym programowanie obiektowe nie polega na tym że umieszczasz HTML w klasie i gotowe. możesz rozwinąć myśl? bo nie wiem co miałeś na myśli... a co do programowania obiektowego, to wiem coś niecoś na ten temat :P oto poprawiony plik class.php, niestety dalej to samo :( <?php class guest_book { public $file_name; #wskaznik na plik z wpisami public $book_content; #tablica do ktorej wczytujemu i dodajemy wpisy public $enters_count; #licznik wpisów w tablicy $book_content #konstruktor public function __construct($file_name) { $this->file_name = $file_name; if(!file_exists($this->file_name)) { $this->enters_count = 0; } else { $file_content = file_get_contents($this->file_name); $this->book_content = explode('\n', $file_content); $this->enters_count = count($this->book_content); } } #destruktor public function __destruct() { #zapisanie ksiegi do pliku file_put_contents($this->file_name, $this->book_content); } #wyswietlanie ksiegi gosci public function show_book() { if($this->enters_count==0) { echo "<p>Brak wpisów.</p>"; } else { for($i=0;$i<$this->enters_count;$i++) { $wiersz = explode('\t',$this->book_content[$i]); ?> <table> <tr> <td>Imie (Nick):</td> <td><?php echo "$wiersz[1]"; ?></td> </tr> <tr> <td>Mail:</td> <td><?php echo "$wiersz[2]"; ?></td> </tr> <tr> <td>IP:</td> <td><?php echo "$wiersz[3]"; ?></td> </tr> <tr> <td>Wpis:</td> <td><?php echo "$wiersz[4]"; ?></td> </tr> </table> <?php } } } #dodanie wpisu i wyswietlenie calej ksiegi gosci. public function enter_book($nick,$mail,$wpis) { $this->book_enters[$this->enters_count] = $nick.'\t'.$mail.'\t'.$_SERVER['REMOTE_ADDR'] .'\t'.$wpis.'\n'; $this->enters_count+=1; $this->show_book(); } } ?> EDIT: CODEBOX Użytkownik Krzymar edytował ten post 10 sierpień 2006, 17:25 1. sprawdź czy dane, które chcesz zapisać istnieją (tj. zmienna z danymi ma te dane) 2. jeżeli to linux/unix katalog, w którym ma być zapisany plik musi mieć prawa zapisu (chmod 666 lub 777) jeżeli plik istnieje to również musi mieć takie prawa. Programowanie Obiektowe "pociąga" za sobą stosowanie pewnych wzorców programowania. Obecnie króluje MVC czyli model-widok-kontroler. Widok zawiera wygląd (HTML), model operuje na danych (np. baza) a kontroler spina to wszystko do kupy :) public function enter_book($nick,$mail,$wpis) { $this->book_enters[$this->enters_count] = $nick.'\t'.$mail.'\t'.$_SERVER['REMOTE_ADDR'] .'\t'.$wpis.'\n'; nie powinno czasem być $this->book_content ? :P Aha, i wrzucaj dłuższe kody do [codebox ] ;) Użytkownik bryn edytował ten post 10 sierpień 2006, 15:02 @Riklaunim: dzięki, teraz wiem o czym mam jeszcze poczytać i się naumieć :), jak masz jakieś szcególnie dobre pozycje na necie to proszę o linki, również o te, które pomogły by przerobić tą księge wg tych standardów @Bryn: dzięki wielkie <respekt> :) a tyle razy przeglądałem kod :), dzięki za radę co do codeboxu :) Użytkownik Krzymar edytował ten post 10 sierpień 2006, 15:27 zobacz www.php.rk.edu.pl :) a o samym MVC wystarczy google "mvc php" :) zobacz www.php.rk.edu.pl :) zaglądałem na to wcześniej już i jestem pełen uznania popieram taką inicjatywę i to bardzo, jednak chcąc nauczyć się php i myślenia obiektowego musze sam stworzyć parę rzeczy, i dopiero mając większe doświadczenie myślę mogę się zająć czymś takim. Nie ma w końcu to jak satysfakcja z napisania czegoś od zera, bo używanie "gotowców" mimo że doskonałych to już nie to samo :) dzięki wielkie za pomoc jeszcze raz :) |
|||
Sitedesign by AltusUmbrae. |