PHP formularze - problem

10.08.05, 10:48
mam następujący problem z prostym formularzem, ktorego zadaniem jest dodac
tekst na strone. chodzi o to, ze po dodaniu tekstu, w pasku pozostaje to, co
pojawia sie z formularza i przechodzi do zmiennych, czyli to po znaku
zapytania: www.costam.pl?x=y&z=a. i po odswiezeniu strony, tekst dodaje
sie ponownie. chcialbym zrobic tak, zeby usunac ten fragment z paska
przegladarki. wklejam tu fragment skryptu, ktory napisalem zeby dodawal ten tekst:

<? $fp=fopen("dane.txt", "r");
$stare=fread($fp, filesize("dane.txt"));
fclose($fp);
$nowe=$slowo."<br>";
$nowe.=$stare;
$fp=fopen("dane.txt", "w");
fputs($fp, $nowe);
fclose($fp);
echo "<b>".$nowe."</b>";}

jesli cos tu jest nie tak, prosze mi to wytknac :) dopiero sie ucze i na razie
niewiele potrafie. bardzo prosze o pomoc!
    • mateuszchol Re: PHP formularze - problem 10.08.05, 11:18
      Fragment, który przesłałeś wygląda ok, ale chyba nie w tym fragmencie leży
      problem. A jak dodawany jest nowy tekst? Z formularza metodą POST? Jeżeli tak,
      to nie powinno się to pojawiać w pasku adresu (chociaż przy odświeżaniu efekt i
      tak może być podobny). Tak czy inaczej bardziej szczegółowe informacje z
      pewnością by pomogły:, np. czy formularz przesyła dane do tego samego skryptu, w
      którym się znajduje?
      • pan_czlowiek Re: PHP formularze - problem 10.08.05, 11:29
        caly skrypt z formularzem wyglada tak:

        <? if(!@$go) {?>
        Wpisz slowo...<BR><BR><FORM ACTION="<?=$SCRIPT_NAME?>">
        <INPUT TYPE="TEXT" SIZE="60" NAME="slowo"><BR><BR>
        <INPUT TYPE="SUBMIT" NAME="go" VALUE="Wtr±cam!">
        </FORM>
        Wpisane slowa:<BR><BR>
        <? $fp=fopen("dane.txt", "r");
        $dane=fread($fp, filesize("dane.txt"));
        fclose($fp);
        echo "<b>".$dane."</b>";}
        else {?>
        Wpisane slowa:<br><BR>
        <? $fp=fopen("dane.txt", "r");
        $stare=fread($fp, filesize("dane.txt"));
        fclose($fp);
        $nowe=$slowo."<br>";
        $nowe.=$stare;
        $fp=fopen("dane.txt", "w");
        fputs($fp, $nowe);
        fclose($fp);
        echo "<b>".$nowe."</b>";}
        ?>

        jak nie jest okreslona metoda wysylania, to jest to chyba GET, tak?
        • mtq Re: PHP formularze - problem 10.08.05, 12:54
          Nie wiadomo.
          Zmień fragment kodu definiujący formularz na:
          <FORM ACTION="<?=$SCRIPT_NAME?>" METHOD="POST">

          Jest to rozwiązanie lepsze, ale tak czy inaczej złośliwy user może kliknąć w Reload (wtedy przeglądarka
          powinna się spytać, czy na pewno chce to zrobić, bo formularz zostanie wysłany drugi raz).
          Żeby zabrać tę możliwość musiałbyś obsługę formularza zrobić w pliku np. progress.php, z którego
          zaraz po zapisaniu danych do pliku byłoby przekierowanie na stronę wynikową za pomocą funkcji
          header("Location: dziekujemy.php")
          Tylko że wtedy user może się cofnąć 2 strony do tyłu i jeśli przeglądarka zapamiętała dane w
          formularzu, to user może je wysłać po raz drugi. I tu można kombinować: identyfikatory
          formularza, ograniczenia czasowe na IP itp. :-)
Pełna wersja