Fromularz HTML, PHP z zapisaniem do pliku

Odpowiedz Nowy wątek
Baska
2017-02-01 21:20
Baska
0

Hej!
Głowię się nad stworzeniem formularza, którego dane będą zapisane do pliku, a następnie wyświetlane.
Problem w tym, że dane w ogóle się nie zapisują. Nie wiem co jest nie tak. Proszę, pomóżcie!
Php uczę się od niedawna, więc proszę o wyrozumiałość ;D.

<html> <form action="" method="get"> <label> Nick:
<input type="text" name="nick" required="required">
</label> <label> Comment:
<textarea cols="45" rows="5" name="com"></textarea>
</label> <input type="submit" value="Send" name="Submit"> </form> </html>

<?php
if(isset($_GET['Submit']))
{
$write = fopen("com.txt", "r+");
$text = $_GET['nick'].$_GET['com'];
fputs($write, $text);

    while(!feof($write))
    {
        fread($write,filesize("com.txt"));
    }
    fclose($write);
}

?>

Pozostało 580 znaków

2017-02-01 21:32
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Wrocław

1

1.Po co Ci to fread?
2.Plik na pewno istnieje? (r+ nie tworzy nowego)
3.Skrypt na pewno ma prawa dostępu do pliku?


edytowany 1x, ostatnio: Patryk27, 2017-02-01 21:32

Pozostało 580 znaków

Baska
2017-02-01 21:43
Baska
0
Patryk27 napisał(a):

1.Po co Ci to fread?
2.Plik na pewno istnieje? (r+ nie tworzy nowego)
3.Skrypt na pewno ma prawa dostępu do pliku?

  1. Chciałabym wyświetlić dane formularza. Funkcja fread nie służy do tego prawda? Powinnam użyć echo?
  2. Plik istnieje
  3. W jaki sposób to sprawdzić?

Pozostało 580 znaków

2017-02-01 22:14
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Wrocław

0

1.Poczytaj co robi fread, a nie zgaduj ;-)
3.Jaki system operacyjny?


Pozostało 580 znaków

2017-02-03 16:25

Rejestracja: 5 lat temu

Ostatnio: 10 godzin temu

0

A czy jak ręcznie zapiszesz dane w pliku to też się nie wyświeltająna stronie ?

Pozostało 580 znaków

2017-02-04 09:17

Rejestracja: 10 lat temu

Ostatnio: 18 minut temu

Lokalizacja: Krasnystaw

0

Poniższy przykład ma na celu zobrazować jak to można praktycznie zrealizować, to bardzo proste forum.

 <?php
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);
$filename = 'messages.json';
$data = array();

$t1 = microtime(true);

$file = DOCROOT . DIRECTORY_SEPARATOR . $filename;
if (realpath($file))
{
        $contents = file_get_contents($file);
        $data = json_decode($contents, true);
}

$t2 = microtime(true);
$time = $t2 - $t1;

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $data[] = array(
        'nick'     => $_POST['nick'],
        'message'  => $_POST['message'],
    );

    $contents = json_encode($data, JSON_PRETTY_PRINT);
    file_put_contents($file, $contents, LOCK_EX);
}

$formatted_data = print_r($data, true);

?>

<!DOCTYPE html>
<html>
    <head>
        <meta CHARSET="UTF-8" />
    </head>
    <body>
        <div>
            <h2>Wiadomości na forum:</h2>
            <pre>
                <?= $formatted_data ?>
            </pre>
            <span>Wygenerowane w <?= $time ?> sekund</span>
        </div>
        <form method="POST" action="" >
            <label>Nick:</label>
            <input type="text" name="nick" />
            <label>Wiadomość:</label>
            <textarea name="message" ></textarea>
            <input type="submit" value="Wyślij" name="submit" />
        </form>
     </body>
</html>

Dane są zapisywane do json, w dodatku ładnie sformatowanego

 [
    {
        "nick": "nocny marek",
        "message": "Cze\u015b\u0107. To jest moja pierwsza wiadomo\u015b\u0107 na forum."
    },
    {
        "nick": "szczur",
        "message": "Cze\u015b\u0107. Do\u0142\u0105czam do forum, chc\u0105c podyskutowa\u0107 z Wami."
    }
]

Od tego jest file_get_contents albo file_put_contents a wiadomości w formularzu wysyłane są POST-em a nie przez GET. Polecam sobie sprawdzić w ile to się będzie generowało przy coraz większej liczbie wysłanych wiadomości bo to jest tylko do zabawy a nie do normalnego użytku.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0