Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML]Gdzie przechowywane są zmienne, wysyłane za pomocą formularz metodą POST
smarcz
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Problem jest następujący. Gdzie przechowywane są zmienne wysłane z formularza metodą POST i jak je usunąc? unset nic nie pomaga!! (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

  1. <FORM name="f1" METHOD="POST" ACTION="<?php echo $PHP_SELF ?>">
  2. <INPUT TYPE="HIDDEN" NAME="action" VALUE="d4">
  3. <input type="text" name="zmienna">


Problem polega na tym, że wypełnione pola formularza zostają przekzazane do fukcji php która sprawdza poprawność wypełnionego formularza (np. czy wszystkie wymagane pola zostały wypełnione).

Skrypt je sprawdza i jeżeli nie ma żadnych błędów wywołuje kolejną funkcję zawierającą nowy formularz do wypełnienia.

Problem pojawia się w tym momecie, kiedy te pola formularzy mają taką samą nazwę.

Może przedstawie algorytm działania
wszystko dzieje się w funkcji switch

1) Wypełnienie formularza (Krok_1)
2) Przekazanie danych do skryptu sprawdzającego (Dodaj_1)
3) Analiza wypełnienia -> kiedy pojawią się puste pola skrypt wywołuje funkcję Krok_1 z zaznaczonymi polami które nie zostały poprawnie wypełnione.
4) Zapisanie zgromadzonych danych do bazy danych MySQL
5) Wywołanie funkcji wypełnienia kolejnego formularza (Krok_2)

Ten sam algorytm dotyczy funkcji Krok_2.

W funkcjach tych mam zdefioniowaną obsługę błędów. Jeżeli funkcja dodaj znalazła pole nie wypełnione przekazuje informacje o błędzie w zmiennej i wywołuje ponownie funkcję krok_1(ze zmienna).
W plikach tych mam wprowadzone warunki wyświetlania pól za pomocą
  1. if($error==1){ wyświetlam kod z błędem i pustym polem input }
  2. elseif($zmienna=="warunek"){ wyswietlam pole z wstawiąną wartością value=<?echo $wartosc;?>}
  3. else{ normalny wygląd z pustym polem bez value }


Użytkownik wypełnia pola formularza krok_1 wywołuje funkcje dodaj_1 i otwiera funkcję krok_2 - tu już niektóre pola są wypełnione - A tak ma nie być!!!

Zastosowanie unset w dodaj_1 - nic nie pomaga
Zastosowanie $_POST = array(); w dodaj_1 - także nic nie daje?

Co z tym zrobić??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
misiek172
post
Post #2





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


zmienne z POSTU znajdują się w $_POST

np.

$_POST['nazwazmiennej'];

można to usunąć tak:

unset($_POST['nazwazmiennej']);
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #3





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(smarcz @ 21.02.2007, 17:44:00 ) *
Problem jest następujący. Gdzie przechowywane są zmienne wysłane z formularza metodą POST i jak je usunąc? unset nic nie pomaga!! (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Na pewno?

A próbowałeś tak:
  1. <?php
  2. unset($_POST); // usunięcie całej tablicy
  3. unset($_POST['zmienna']); // usunięcie zmiennej
  4. ?>
Go to the top of the page
+Quote Post
smarcz
post
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


powiem tak, wporwadzenie
  1. <?php
  2. unset($_POST); // usunięcie całej tablicy
  3. unset($_POST['zmienna']); // usunięcie zmiennej
  4. ?>


nic nie pomogło, zmienna dalej pozostaje zapisana.

Ale zapomniałem dodać, że przed wywołaniem funkcji switch umieściłem session_start(); w którym przechowuje numer ID.
Teraz nasówa się pytanie, czy po wysłaniu formularza - zmienne z niego zapisują się w sesji?? Chyba nie - tak mi się wydaje?

  1. <?
  2. ?>

...

  1. <?php
  2. switch($action){
  3. case "d1";
  4. naglowek_1();
  5. pomoc_1();
  6. krok_1($blad1, $blad2, $blad3, $wartosc1, $wartosc2);
  7. break;
  8. case "d2";
  9. dodaj_1(); // funkcja sprawdzająca poprawność wypełnionego formularza krok_1 jeżeli wystąpił 
    błąd wywołuje funkcję krok_1()
  10. naglowek_2();
  11. pomoc_2();
  12. krok_2($blad1, $blad2, $blad3, $wartosc1, $wartosc2); // nowy formularz z tymi samymi nazwami pól co w krok_1
  13. break;
  14. }
  15. ?>


w dodaj_1() umieszczam
  1. <?php
  2. unset($_POST); // usunięcie całej tablicy
  3. unset($_POST['wartosc1']); // usunięcie zmiennej
  4. ?>


i w krok_2 ta "wartosc1" dalej przechowuje dane

Ten post edytował smarcz 21.02.2007, 19:28:13
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #5





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Przykład:
  1. <?php
  2. if(isset($_POST['wyslij'])) {
  3.  echo $_POST['nick'];
  4.  unset($_POST['nick']);
  5.  echo $_POST['nick'];
  6. }
  7. echo '<form method="post" action="?">';
  8. echo '<input type="text" name="nick" />';
  9. echo '<input type="submit" name="wyslij" value="Dalej" />';
  10. echo '</form>';
  11. ?>

Zobacz, jak to działa...
Go to the top of the page
+Quote Post
kwiateusz
post
Post #6


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




jak unset nie działa to moze po prostu $_POST['zmienna'] = ''; (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
smarcz
post
Post #7





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Powiem tak! Nie rozumiem dlaczego w tym samym warunku funkcji switch przy wczytywaniu funkcji stworzonych przez użytkownika i w jednej z nich zastosowaniu unset($_POST) w pozostałych funkcjach zmienne zachowują swoje argumenty.

tak to wygląda po kilku testach:

case "d2"
dodaj_1() - tu kasuje zmienne za pomocą unset - sprawdzam za pomocą echo $zmienna - zmienna nie istnieje
naglowek_2()
pomoc_2()
krok_2() - tu te same zmienne - wcześniej wykasowane przez unset w dodaj_1() mają nadal przypisane argumenty??
break;

tak więc w dodaj_1() po zastosowaniu waszych rad - wartości zmiennych zostają usunięte, ale w tym samym warunku switch w krok_2() nadal istnieją(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

PHP odczytuje kod linia po linii - tak więc logicznie myśląc wygląda to tak:
odczyt warunków funkcji dodaj_1(); -> usunięcie zmiennych z pamięci (tablicy)
odczyt warunków funkcji naglowek_2();
odczyt warunków funkcji pomoc_2();
odczyt warunków funkcji krok_2(); -> tu powinny zmienne nie mieć przypisanych argumentów? Nieprawdaż?

Rozwiązałem problem przez zapisanie zmiennej action do sesji - odczytuje z jakiego kroku ("d1") został przekierowany formularz
if($action=="d1"){
unset($_POST);
}
w tedy uzyskuje pożądany efekt!! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Inaczej nic z tego? Natomiast kiedy kontrola formularza odkryje błąd i wywoła funkcję krok_2() z błędami argument $action="d2" czyli nie spełnia warunków i nie usuwa zapisanych zmiennych.

Ale jeżeli macie jeszcze inne rozwiązanie to piszcie! Może komuś się przyda, lub jest prostsze i nie zajmuje zbędnej pamięci w sesji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował smarcz 22.02.2007, 10:17:24
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 14:34