TORU Foorum

unset $_POST php-s

Whitedragon - 21.12.2010 21:35

Küsimus nimelt selles soovin unset-ida posti väärtust et refreshides lehte ei oleks muutujaid kuid unset ei funka... või mis oleks parem kasutada?

Timukas - 21.12.2010 22:21

Selline asi unsetiga ei ole võimalik, sest unset toimib ainult jooksva php-skripti ulatuses, aga kui teha refresh, siis hakatakse skripti uuesti algusest täitma.
Võid näiteks kasutaja suunata teisele (või sellele samale lehele):
Kood:
header('Location: leht.php');

Suunates mingeid POST väärtusi kaasa ei anta ja seega ei teki nad ka lehte värskendades.

emmsii - 21.12.2010 23:07

Käid iga $_POST väärtuse for(või foreach?)-tsükliga läbi näiteks ja kasutad ükshaaval unsetti äkki? Pole kindel, PHP'ga pole ammu tegelenud enam.

Timukas - 21.12.2010 23:11

Ma sain aru, et kui keegi vormiga andmeid saadab ja refreshi vajutab, siis ta ei taha, et vorm uuesti ära saadetakse (submit-itakse). Unsetiga sellist asja ei tee.

Whitedragon - 22.12.2010 09:08

Timukas proovisin:
Kood:
if($_POST['nupp'] && strlen($_POST['nupp']) > 1) { //Muu kood vormiga $_POST['nupp'] = ""; // on ju väiksem kui üx:S }

E: enter mõistis valel ajal positada:D
Samas.... Ma ei saa siis ju kasutajale vormi vigu näidata... või mõtekas vigade jaoks kasutada sessiooni?

[Muudetud: 22.12.2010 Whitedragon]

[Muudetud: 22.12.2010 Whitedragon]

Timukas - 22.12.2010 11:43

Suunamise puhul pead tõesti sessioone kasutama. Selle kohta uurinud küll pole, aga minu arust igati hea lahendus - küpsised on nüüd vist küll igaühel sisse lülitatud, kasutaja näeb oma vead kenasti ja sina ei pea kartma, et refreshiga midagi ära rikutakse.

Kui vaja, et koodi hilisemas osas enam seda POST väärtust ei eksisteeriks, siis kasuta ikka unset-i. Väikeste parandustega:
Kood:
if (!empty($_POST['nupp'])) { //empty kontrollib kohe, kas muutuja on olemas ja ega ta tühi ei ole var_dump($_POST['nupp']); //väljastab nupu väärtuse //Muu kood vormiga unset($_POST['nupp']); } var_dump(empty($_POST['nupp'])); //väljastab true (ehk muutujat kas ei eksisteeri või on ta tühi)


Kui tahad vaadata, kas muutuja on olemas (vahet pole, kas tühi või mitte), siis kasuta isset-i.

andrusny - 22.12.2010 19:41

Ise olen vigade logi pannud headriga kaasa.

Kood:
if(isset($_POST['nupp'])){ $sisu = $_POST['sisu']; if($sisu == ""){$viga = "Sisu puiudub";} else {$viga ="Kõik on korras";} header('Location: ?viga='.$viga); } if(isset($_GET['viga']){echo $_GET['viga'];}

Whitedragon - 22.12.2010 21:14

huvitav.... saan vastuseks....
esimesel korral:
NULL
teisel korral:
bool(true)
ning ikkagi jätab ta selle mällu (ei kasuta header() funksiooni..)

[Muudetud: 22.12.2010 Whitedragon]

Timukas - 22.12.2010 21:42

Niimoodi kirjutas: Whitedragon  
huvitav.... saan vastuseks....
esimesel korral:
NULL
teisel korral:
bool(true)

Mille vastuseks?

Niimoodi kirjutas: Whitedragon  
ning ikkagi jätab ta selle mällu (ei kasuta header() funksiooni..)

Mällu jätmise all mõtled mida? Et unset ei tööta ehk selline kood prindib "tere"?
Kood:
<?php $muutuja = 'tere'; unset($muutuja); echo $muutuja; ?>


andrusny - 22.12.2010 22:39


ning ikkagi jätab ta selle mällu (ei kasuta header() funksiooni..)


Ma sain aru, et kui keegi vormiga andmeid saadab ja refreshi vajutab, siis ta ei taha, et vorm uuesti ära saadetakse (submit-itakse). Unsetiga sellist asja ei tee.




[Muudetud: 22.12.2010 andrusny]