miffmedia.com

Zadnje pisano

PHP primer: Obrada podataka iz forme

Send form

...i slanje istih na e-mail :)

 

Ovako je izgledao poziv za pomoć:

Kako da napravim box na nekoj strani, koji treba da sluzi kao neka prijava za letter? Treba da ima polje gde ce neko da upise svoj mail i submit dugme. Kad uneses adresu i kliknes na dugme, na moj mail account treba da stigne mail da si se prijavio i podaci koje si uneo odnosno tvoja mail adresa

 

Prijatelj je u velikoj nevolji i koštaće ga pet minuta čitanja i još toliko za copy/paste koda.

 

Pre svega, napraviti fajl na serveru forma.php (ili po želji kako god).

PHP

$to = 'user@server.com';//~ Osoba koja treba da primi mail
	$subject = 'Poruka sa server - Lorem ipsum dolar';
	if(isset($_POST['email']) && !empty($_POST['email'])) {
		$msg = 'Prosledjen je ovaj podatak: ' . $_POST['email'];
		if(mail($to, $subject, $msg)) {
			header('Location:http://localhost/hvala.html');//~ URL adresa stranice na kojoj se nalazi poruka o uspesnom slanju ili sl.
		} else {
			header('Location:http://localhost/greska.html');//~ URL adresa stranice na kojoj se nalazi poruka o neuspesnom slanju.
		}
	}

 

Poprilčno je sve ostavljeno u komentarima, promenljivu $to treba podesiti sa ispravnom email adreso (ako želimo da stvarno stiže na mail), $subject je suvišno napominjati ali i on bi trebalo na nešto prikladnije vrednosti da se setuje.

Bitna stvar je da treba obratiti pažnju na deo gde se odvija redirekcija, odnosno treba postaviti prave adrese umesto ovoga Location:http://localhost/hvala.html, pa bi u nekom slucaj bilo ispravno upisati Location:http://miffmedia.com/hvala.html.

HTML

<div class="box">
	<form method="post" action="forma.php">
		<label for="email">Upisi E-mail adresu</label><br />
		<input type="text" value="" name="email" id="email" /><br />
		<button>Posalji</button>
	</form>
</div>

 

Ovde je sve samo po sebi rečeno.

PHP Kalkulator

Iskreno, PHP kalkulator? Ali evo ga, ako neko smatra da je ovo super vežba iz koje će neko nešto naučiti meni je drago.

PHP Kalkulator

HTML

<html>
	<head>
		<title>PHP Kalkulator | miff blog</title>
	</head>
	<body>
		<h1>PHP Kalkulator</h1>
		<?php echo $err;?>
		<form method="post" action="">
			<input type="text" name="prviBroj" value="<?php echo $prvi_broj;?>" size="4"/>
			<select name="znak">
				<option <?php if($znak == '+') echo 'selected="selected" ';?>value="+"> + </option>
				<option <?php if($znak == '-') echo 'selected="selected" ';?>value="-"> - </option>
				<option <?php if($znak == '/') echo 'selected="selected" ';?>value="/"> / </option>
				<option <?php if($znak == '*') echo 'selected="selected" ';?>value="*"> * </option>
			</select>
			<input type="text" name="drugiBroj" value="<?php echo $drugi_broj;?>" size="4"/>
			= <?php echo $rezultat;?>
			<br />
			<input type="submit" value=" = " />
			<input onclick="location.href='cal.php'" type="button" value=" C " />
		</form>
	</body>
</html>

Ako pogledate samo HTML, to je jedna obična forma i opet je namerno izostavljena vrednost atributa action, par uslova za proveru select polja, uglavnom jako jednostavno.

PHP

