Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skryt PHP bez odswieżania strony
Forum PHP.pl > Forum > PHP
ghostrider
jeszcze jeden sposób na wykonywanie skryptu php bez odświerzania strony.

plik wykonaj.php:
  1. <?php
  2.  
  3. $fh = fopen("test.dat","ab");
  4. $str = $_SERVER['REMOTE_ADDR'] . "nn";
  5. fputs ($fh, $str);
  6. fclose($fh);
  7. header("HTTP/1.0 204 No Content");
  8.  
  9. ?>


plki wykonujacy.php:

  1. ...
  2. <form action="wykonaj.php" .... >
  3. <input type="submit" ...... />
  4. </form>
  5. ....


szybki test na FF1.5/Apache2.0 - działa, zostawiam wam do testów na innych przegladarkasz, serwerach itp...
pisać uwagi, please.
FiDO
IE6 SP2, FF 1.0.7, Opera 8.02 @ apache 2.x - wszedzie dziala

Pomysl calkiem sprytny.. ale ma jedna podstawowa wade.. nie mozna w ten sposob zadnych danych pobrac, co wyklucza uzycie w wiekszosci przypadkow.
ennics
Cytat
nie mozna w ten sposob zadnych danych pobrac

a może wrzucić je w _SESSION ?
spotkałem się z tym problemem podczas korzystania z JPGraph kiedy musiałem odwoływać się do plików php zamkniętych w tagu <img>
  1. <img src="genGraph.php">
ghostrider
$_SESSION odpada jeśli nieprzeladujesz strony.
Może setcookie(), ale nie wiem. Kombinujcie jesli macie czas i ochote, u mnie ciezko z tym pierwszym.

@fido: masz racje, jest to raczej niepraktyczne, nie mozna sprawdzić czy wszystko wykonało się po stronie serwera, postowałem raczej jako ciekawostke, a nie "rozwiazanie".
ennics
@ghostrider, ale mi bakcyla zabiłeś smile.gif
czek diz aut:

  1. <form method="POST" action="no_reload.php">
  2.     <input type="text" name="foo" size="20">
  3.     <input type="submit" value="Prześlij" name="B1">
  4. </form>
  5. <?php
  6. class DTO {
  7.     public function __get($val)
  8.     {
  9.         $stmt = new NoContent();
  10.         $stmt -> $val;
  11.     }
  12. }
  13.  
  14. class NoContent extends DTO { // extends chyba nie będzie potrzebne...
  15.     public function __get($val)
  16.     {
  17.         $fh = fopen("test.dat","ab");
  18.         $str = $val . $_SERVER['REMOTE_ADDR'] . "nn"; // dopisujemy przekazany parametr
  19.         fputs ($fh, $str);
  20.         fclose($fh);
  21.         header("HTTP/1.0 204 No Content");
  22.     }
  23. }
  24.  
  25. if ( !empty($_POST['foo']) ) {
  26.     $obj = new DTO();
  27.     $obj -> $_POST['foo'];
  28. }
  29.  
  30. ?>

o ile się nie myle to jest to wzorzec Delegation. Dla mnie działa.
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.