Temos pavadinimas: WordPress, Shopify ir PHPFusion programuotojų bendruomenė :: Dėl PHP kodo.

Parašė Pakartoti slaptažodį· 2014 Kov. 1 02:03:08
#2

oooi žinok viską labai sunkiai ir keistai darai, jau vien pradžioj nebesuprantama...


<?php
if (isset($_POST['submit'])) {
	if (empty($_POST['nick']) || empty($_POST['name'])) {
		echo 'Klaida, būtina užpildyti visus laukelius';
	} else {
		$o = fopen('duomenys.txt', 'w');
		fwrite($o, $_POST['nick'].' | '.$_POST['name'].' | '.$_POST['age']);
		fclose($o);
		echo 'Jūsų duomenys sėkmingai įrašyti.';
	}
} else {
	echo '<strong>Anketa</strong><br /><br />
	<form action="" method="post">
		Slapyvardis: <input name="nick" type="text" /><br />
		Vardas: <input name="name" type="text" /><br />
		Amžius: <input name="age" type="number" min="1" max="99" /><br /><br />
		<input type="submit" name="submit" value="Išsiųsti" />
	</form>';
}
?>


taigi, truputį perrašiau tavo programą paprastesniu būdu, netikrinau, negarantuoju
visų pirma, atsisakėme GET puslapiavimo, kadangi čia vienas formos puslapis, jis turės dvi instancijas - arba forma išsiųsta, arba ne, tad visų pirma tikrinam ar mūsų forma išsiųsta, ar POST gavo submit reikšmę. kaip matom mūsų Išsiųsti mygtukas kaip tik turi submit reikšmę, jį paspaudus vykdomi tolimesni veiksmai. tikrinam ar vartotojas nepaliko tuščių laukelių.

tavo variantas yra netinkamas ne vien dėl to jog galima tam naudoti atitinkamą funkciją, tačiau ir iš loginės pusės. įsivaizduok jog vartotojas neįvedė nieko ir išsiuntė formą, taip, tavo variantas suveiks nes reikšmė tuščia, tačiau jei vartotojas panorės pagudrauti ir įves tarpą, o tarpas jau yra simbolis (" "), tad jis lengvai apeis tavo apsaugą. funkcija empty() tą numato, todėl galima ja pasikliauti.

iš patikrinimo išėmiau amžiaus kintamąjį, nes jį pakeičiau html5 standartu, vartotojas tiesiog privalės pasirinkti kažkokį tai amžių, tu net gali nurodyti rėžius (nuo 1 iki 99 aš palikau). kitaip sakant tuščia reikšmė neįmanoma...

aišku čia naudoji failų įrašymą, tačiau tai labiau mokymosi tikslams, kai kursi sistemas atviras ir prieinamas visiems, naudoji mysql duomenų bazes ir ten bus dar daugiau tikrinimų, ne tik dėl tuštumo, tačiau dėl ir netinkamų ženklų. tavo preg_replace filtrą išėmiau paprastumo ir supratingumo dėlei.

taigi, jei tikrinime randam pažeidimų, parodom tai ekrane, o jei ne vykdom įrašymą į failą. čia viskas tvarkoj, tik sutrumpinam kintamųjų pavadinimus, verčiau naudoti tikslius, trumpus ir angliškus pavadinimus, bent jau rekomenduočiau, tačiau žinoma spręsti paliksim tai tau.. atkreipk dėmesį į šią eilutę fwrite($o, $_POST['nick'].' | '.$_POST['name'].' | '.$_POST['age']); štai taip php sintaksė turėtų atrodyt, čia naujokai daro nemažai klaidų, viena praleista apostrofa ir klaidos pasipila lyg iš gausybės rago..

taigi, sekanti instancija yra kai forma dar neišsiųsta, tiesiog ją atvaizduojam. čia action nėra nieko, nes veiksmas vyksta tame pačiame faile, nieko nenurodom, o metodas be abejo post, nes duomenis siųsti tarkim get'u negalima, get naudosim kai kursim kelių puslapių tinklalapį. kitas dalykas, tu pamiršai prie inputų prirašyti type="text" - o tai yra privaloma, nes taip nurodom mūsų įvesties tipą - paprastiems žodžiams tinka text, tačiau slaptažodžiams jau naudosim password (jis paslėps tekstą po žvaigždutėm), na ir mano naujai pristatytas number...

smulkmenos: <br> būtinai keičiam į <br />, nes tai teisingas žymėjimas. visos html žymės kurios neturi uždaromosios turi būti su tokia pabaiga (<input /> užbaigei teisingai). php naudojam viengubus apostrafus ' nes jie vykdomi greičiau už dvigubus " (aišku čia nanosekundžių reikalas, sunkiai juntama realiai), o html'e tiktai dvigubi ", nes tai yra teisingas (valid'us) žymėjimas.

na va, tikrai nepatingėjau pravesti šiokią tokią pamoką, sorri jei kažką labai aiškiai paaiškinau kaip visiškai žaliam, nenoriu įžeist, tiesiog mėgstu detales ir išsiplėsti. tiesiog man patiko kaip pats stengiesi tobulėti, matosi nuoširdus siekis išmokti. ir tau būtinai pavyks, geriau už bet kokias youtubes yra paklausti čia, visada sulauksi pagalbos...

sėkmės ;)

Redagavo Pakartoti slaptažodį· 2014 Kov. 1 16:03:49