<?php
	$prvi_broj = $_REQUEST['prviBroj'];
	$drugi_broj = $_REQUEST['drugiBroj'];
	$znak = $_REQUEST['znak'];
	$err = '';
	// Ovde mozete dalje proveravati deljenje sa nulom itd....
	if(!$prvi_broj) $err .= 'Morate upisati neki broj u prvo polje<br />';
	if(!$drugi_broj) $err .= 'Morate upisati neki broj u drugo polje<br />';
	if($err == ''){
		// Nema greske, idemo na racunanje - jeeeeiii
		switch ($znak) {
			case '+':
				$rezultat = $prvi_broj + $drugi_broj;
				break;
			case '-':
				$rezultat = $prvi_broj - $drugi_broj;
				break;
			case '/':
				$rezultat = $prvi_broj / $drugi_broj;
				break;
			case '*':
				$rezultat = $prvi_broj * $drugi_broj;
				break;
		}
	}
?>

U PHP kodu (postavljen je u vrhu pre html taga) prva tri reda primaju vrednosti iz forme, $err varijabla se dekleriše i pokreće se provera: da li je korisnik uneo prvo polje; da li je uneo drugo polje. Slobodno dodajte svoju proveru ovde.

U principu komanda switch odradi ceo posao.

 

Live primer: PHP kalulator.

PHP primeri deo IV - Aplikacija ima mogućnost unosa, brisanja i ažuriranja korisnika

Ovo je poslednji članak u nizu o pojmu CRUD i anomalijama baze. Napomenuću, postoje tri anomalije baze podataka, INSERT, DELET i UPDATE anomalije. Nama je ostalo još da objasnimo UPDATE i imaćemo `kompletnu` aplikaciju za upravljanje korisnicima :).

crud 4

 

Najbrže i najjednostavnije: kopirati fajl korisnici-dodaj.php u korisnici-menjaj.php, i izvršimo par izmena.

PHP ( & HTML )

<?php
	include('conf.php');
	$id = $_REQUEST['id'];
	$submit = $_POST['submit'];
	if($submit){
		if(!$id) {
			// Ne zelim da iko tu bude ako nema id
			header('Location: http://localhost/korisnici.php');
			die();
		}
		$username = $_POST['username'];
		$password = $_POST['password'];
		$email = $_POST['email'];
		$sql = mysql_query("UPDATE korisnici SET `username` = '$username', `password` = '$password', `email` = '$email' WHERE id = $id");
		echo 'Korisnik <strong>'.$username.'</strong> je uspesno izmenjen';
	}
	$q = mysql_query("SELECT * FROM korisnici WHERE id = $id");
	$row = mysql_fetch_assoc($q);

?>
<html>
	<head>
		<title>Aplikacija - Unos i Modifikacija</title>
	</head>
	<body>
		<ul>
			<li><a href="korisnici.php">Lista korisnika</a></li>
			<li><a href="korisnici-dodaj.php">Dodaj korisnika</a></li>
		</ul>
		<hr />
		<form method="post" action="">
			Korisnicko ime:<br />
			<input type="text" name="username" value="<?php echo $row['username'];?>" /><!-- Dobra praksa je da naziv polja bude isti kao i u bazi --><br />
			Sifra<br />
			<input type="password" name="password" value="<?php echo $row['password'];?>" /><br />
			Email<br />
			<input type="text" name="email" value="<?php echo $row['email'];?>" /><br />
			<input type="submit" value="Sacuvaj" name="submit" />
		</form>
	</body>
</html>
<?php
	// Zatvaramo konekciju ka bazi
	mysql_close($conn);
?>

 

Kako nam je za UPDATE potreban ključ dodajemo red REQUEST id, u HTML formi namerno brišemo action atribut, ovim postižemo malu stvar - prosleđujemo formu sa istim URL-om.

Ako je forma prosleđena (linija 5) prvo proveravamo $id, SQL upit je sada prepravljen u UPDATE i dodat je uslov WHERE na kraju, uprotivnom sve zapise u tabeli bi promenili da nije WHERE id uslova.

Dodat je još jedan upit (linija 17), SELECT objašnjava sve :).

Primetićete da je u input polja u atribut value dodat echo koji ispisuje ekvivalentna polja iz baze.

 

I evo je, kompletna aplikacija koja ima mogućnost unosa, brisanja, ažuriranja i pregled podataka iz baze.

