Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odczytanie i wyswietlenie danych z pliku
Forum PHP.pl > Forum > PHP
rad3ks
Witam.

Napisałem taki prosty kod:
  1. <?php
  2. echo '<html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  5. </head>
  6. <body>
  7. <a href="test.php?action=add">Dodaj swój wpis</a><br>
  8. <a href="test.php">Pokaż wpisy</a>';
  9.  
  10. $action=$_GET['action'];
  11. if ($action==add) {
  12. echo '<form action="test.php?action=write" method="POST">
  13. <input type="text" value="wpisz nick" name="nick"><br>
  14. <textarea name="text">Wpisz swój tekst</textarea><br>
  15. <input type="submit" value="Wyślij">
  16. <input type="reset" value="Wyczyść">
  17. </form>
  18. <hr>';
  19. }
  20. $file = "file.txt";
  21. $size=filesize($file);
  22. if ($size<=0) {
  23. $size=1;
  24. }
  25. if ($action==write) {
  26. $nick = $_POST['nick'];
  27. $text = $_POST['text'];
  28. $fp = fopen($file, "a");
  29. $wpis = fread($fp, $size);
  30. $wpis = unserialize($wpis);
  31. $i = count($wpis);
  32. $wpis[$i++]['nick'] = $nick;
  33. $wpis[$i++]['text'] = $text;
  34. fwrite($fp, serialize($wpis));
  35. fclose($fp);
  36. echo "Pomyślnie dodano wpis!";
  37. }
  38. if ($action!=add && $action!=write) {
  39. $fp = fopen($file, "r");
  40. $wpis = fread($fp, $size);
  41. $wpis = unserialize($wpis);
  42. for ($i=0; $i==count($wpis); $i++) {
  43. echo $wpis[$i]['nick'];
  44. echo '<br>';
  45. echo $wpis[$i]['text'];
  46. echo '<br><hr><br>';
  47. }
  48. fclose($fp);
  49. }
  50. echo '</body></html>';
  51. ?>


Wpis jest dodawany do pliku, zapisywany itd. Nie działa odczyt lub wyświetlenie. Czy ktoś może mi pomóc w nauce ?

Pozdrawiam,
Radek
lukasamd
Ja bym to zrobił tak:

Kod
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
<body>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?action=add">Dodaj swój wpis</a><br>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>">Pokaż wpisy</a>

<?php
$file = 'file.txt';

    
switch ($_GET['action'])
{
  case 'add':
        echo '<form action="' . $_SERVER['PHP_SELF'] . '?action=write" method="POST">
            <input type="text" value="wpisz nick" name="nick"><br>
            <textarea name="text">Wpisz swój tekst</textarea><br>
            <input type="submit" value="Wyślij">
            <input type="reset" value="Wyczyść">
            </form>
            <hr>';
    break;  

  case 'write':
    $nick = $_POST['nick'];
        $text = $_POST['text'];        
    $wpisy = file_get_contents($file);
        $wpisy .= "\n" . $_POST['nick'] . '|' . $_POST['text'];
        file_put_contents($file, $wpisy);
        echo  "Pomyślnie dodano wpis!";
    break;  

default:
        $wpisy = explode("\n", file_get_contents($file));
        $ilosc_wpisow = count($wpisy);

        for ($i = 0; $i < $ilosc_wpisow; $i++)
    {
            $wpis = explode('|', $wpisy[$i]);
            echo '<p>';
      echo '<b>Autor:</b> ' . $wpis[0];
            echo '<br />';
            echo '<b>Wpis:</b>';
      echo '<br />' . $wpis[1];
            echo '</p><br />';
        }
      break;
}

?>
</body>
</html>
rad3ks
Wielkie dzięki za otwarcie oczu.
Jest jedynie niewielki problem, z którym nie potrafie sobie poradzić. Podczas wyświetlania pliku dodawany jest na poczatku listy Autor: i Wpis: bez treści. Jak z tym sobie poradzić?
lukasamd
Zmodyfikuj fragment default tak:

Kod
default:
$wpisy = trim(file_get_contents($file));
        $wpisy = explode("\n", $wpisy);
        $ilosc_wpisow = count($wpisy);

if($ilosc_wpisow > 0)
{
        for ($i = 0; $i < $ilosc_wpisow; $i++)
    {
            $wpis = explode('|', $wpisy[$i]);
            echo '<p>';
      echo '<b>Autor:</b> ' . $wpis[0];
            echo '<br />';
            echo '<b>Wpis:</b>';
      echo '<br />' . $wpis[1];
            echo '</p><br />';
        }
}
else
{
   echo 'Brak wpisów';
}
      break;
rad3ks
ahh tez mogłem na to wpaść, dzieki smile.gif
pojawił się jeszcze jeden mały problem:
Cytat
Notice: Undefined index: action in /Applications/MAMP/bin/mamp/test.php on line 13


błąd ten wyświetla się tylko przy oglądaniu wpisów

linia 13:
  1. switch ($_GET['action'])

Czy chodzi o to, że nie została przesłana wartość action przez GET? Czy jeżeli zrobie wyświetlanie wpisow wszedzie prócz action=write to bedzie ok? (mozna napisac osobna funkcje na wyswietlanie wpisow i dodać ją na koniec kodu ?
lukasamd
Możesz napisać funkcję, nie ma z tym problemu.
A z komunikatem to zamień początek switch na:

Kod
$action = (isset($_GET['action'])) ? $_GET['action'] : 'none';
switch ($action)
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.