Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znikające zmienne
Forum PHP.pl > Forum > Przedszkole
Adrianna
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 :/
?>
Adrianna
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
sf
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.
dr_bonzo
- 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.
bigZbig
echo faktycznie bylo szybsze ale w php 3 Od czasu pojawienia sie php w wersji 4 echo i print maja podobna wydajnsc.
shima
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ę.
Guest
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....
bigZbig
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 />
Adrianna
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?
mike
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
bigZbig
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
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.