PHP primeri deo III - Aplikacija ima mogućnost unosa, brisanja i ažuriranja korisnika

Treći deo se odnosi na brisanje (DELETE) podataka iz baze, i vemo brzo i jednostavno se dolazi do ove funkcionalnosti, svega 5 linije koda :).

CRUD 3

Prethodni primer CREATE se nalazi ovde, dok je privi deo o planiranju CRUD aplikacije ovde

PHP

<?php 
	$id = $_REQUEST['id'];
	if($id){
		include('conf.php');
		mysql_query("DELETE FROM korisnici WHERE id = $id");
	}
	header('Location: http://localhost/korisnici.php');
?>

Najbitniju stvar ($id) pokupimo iz URL-a, ako slučajno neko unese samo localhost/korisnici-brisi.php bez ?id dela, vratićemo ga nazad jer niko ne želi da vidi ispisane greške, za takve stvari treba fino napisati kod, dizajnirati i upakovati svaku grešku ali to sada nije tema. Dakle ustanovljeno je šta treba obrisati te stoga mysql_query izvršava DELETE komandu. Zadnja linija gde stoji komanda header, uvek će poslati korisnika aplikacije nazad na listu, bez obzira da li postoji id ili ne, bitno je da smo obrisali zapis i vrati li se na naš listing.

 

Da napomenem da bi možda bilo zgodno a i korisno, postavljanje onclick koda u linku za brisanje koji bi pitao da li stvarno želimo da se ova akcija izvrši, te stoga u fajlu korisnici.php, 35 linija posle <a a pre title atributa upisati ovo:

onclick="return confirm('Ozbiljno misliš da obrišeš ovog korisnika?');"

PHP primeri deo II - Aplikacija ima mogućnost unosa, brisanja i ažuriranja korisnika

Drugi deo ovog tutorijala sadržaće CREATE  zapisa u bazi. Ili jednostavno rečeno nastavljamo dalje, dodajemo mogućnost kreiranja sadržaja.crud 2

Ko je propustio prvi deo, link je CRUD osnove pa nastaviti ovde.

PHP ( & HTML)

<?php
	include('conf.php');
	$submit = $_POST['submit'];
	if($submit){
		$username = $_POST['username'];
		$password = $_POST['password'];
		$email = $_POST['email'];
		$sql = mysql_query("INSERT INTO korisnici SET `username` = '$username', `password` = '$password', `email` = '$password'");
		echo 'Uspesno unesen korisnik <strong>'.$username.'</strong>';
	}
?>
<html>
	<head>
		<title>Aplikacija - Unos i Modifikacija</title>
	</head>
	<body>
		<ul>
			<li><a href="korisnici.php">Lista korisnika</a></li>
			<li><a href="korisnici-dodaj.php">Dodaj korisnika</a></li>
		</ul>
		<hr />
		<form method="post" action="korisnici-dodaj.php">
			Korisnicko ime:<br />
			<input type="text" name="username" value="" /><!-- Dobra praksa je da naziv polja bude isti kao i u bazi --><br />
			Sifra<br />
			<input type="password" name="password" value="" /><br />
			Email<br />
			<input type="text" name="email" value="" /><br />
			<input type="submit" value="Sacuvaj" name="submit" />
		</form>
	</body>
</html>
<?php
	// Zatvaramo konekciju ka bazi
	mysql_close($conn);
?>

Prvi PHP red include povlači konekciju (config.php), uslov proverava da li je forma poslata ako jeste upisuje u bazu a ako nije nastavlja dalje tj čeka se unosč reakcija. U ovom trenutku je dobro razmisliti o proveri podataka, veliki sigurosni rizik je pustiti podatke tek tako u bazu, da li je mail ispravno upisan itd. ovo nije tema ali je dobro razmišljati na vreme ;).

 

Iskustvo je pokazalo da je najbolja praksa da se imena u poljima za unos dodeljuje ista vrednost kao i u bazi, kao što je u primeru prikazano input name="username" type="text" u tabeli je takođe username.