Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z metodą POST
Forum PHP.pl > Forum > Przedszkole
kolryb29
Witam, serdecznie, głowię się nad pewnym formularzem. Potrzebuję wyniki uzyskane z przycisków zapisać i później zsumować razem. Rozważałem już tablice globalne, singletona... Co również nie dało efektu... Może ktoś jest w stanie pomóc.

Moj Kod - test.php:

  1. <?
  2.   // pytanie 1
  3.    if($_GET['pyt']=="1") {
  4.          echo'
  5.          <form action="test.php?pyt=2" method="POST">
  6.          Pytanie 1: Tresc<br/>
  7.          <input type="radio" name="p1" value="1">Odpowiedz 1 (1 pkt)
  8.          <input type="radio" name="p1" value="2">Odpowiedz 2 (2 pkt)
  9.          <input type="radio" name="p1" value="3">Odpowiedz 3 (3 pkt)
  10.          <input type="submit" value="Dalej" onclick="sendToPHP" >
  11.          </form>';
  12.    }
  13.    
  14.  
  15.    // pytanie 2
  16.    if($_GET['pyt']=="2"){
  17.          if(isset($_POST['p1'])) {
  18.          
  19.          $punkty->setPtk($_POST['p1'],1);
  20.  
  21.          echo'
  22.          <form action="test.php?pyt=3" method="POST">
  23.          Pytanie 2: tresc<br/>
  24.          <input type="radio" name="p2" value="1">1
  25.          <input type="radio" name="p2" value="2">2
  26.          <input type="radio" name="p2" value="3">3
  27.          <input type="radio" name="p2" value="4">4
  28.          <input type="submit" value="Dalej" onclick="sendToPHP" >
  29.          </form>';
  30.          }
  31.        else { echo 'nie odpowiedziales na pytanie!';}  
  32.    }
  33.        
  34.      
  35.      // pytanie 3
  36.      if($_GET['pyt']=="3"){
  37.      if(isset($_POST['p2'])) {
  38.          
  39.          //punktacja
  40.          $punkty->setPtk($_POST['p2'],2);
  41.          
  42.          echo'
  43.          <form action="test.php?pyt=4" method="POST">
  44.          Pytanie 3: Tresc<br/>
  45.          <input type="radio" name="p3" value="4">Odpowiedz 1 (4 pkt)
  46.          <input type="radio" name="p3" value="2">Odpowiedz 2 (2 pkt)
  47.          <input type="radio" name="p3" value="2">Odpowiedz 3 (2 pkt)
  48.          <input type="submit" value="Dalej" >
  49.          </form>';
  50.          } // ..end if isset
  51.        else { echo 'nie odpowiedziales na pytanie!';}  
  52.      } // ..end if
  53. ?>


Singleton:

  1. <?php
  2.  
  3. class Punkty{
  4.  
  5. protected static $_instance;
  6. public $ptk = array();
  7.  
  8. protected function __construct() # we don't permit an explicit call of the constructor! (like $v = new Singleton())
  9. { }
  10.  
  11. public static function getInstance()
  12. {
  13. if( self::$_instance === NULL )
  14. self::$_instance = new self();
  15.  
  16. return self::$_instance;
  17. }
  18.  
  19. public function setPtk($ptk, $nrpyt){
  20. $this->ptk[$nrpyt]=$ptk;
  21. }
  22.  
  23. public function getPtk($nrPyt){
  24. return $this->ptk[$nrPyt];
  25. }
  26. }
  27.  
  28.  
  29. ?>


Próbowałem to zrobić jako zwykłe przypisywanie do zmiennej:

$wynik=$_POST[p1];

następnie:

$wynik+=$_POST[p2];

ale niestety, zawsze dostaję wynik z aktualnie rozwiązanego formularza...


Pozdrawiam
vokiel
Może dodaj wywołanie tego singletona przed ustawieniem pkt:
  1. <?php
  2. require_once 'Punkty.class.php'; // czy jakakolwiek jest ścieżka do pliku, chyba, że masz autoload
  3. $punkty= Punkty::getInstance(); // pobierz instancję z singletona
  4. $punkty->setPtk($_POST['p1'],1); // ustaw pkt
  5. ?>
michaJlS
Przecież przy każdym odświeżeniu strony skrypt ci sie uruchamia od nowa, więc i wszystkie zmienne tworzone są na nowo. Musisz przekazywać obiekt $punkty pomiędzy podstronami. Poczytaj o sesjach i serializowaniu.
kolryb29
Tak też zrobiłem, ale nie mogę tego zsumować?

w drugim ifie daję: $punkty->setPtk($_POST['p1'],1)
w trzecim: $punkty->setPtk($_POST['p2'],2)

Nawet samo wyświetlanie nie działa prawidłowo, gdy daję:

echo $punkty->getPtk(1);
echo $punkty->getPtk(2);

To otrzymuję tylko drugą (ostatnią) wartość...
Suh
W tablicy $_POST (tak samo z resztą jak w $_GET, czy ogólnie $_REQUEST) znajduje się tylko AKTUALNE żądanie wysyłane do serwera. Dobrze by było abyś zrobił tak jak podyktował Ci wcześniej michaJlS. Użyj sesji. Tak będzie chyba najprościej.
kolryb29
Witam, zrobiłem to jeszcze inaczej, tworze plik, który przechowuje wynik. Niestety moja metoda działa tylko pod firefoxem? Opera i IE nie przesyłają mi danych do tablicy POST? Pytanie dlaczego? Co pominąłem?

TUTAJ adres do testowania - http://gangs.ovh.org/
nospor
jesli uzywasz type="image" to postem nie idzie nazwa pola, a:
nazwa_x oraz nazwa_y

naprawde ciezko sprawdzic samemu co zawiera post i nie latac z taką pierdułą po forum?
  1. <?php
  2. print_r($_POST);
  3. ?>
kolryb29
To skąd taka rozbieżność pomiędzy Firefoxem, a Operą i IE ?

W FF widać że $_POST jest 3 elementowy, w O i IE tylko 2 ?
nospor
bo standardem jest tylko nazwa_x i nazwa_y.
A FF sobie tak dla chcecy dodaje jeszcze jedno pole.
kolryb29
Dzięki za pomoc, na przyszłość jakby ktoś kombinował można to załatwić tak :]
Kod
<button  name="button_nm" onmouseover="this.className=\'imageOn\'" onmouseout="this.className=\'imageOff\'" value="1" type="submit"> <img src="source_f_img" alt="Odpowiedz"> </button>
nospor
ale to mozna bylo zalatwic tak jak miales. Tylko zamiast w $_POST sprawdzac NAZWA, to miales sprawdzac NAZWA_X - przeciez caly czas ci to mowie
kolryb29
W sumie tez racja, dzięki wielkie!
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.