Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Znikające zmienne, Dlaczego zmienne z formularza się gubią?
-Adrianna-
post 3.12.2004, 00:40:59
Post #1





Goście







Cześć

Ludzie pomóżcie bo mi ręce juz opadają.

Szukałam czy wcześniej takeigo tematu nie było ale niedosukałam się niestety ;/
Problem jest taki:

Robię plik php o nazwie indeks.php w którym jest formularz z dwoma inputami textowymi z jednym resetem i dwoma submitami. Zadanie jest takie aby klikając na jeden z submitów wywołać odpowiednią funkcję. Pzredstawię kod dla jednego submitu.

  1. <?
  2. print ('<FORM ACTION=\"indeks.php\" METHOD=\"post\">');
  3. print ('Imię  <INPUT TYPE=\"TEXT\" NAME=\"imie\" VALUE=\"\" >');
  4. print ('Nazwisko <INPUT TYPE=\"TEXT\" NAME=\"nazwisko\" VALUE=\"\">');
  5. print ('<INPUT TYPE=\"RESET\" VALUE=\"RESET\" NAME=\"CLEAR\"> <INPUT TYPE=\"SUBMIT\" NAME=\"WYSLIJ\" VALUE=\"DOPISZ\"> <INPUT TYPE=\"SUBMIT\" NAME=\"POKAZ\" VALUE=\"POKAZ ZAWARTOSC\">');
  6.  
  7. print ('</FORM>');
  8. ?>
  9.  
  10.  
  11.  
  12. <?
  13. function dodaj()
  14. {
  15. $plik=fopen(&#092;"dane.txt\",\"a+\");
  16. $spacja=&#092;" \";
  17. fputs($plik,$imie);
  18. fputs($plik,$spacja);
  19. fputs($plik,$nazwisko);
  20. fputs($plik,$spacja);
  21. fputs($plik,&#092;"n\");
  22. fclose($plik);
  23. }
  24.  
  25. ?>
  26.  
  27.  
  28. <? if($wyslij=on)
  29. {
  30. dodaj();
  31.  
  32. print (&#092;"Twoje imie to: $imie<BR>\");
  33. print (&#092;"Twoje imie to: $nazwisko\");
  34. }
  35. if($pokaz=on)
  36. {
  37. zawartosc();
  38. }
  39.  
  40. ?>


Oczywiscie funkcji dla drugiego submitu jeszcze nie robiłam, gdyż ma wywoływac z pliku dane ale jak narazie danych nie ma. Dziwne, bo plik sie tworzy i zapisuje zmienna $spacja a dwie zmienne z formularza nie chcą się zapisać. O wiele dziwniejsze jest to, że na dwóch plikach wszystko działa ok, ale mi zalezy by to w jednym pliku zrobić. Co jest źle? Co ja robię nie tak? Próbowałam z action="'.$PHP_SELF.'" ale dalej nic :/
?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
-Adrianna-
post 3.12.2004, 01:38:05
Post #2





Goście







Okej trochę zmodyfikowałam ten kod i teraz działa winksmiley.jpg z tymże jest małe ale... mianowicie kod wygląda tak(wszystko w jednym pliku):
  1. <FORM ACTION="indeks.php" METHOD="post">
  2. Imię <INPUT TYPE="TEXT" NAME="imie" VALUE="">
  3. Nazwisko <INPUT TYPE="TEXT" NAME="nazwisko" VALUE="">
  4. Płeć:
  5. <INPUT TYPE="radio" NAME="plec" VALUE="kobieta" CHECKED="TAK"> Kobieta
  6. <INPUT TYPE="radio" NAME="plec" VALUE="mezczyzna"> Mężczyzna
  7. <INPUT TYPE="RESET" VALUE="RESET" NAME="CLEAR"> <INPUT TYPE="SUBMIT" NAME="WYSLIJ" VALUE="DOPISZ"> <INPUT TYPE="SUBMIT" NAME="POKAZ" VALUE="POKAZ ZAWARTOSC">
  8.  
  9. </FORM>

  1. <?
  2. function dodaj()
  3. {
  4. $plik=fopen(&#092;"dane.txt\",\"a+\");
  5. $spacja=&#092;" \";
  6. fputs($plik,$_POST['imie']);
  7. fputs($plik,$spacja);
  8. fputs($plik,$_POST['nazwisko']);
  9. fputs($plik,$spacja);
  10. fputs($plik,$_POST['plec']);
  11. fputs($plik,&#092;"n\");
  12. fclose($plik);
  13. }
  14. ?>
  15.  
  16.  
  17.  
  18.  
  19. <? if($wyslij=on)
  20. {
  21. dodaj();
  22. print (&#092;"Twoje imie to: $imie<BR>\");
  23. print (&#092;"Twoje imie to: $nazwisko<BR>\");
  24. print (&#092;"Twoja płeć to: $plec\");
  25. }
  26. if($pokaz=on)
  27. {
  28. zawartosc();
  29. }
  30.  
  31. ?>
  32.  
  33.  
  34.  
  35.  
  36.  
  37. <?
  38. function zawartosc()
  39. {
  40. $plik=fopen(&#092;"dane.txt\", \"r\");
  41. $tekst=fread($plik,300);
  42. print ('<BR>');
  43. print (&#092;"Twoje dane: <BR>$tekst\");
  44. }
  45. ?>



Chodzi o to, że jak uruchomię stronę to już następuje automatyczne dopisanie oraz odczyt z pliku. Oczywiscie tak ma nie być, ma to być spowodowane przyciśnięciem odpowiednich butonów, jednak każdy z nich to samo robi co włączenie strony mimo, że dałam if-y - prawdopodobnie coś namieszałam ale szukam i szukam i nigdzie nie mogę znaleźć if dla dwóch submitów sad.gif
Go to the top of the page
+Quote Post
sf
post 3.12.2004, 09:34:02
Post #3





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Kiedyś w wiadomościach na php.pl link do artykułu o kilku submitach.

  1. <?php
  2. if(isset($_POST['submit1'])) {
  3. // do sth
  4. }
  5. elseif(isset($_POST['submit2'])) {
  6. // do sth
  7. }
  8. ?>


Radziłbym także używać echo zamiast print. Jest szybsze.

Ten post edytował sf 3.12.2004, 09:38:16


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
dr_bonzo
post 3.12.2004, 09:42:27
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


- register_globals ($_POST[ 'imie' ] zamiast $imie )
- stałe / łańcuchy znaków ( if ( $wyslij == 'on' ) ... zamiast if ( $wyslij == on ) )
- instrukcje warunkowe ( if ( $a == $b ) ..... lub if ( $a === $b )... zamiast if ( $a = b ) ... )
ten drugi submit nie jest potrzebny, zamiast niego wystarczy albo link albo nowy formularz tylko z tym drugm submitem.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
bigZbig
post 3.12.2004, 09:52:40
Post #5





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


echo faktycznie bylo szybsze ale w php 3 Od czasu pojawienia sie php w wersji 4 echo i print maja podobna wydajnsc.


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
shima
post 3.12.2004, 10:55:46
Post #6





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


Cytat(bigZbig @ 2004-12-03 09:52:40)
echo faktycznie bylo szybsze ale w php 3 Od czasu pojawienia sie php w wersji 4 echo i print maja podobna wydajnsc.

W zasadzie to ta dyskusja odbywała się gdzieś tutaj, ale w kwestii różnic: echo jest szybsze, ale nie na tyle, żeby mogło to być znaczące, natomiast zasadnicza różnica polega na tym, że echo to konstrukcja językowa, która, jako że nie jest funkcją, nie może nic zwrócić przez nazwę, a print jak najbardziej. Róznica w szybkości wynika z konieczności wykonania tej jednej operacji return. Dlatego ewentualne użycie echo czy print w sytuacji, kiedy nie potrzebujemy nic zwracać to chyba raczej kwestia przyzwyczajenia czy wręcz widzimisię.


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
-Guest-
post 3.12.2004, 13:37:28
Post #7





Goście







Jeśli cała korekta ma polegać tylko na tym, że zastąpię tą część z if-ami czyli:

Zamiast:
  1. <? if($wyslij=on)
  2. {
  3. dodaj();
  4. print (&#092;"Twoje imie to: $imie<BR>\");
  5. print (&#092;"Twoje imie to: $nazwisko<BR>\");
  6. print (&#092;"Twoja płeć to: $plec\");
  7. }
  8. if($pokaz=on)
  9. {
  10. zawartosc();
  11. }
  12.  
  13. ?>


dać:

  1. <?php
  2. if(isset($_POST['dodaj'])) {
  3. dodaj();
  4. print (&#092;"Twoje imie to: $imie<BR>\");
  5. print (&#092;"Twoje imie to: $nazwisko<BR>\");
  6. print (&#092;"Twoja płeć to: $plec\");
  7. }
  8. elseif(isset($_POST['pokaz'])) {
  9. zawartosc();
  10. }
  11. ?>


to teraz zupełna klapa, nic nie działa sad.gif Nawet się plik nie otwiera. Musi być jakiś sposób by działało....
Go to the top of the page
+Quote Post
bigZbig
post 3.12.2004, 14:06:06
Post #8





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Zapoznaj się z tematem Problem ze zmiennymi. Tam jest rozwiazanie Twojego problemu ;-). Ponadto w Twoim formularzu przyciski nie nazywaja się "wyslij" i "pokaz" tylko "WYSLIJ" i "POKAZ" tak wiec nazwy zmiennych powinny to odwzorowywac.

A tak przy okazji proponuje abys powoli zaczela sie przyzwyczajac do tworzenia kodu HTML zgodnego ze specyfikacja XHTML. Na poczatek zaczni pisac wszystkie nazwy tagow i ich atrybutow mala litera. Wartosci wszystkich atrybutow ujmuj w cudzyslowy i koncz spacja i slashem " /" wszystkie tagi, ktore nie maja tagu zamykajacego np. <br /> czy <input />

Ten post edytował bigZbig 3.12.2004, 14:29:09


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
-Adrianna-
post 4.12.2004, 15:00:08
Post #9





Goście







Z tymi dużymi literami to faktycznie, też zauwazyłam metoda prób i błędów, natomiast zcemu przy odświeżaniu przeglądarki nastepuje zapis do pliku? Wtedy jest bezsensu bo INPUTY sa puste i ta "nicość sie tez zapisuje.
Co do XHTML po co sie przyzwyczajać skoro nie widze w tym żadne różnicy w zastosowaniu?
Go to the top of the page
+Quote Post
mike
post 4.12.2004, 15:12:17
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Adrianna @ 2004-12-04 15:00:08)
Co do XHTML po co sie przyzwyczajać skoro nie widze w tym żadne różnicy w zastosowaniu?

Różnica jest taka ża specyfikacja HTML zatrzymała się na 4.01 i nie jest oraz nie będzie juz dalej rozwijana, w przeciwieństwie do XHTML. Oznacza to że z czasem XHTML wyprze HTML'a i stanie się obowiązującą specyfikacją. A ty nie bedziesz jej znała, bo po co skoro nie ma różnicy. tongue.gif
Go to the top of the page
+Quote Post
bigZbig
post 6.12.2004, 09:12:39
Post #11





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Cytat(Adrianna @ 2004-12-04 14:00:08)
... natomiast zcemu przy odświeżaniu przeglądarki nastepuje zapis do pliku? Wtedy jest bezsensu bo INPUTY sa puste i ta "nicość sie tez zapisuje.

Przede wszystkim przy odsiwerzaniu widoku w przegladarce wartości wpisane do formularza sa zachowywane wiec zastanawia mnie dlaczego Twoje IMPUTY sa puste? Widocznie wartosci te w ogole nie sa przez skrypt odczytywane bo z pewnoscia istnieja jako elementy superglobalnej tablicy $_POST np. zmiennej imie odpowiada $_POST['imie'] itd. Po drugie zapis do pliku nastepuje kazdorazowo po wykonaniu skryptu jeśli spełniony jest warunek isset($_POST['dodaj']) niezaleznie od tego czy formularz jest wypelniony, czy nie. A więc jesli nacisniesz submita z "dodaj" raz a potem odswierzysz widok to skrypt wykona sie jeszcze raz tak jakbys nacisnela tego samego submita jeszcze raz.

Co do XHTML to nie bede powtarzal argumentow mojego przedmowcy dodam jedynie, ze stosujac standard XHTML cwiczysz dobre nawyki (np.: wiekszosc jezykow w tym php rozroznia wielkosc liter), ponad to przy ewentualnej probie poznania technologi XML masz juz zadanie ulatwione bo XHTML to nic innego jak dokument HTML napisany zgodnie z zasadami XML


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.07.2025 - 02:46