<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ACCES INTERZIS</title>
	<atom:link href="http://www.accesinterzis.ro/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.accesinterzis.ro</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 11 Mar 2010 11:21:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Cum fac un formular de upload in PHP?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-upload-in-php/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-upload-in-php/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 19:42:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=369</guid>
		<description><![CDATA[Scriptul PHP din spatele acestui formular de upload:

rezolva problema spatiilor goale din numele imaginii
restrictioneaza numarul maxim de caractere al numelui imaginii  si ce tip de caractere poate sa contina numele imaginii
permite utilizatorului sa uploadeze doar imagini (celelalte tipuri de fisiere, posibil malitioase, cum ar fi fisiere executabile, fisiere .php, fisiere .js nu pot fi urcate)
specifica ce tipuri [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/' rel='bookmark' title='Permanent Link: Cum extrag extensia unui fisier?'>Cum extrag extensia unui fisier?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Scriptul PHP din spatele acestui <a title="Cum fac un formular de upload?" href="http://www.accesinterzis.ro/myportofolio/uploadform/uf-v.1.0.php" target="_blank">formular de upload</a>:</p>
<ul>
<li>rezolva problema spatiilor goale din numele imaginii</li>
<li>restrictioneaza numarul maxim de caractere al numelui imaginii  si ce tip de caractere poate sa contina numele imaginii</li>
<li>permite utilizatorului sa uploadeze doar imagini (celelalte tipuri de fisiere, posibil malitioase, cum ar fi fisiere executabile, fisiere .php, fisiere .js nu pot fi urcate)</li>
<li>specifica ce tipuri de imagini pot fi uploadate (.jpg, .jpeg, .gif, .png)</li>
<li>restrictioneaza marimea maxima a imaginii</li>
<li>restrictioneaza latimea pe care o poate avea imaginea</li>
<li>restrictioneaza inaltimea pe care o poate avea imaginea</li>
<li>verifica daca folderul <strong>images</strong> exista pe server (daca nu exista il creaza)</li>
<li>verifica daca mai exista in folderul <strong>images</strong> inca o imagine cu acelasi nume</li>
<li>numeroteaza <strong>dinamic</strong> fiecare imagine uploadata (trebuie sa dam permisiile <span style="color: #ff0000;"><strong>0777</strong></span> folderului <strong>images</strong> ca scriptul PHP sa il poata citi)</li>
<li>schimba numele imaginii uploadate pe server</li>
</ul>
<p><span id="more-369"></span><br />
<strong>uf-v.1.0.php</strong></p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum fac un formular de upload in PHP?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
if (isset($_POST['upload'])) {
	/*
	Rezolv problema spatiilor goale din numele imaginii.
	*/
	#2
	$filename = trim($_FILES['userfile']['name']);
	$filename = str_replace(' ', '_', $filename);

	#3
	if (empty($filename)) {
		$error_message = 'You didn\'t enter any file.';
	} else {
		#3.1
		if (strlen($filename) &gt; 30) {
			$error_message = 'The filename must have up to 30 characters.';
		} else {
			#3.2
			if (!preg_match('/^[a-z0-9._-]+\.[a-z]{2,4}$/i', $filename)) {
				$error_message = 'The filename isn\'t valid.';
			} else {
				/*
				Verific daca fisierul este o imagine. Content-type-ul unei imaginii este o
				valoare de genul image/jpeg, image/pjpeg, image/gif, image/png.
				*/
				#3.3
				if (!preg_match('/^image\//', $_FILES['userfile']['type'])) {
					$error_message = 'You are allowed to upload only images.';
				} else {
					/*
					Functia PHP getimagesize() ma asigura 100% ca ceea ce urca utilizatorul
					e o imagine si nimic altceva.
					*/
					#3.4
					$properties = getimagesize($_FILES['userfile']['tmp_name']);
					if ($properties == false) {
						$error_message = 'The file isn\'t an image.';
					} else {
						/*
						Specific tipurile de imagini care pot fi urcate pe server.
						*/
						$allowed_extensions = array('.jpg', '.jpeg', '.gif', '.png');

						$extension = substr($filename, strrpos($filename,'.'), 100);
						$extension = strtolower($extension);

						#3.5
						if (!in_array($extension, $allowed_extensions)) {
							$error_message = 'You aren\'t allowed to upload &lt;strong&gt;'.$extension.'&lt;/strong&gt; files.';
						} else {
							/***/
							/*
							Imaginea poate avea maxim 100 kb.
							*/
							#3.6
							if (($_FILES['userfile']['size']/1024) &gt; 100) {
								$error_message = 'The file can have up to &lt;strong&gt;100 kb&lt;/strong&gt;.';
							} else {
								/*
								Restrictionez latimea pe care imaginea o poate avea.
								*/
								#3.7
								if ($properties[0] &gt; 100) {
									$error_message = 'The width must be up to 100px.';
								} else {
									/*
									Restrictionez inaltimea pe care imaginea o poate avea.
									*/
									#3.8
									if ($properties[1] &gt; 100) {
										$error_message = 'The height must be up to 100px.';
									} else {
										/*
										Daca folderul &quot;images&quot; nu exista pe server atunci il creez.
										*/
										#3.9
										if (!is_dir('images')) {
											mkdir('images', 0777);
										}

										#3.10
										if (file_exists('images/'.$filename)) {
											$error_message = 'The file &lt;strong&gt;'.$filename.'&lt;/strong&gt; already exists.';
										} else {
											/*
											Acum ca m-am asigurat ca ceea ce vrea utilizatorul sa urce este o imagine si nu altceva
											si acea imagine nu exista deja pe server, pot urca linistit imaginea de pe PC-ul utilizatorului
											pe serverul de hosting. Din motive de securitate schimb numele initial al imaginii utilizatorului.
											Noul nume este generat aleatoriu.
											*/
											#3.11
											$alphabet = 'abcdefghijklmnoprqstuvxyz';
											$new_fn = '';
											for ($i = 0; $i &lt; 10; $i++) {
												$new_fn .= substr($alphabet, rand(0,strlen($alphabet) - 1), 1);
											}

											#3.12
											if (substr(sprintf('%o', fileperms('images')), -4) != 777) {
												$error_message = 'The folder has not the right permissions to read it.';
											} else {
												$count = 0;

												$open = opendir ('images');

												while ($image_name = readdir($open)) {
													//. reprezinta folderul curent iar .. reprezinta folderul anterior
													if ($image_name != '.' &amp;&amp; $image_name != '..') {
														$image_extension = substr($image_name, strpos($image_name,'.'),100);
														$image_extension = strtolower($image_extension);

														if (in_array($image_extension,$allowed_extensions)) {
															$count++;
														}
													}
												}

												#3.13
												if (move_uploaded_file($_FILES['userfile']['tmp_name'], 'images/'.($count + 1).'_'.$new_fn.$extension)) {
													$confirmation = 'The file &lt;strong&gt;'.$filename.'&lt;/strong&gt; was succesfully uploaded.';
												} else {
													$confirmation = 'Something is wrong with the server.';
												}
											}
										}
									}
								}
							}
							/***/
						}
					}
				}
			}
		}
	}
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How do I make a upload form?&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a upload form?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;upload,form,php,script,image,file&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a upload form?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE UPLOAD*/

form#upload_form {
	width:240px;
	margin:10px auto;
}

form#upload_form div {
	margin:0 0 5px 0;
}

form#upload_form input#upload {
	width:auto;
	color:#FFF;
	background-color:#333;
	border:1px #000 solid !important;
	cursor:pointer;
}

form#upload_form input#upload:hover {
	color:#333;
	background-color:#fff;
	border:1px #333 solid;
}

/*Inceput - stilurile erorilor*/
form#upload_form p {
	color:#c00;
	padding:0 0 5px 0;
	font-size:10px;
	text-align:left;
}
/*Sfarsit - stilurile erorilor*/

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE UPLOAD*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form action=&quot;&lt;?php echo htmlentities(strip_tags('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8'); ?&gt;&quot; method=&quot;post&quot; id=&quot;upload_form&quot; enctype=&quot;multipart/form-data&quot;&gt;

	&lt;?php if ($confirmation) echo '&lt;p&gt;'.$confirmation.'&lt;/p&gt;'; ?&gt;
	&lt;?php if ($error_message) echo '&lt;p&gt;'.$error_message.'&lt;/p&gt;'; ?&gt;

	&lt;div&gt;
		&lt;input name=&quot;userfile&quot; type=&quot;file&quot; value=&quot;ABC&quot; id=&quot;userfile&quot; /&gt;
	&lt;/div&gt;

	&lt;div&gt;
		&lt;input name=&quot;upload&quot; type=&quot;submit&quot; id=&quot;upload&quot; value=&quot;upload&quot; /&gt;
	&lt;/div&gt;
&lt;/form&gt;
&lt;?php echo $count.' sadf safsa'; ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pentru o mai buna organizare a codului este indicat ca scriptul PHP de deasupra DOCTYPE-ului, care verifica daca fisierul este o imagine (valida) si urca imaginea de pe PC-ul utilizatorului pe server, sa se bage intr-un fisier include si sa fie apelat prin functia PHP include().</p>
<pre class="brush: php;">
&lt;?php @include('includes/upload_file.inc.php'); ?&gt;
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+upload+in+PHP%3F+http://ciim6.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+upload+in+PHP%3F+http://ciim6.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/' rel='bookmark' title='Permanent Link: Cum extrag extensia unui fisier?'>Cum extrag extensia unui fisier?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-upload-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum afisez continutul unui site in mai multe limbi folosind PHP?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-afisez-continutul-unui-site-in-mai-multe-limbi-folosind-php/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-afisez-continutul-unui-site-in-mai-multe-limbi-folosind-php/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:53:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=363</guid>
		<description><![CDATA[Am vazut pe net multe siteuri cu continutul prezentat in mai multe limbi. Ceea ce este un lucru bun si imbucarator. Gresita, sau cel putin grosiera, era modalitatea de realiza acest lucru si anume se crea pentru fiecare limba in parte un folder nou in care se stocau fisierele ce alcatuiesc websiteul. Acest lucru are [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-restrictionez-accesul-la-continutul-paginii-mele-web-phpinfo-php/' rel='bookmark' title='Permanent Link: Cum restrictionez accesul la continutul paginii mele web phpinfo.php?'>Cum restrictionez accesul la continutul paginii mele web phpinfo.php?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Am vazut pe net multe siteuri cu continutul prezentat in mai multe limbi. Ceea ce este un lucru bun si imbucarator. Gresita, sau cel putin grosiera, era modalitatea de realiza acest lucru si anume se crea pentru fiecare limba in parte un folder nou in care se stocau fisierele ce alcatuiesc websiteul. Acest lucru are multiple dezavantaje:</p>
<ul>
<li>se ocupa inutil spatiu pe server</li>
<li>se pierde timp mult atunci cand clientul cere o modificare sau un update</li>
<li>iti dai cu firma in cap daca codezi in stilul asta websiteurile</li>
</ul>
<p>De aceea voi prezenta mai jos <a title="Cum afisez continutul unui website in mai multe limbi?" href="http://www.accesinterzis.ro/myportofolio/mlwebsite/mlwebsite.php" target="_blank">o tehnica de a genera continutul unui website</a> mult mai elegant folosindu-ma de limbajul de scripting server-side PHP.</p>
<p>Folosind aceasta tehnica websiteul este indexat de catre motoarele de cautare (Google, Yahoo, Bing, Ask.com) in toate limbile in care este afisat continutul (engleza, romana, franceza, germana, italiana, spaniola etc.). Scriptul PHP genereaza in toate limbile pana si titlul si metadatele paginii.</p>
<p><span id="more-363"></span></p>
<p><strong>mlwebsite.php</strong> &#8211; pagina principala a websiteului</p>
<pre class="brush: php;">
&lt;?php
#1
@include('includes/choose_lang.inc.php');

#2
@include('langs/'.$lang.'.php');
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;?php echo $home_seo['title']; ?&gt;&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;&lt;?php echo $home_seo['description']; ?&gt;&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;&lt;?php echo $home_seo['keywords']; ?&gt;&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;&lt;?php echo $home_seo['abstract']; ?&gt;&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;link href=&quot;css/mlwebsite.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;

&lt;/head&gt;

&lt;body&gt;
&lt;?php include('includes/langs_menu.inc.php'); ?&gt;

&lt;div id=&quot;main&quot;&gt;
	&lt;?php include('includes/header.inc.php'); ?&gt;

	&lt;ul id=&quot;left_side&quot;&gt;
		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['html_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['html_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;

		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['css_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['css_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;

		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['js_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['js_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;

	&lt;ul id=&quot;right_side&quot;&gt;
		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['php_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['php_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;

		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['mysql_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['mysql_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;

		&lt;li&gt;
			&lt;h2&gt;&lt;?php echo $home_content['xml_title']; ?&gt;&lt;/h2&gt;
			&lt;p&gt;&lt;?php echo $home_content['xml_description']; ?&gt;&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;

	&lt;?php include('includes/footer.inc.php'); ?&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Am apelat in fisier cateva surse externe:<br />
<strong>choose_lang.inc.php</strong> &#8211; fisierul care stabileste in ce limba se va afisa continutul siteului</p>
<pre class="brush: php;">
&lt;?php
/*
Specific limba default in care va fi afisat continutul websiteului.
*/
if (!isset($_GET['lang'])) {
	$lang = 'en';
} else {
	#1.1
	/*
	Si validez valorile ce se transmit prin URL. Valoarea trebuie sa contina 2 litere.
	Daca nu se indeplineste aceasta conditie inseamna ca ceva e dubios si afisam continutul
	in limba default adica limba engleza.
	*/
	$lang = trim($_GET['lang']);

	if (!preg_match('/^[a-z]{2}$/', $lang)) {
		$lang = 'en';
	}
}
?&gt;
</pre>
<p><strong>ro.php</strong> &#8211; fisierul in care se afla continutul siteului in limba romana. Fisierul <strong>en.php</strong> este identic cu <strong>ro.php</strong>. Doar traducerea continutului difera. <strong><span style="color: #cc0000;">Atentie!</span></strong> Cheile array-urilor nu se traduc. Doar valorile se traduc. Aceste fisiere se afla in folderul <strong>langs</strong> din root-ul websiteului. Daca vrem sa adaugam inca o limba, de exemplu limba franceza, nu trebuie decat sa cream un fisier <strong>fr.php</strong> in care vom baga continutul websiteului in limba franceza.</p>
<pre class="brush: php;">
&lt;?php
$common_content = array(
'en_flag' =&gt; 'Engleza',
'ro_flag' =&gt; 'Romana',
'header' =&gt; 'Ce limbaje trebuie sa stiu ca sa dezvolt aplicatii web?',
'copyright' =&gt; 'Site dezvoltat de &lt;a href=&quot;http://www.accesinterzis.ro&quot;
				title=&quot;Programare | Web development | Web design | securitate IT | SEO&quot;
				target=&quot;_blank&quot;&gt;www.accesinterzis.ro&lt;/a&gt; &amp;copy; 2010. Toate drepturile rezervate.'
);

if (basename($_SERVER['PHP_SELF']) == 'mlwebsite.php') {
	$home_seo = array(
		'title' =&gt; 'Cum fac un website multilingvistic?',
		'description' =&gt; 'Acest script PHP prezinta continutul unui website in mai multe limbi.',
		'keywords' =&gt; 'limbi,php,website,romana,engleza,italiana',
		'abstract' =&gt; 'Acest script PHP prezinta continutul unui website in mai multe limbi.'
	);

	$home_content = array (
	'html_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Limbaj de marcaj a hypertextului&quot;&gt;HTML&lt;/a&gt;',
	'html_description' =&gt; 'HTML este o forma de marcare orientata catre prezentarea documentelor text pe o singura pagina, utilizand
					   un software de redare specializat, numit agent utilizator HTML, cel mai bun exemplu de astfel de software
					   fiind browserul web. HTML furnizeaza mijloacele prin care continutul unui document poate fi adnotat cu diverse
					   tipuri de metadate si indicatii de redare. Indicatiile de redare pot varia de la decoratiuni minore ale textului,
					   cum ar fi specificarea faptului ca un anumit cuvant trebuie subliniat sau ca o imagine trebuie introdusa, pana la
					   scripturi sofisticate....
					   &lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;',

	'css_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Foi de stil in cascada&quot;&gt;CSS&lt;/a&gt;',
	'css_description' =&gt; 'CSS este destinat in primul rand pentru a permite separarea continutului documentului (scrise in HTML sau un limbaj
					  de markup similare) de la prezentarea document, inclusiv elemente, cum ar fi structura, culori si fonturi.
					  Aceasta separare se poate imbunatati continutul de accesibilitate, sa asigure o mai mare flexibilitate si de control
					  in caietul de sarcini al caracteristicilor de prezentare, permite mai multe paginila formatarea parts, si de a reduce
					  complexitatea si repetitia in continutul structurale...
					  &lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;',

	'js_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Limbaj de scripting client-side&quot;&gt;Javascript&lt;/a&gt;',
	'js_description' =&gt; 'JavaScript este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor. Este folosit mai ales
					 pentru introducerea unor functionalitati in paginile web, codul Javascript din aceste pagini fiind rulat de catre browser.
					 Limbajul este binecunoscut pentru folosirea sa in construirea siturilor web, dar este folosit si pentru acesul la obiecte
					 incastrate (embedded objects) in alte aplicatii. A fost dezvoltat initial de catre Brendan Eich de la Netscape
					 Communications Corporation sub numele de Mocha, apoi LiveScript, si denumit in final JavaScript...
					 &lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;',

	'php_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Limbaj de scripting server-side&quot;&gt;PHP&lt;/a&gt;',
	'php_description' =&gt; 'PHP este un limbaj de programare. Numele PHP provine din limba engleza si este un acronim recursiv :
					  Php: Hypertext Preprocessor. Folosit initial pentru a produce pagini web dinamice, este folosit pe scara larga
					  in dezvoltarea paginilor si aplicatiilor web. Se foloseste in principal inglobat in codul HTML, dar incepand de
					  la versiunea 4.3.0 se poate folosi si in mod &quot;linie de comanda&quot; (CLI)...
					  &lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;',

	'mysql_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Limbaj de interogare a bazelor de date&quot;&gt;MySQL&lt;/a&gt;',
	'mysql_description' =&gt; 'Desi este folosit foarte des impreuna cu limbajul de programare PHP, cu MySQL se pot construi aplicatii in orice
						limbaj major. Exista multe scheme API disponibile pentru MySQL ce permit scrierea aplicatiilor in numeroase
						limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP,
						Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfata de tip ODBC denumita
						MyODBC permite altor limbaje de programare ce folosesc aceasta interfata, sa interactioneze cu bazele de date
						MySQL cum ar fi ASP sau Visual Basic...
						&lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;',

	'xml_title' =&gt; '&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;Limbaj extensibil de marcaj&quot;&gt;XML&lt;/a&gt;',
	'xml_description' =&gt; 'eXtensible Markup Language(XML) este un meta-limbaj de marcare recomandat de Consortiul Web pentru crearea de alte
					  limbaje de marcare, cum ar fi XHTML, RDF, RSS, MathML, SVG, OWL etc. Aceste limbaje formeaza familia de limbaje XML.
					  Meta-limbajul XML este o simplificare a limbajului SGML (din care se trage si HTML) si a fost proiectat in scopul
					  transferului de date intre aplicatii pe internet, descriere structura date. XML este acum si un model de stocare a
					  datelor nestructurate si semi-structurate in cadrul bazelor de date native XML....
					  &lt;br /&gt;&lt;a href=&quot;mlwebsite.php?lang='.$lang.'&quot; title=&quot;mai mult&quot;&gt;[mai mult]&lt;/a&gt;'
	);
}
?&gt;
</pre>
<p><strong>langs_menu.inc.php</strong> &#8211; fisierul care genereaza meniul de limbi</p>
<pre class="brush: php;">
&lt;ul id=&quot;langs&quot;&gt;
	&lt;?php
	$langs = array('ro', 'en');

	foreach ($langs as $item) {
		echo '&lt;li&gt;';
		echo '&lt;a href=&quot;http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?lang='.$item.'&quot; title=&quot;'.$common_content[$item.'_flag'].'&quot;&gt;';
		echo '&lt;img src=&quot;images/'.$item.'.gif&quot; alt=&quot;'.$item.'&quot; title=&quot;'.$common_content[$item.'_flag'].'&quot; /&gt;';
		echo '&lt;/a&gt;';
		echo '&lt;/li&gt;';
	}
	?&gt;
&lt;/ul&gt;
</pre>
<p><strong>header.inc.php</strong> &#8211; fisierul care contine headerul websiteului</p>
<pre class="brush: php;">
&lt;div id=&quot;header&quot;&gt;
	&lt;h1&gt;
		&lt;a href=&quot;mlwebsite.php?lang=&lt;?php echo $lang; ?&gt;&quot; title=&quot;&lt;?php echo $common_content['header']; ?&gt;&quot;&gt;&lt;?php echo $common_content['header']; ?&gt;&lt;/a&gt;
	&lt;/h1&gt;
&lt;/div&gt;
</pre>
<p><strong>footer.inc.php</strong> &#8211; fisierul care contine footerul websiteului</p>
<pre class="brush: php;">
&lt;div id=&quot;footer&quot;&gt;
	&lt;?php echo $common_content['copyright']; ?&gt;
&lt;/div&gt;
</pre>
<p>Toate fisierele apelate cu <strong>functia PHP include()</strong> contin bucati de cod comune tuturor paginilor. Astfel, editand un fisier include modificarea se face automat in toate paginile websiteului casting timp.</p>
<p>Descrierile limbajelor sunt luate de pe <a title="Wikipedia" href="http://ro.wikipedia.org/wiki/Pagina_principal%C4%83" target="_blank">Wikipedia</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+afisez+continutul+unui+site+in+mai+multe+limbi+folosind+PHP%3F+http://9knys.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+afisez+continutul+unui+site+in+mai+multe+limbi+folosind+PHP%3F+http://9knys.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-restrictionez-accesul-la-continutul-paginii-mele-web-phpinfo-php/' rel='bookmark' title='Permanent Link: Cum restrictionez accesul la continutul paginii mele web phpinfo.php?'>Cum restrictionez accesul la continutul paginii mele web phpinfo.php?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-afisez-continutul-unui-site-in-mai-multe-limbi-folosind-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cum restrictionez accesul la continutul paginii mele web phpinfo.php?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-restrictionez-accesul-la-continutul-paginii-mele-web-phpinfo-php/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-restrictionez-accesul-la-continutul-paginii-mele-web-phpinfo-php/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 11:25:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[securitate IT]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=364</guid>
		<description><![CDATA[De multe ori am avut nevoie sa rulez functia PHP phpinfo() ca sa aflu niste detalii legate de serverul web ce imi gazduieste fisierele. De aceea am facut o pagina phpinfo.php pe care o deschid oridecateori am nevoie sa aflu cate ceva despre setarile serverului.

&#60;?php
phpinfo();
?&#62;

Problema e ca accesul la continutul paginii nu este restrictionat. Oricine [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-afisez-continutul-unui-site-in-mai-multe-limbi-folosind-php/' rel='bookmark' title='Permanent Link: Cum afisez continutul unui site in mai multe limbi folosind PHP?'>Cum afisez continutul unui site in mai multe limbi folosind PHP?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>De multe ori am avut nevoie sa rulez functia PHP phpinfo() ca sa aflu niste detalii legate de serverul web ce imi gazduieste fisierele. De aceea am facut o pagina <a title="Cum restrictionez accesul la o pagina web?" href="http://www.accesinterzis.ro/myportofolio/phpinfo.php" target="_blank">phpinfo.php</a> pe care o deschid oridecateori am nevoie sa aflu cate ceva despre setarile serverului.</p>
<pre class="brush: php;">
&lt;?php
phpinfo();
?&gt;
</pre>
<p>Problema e ca accesul la continutul paginii nu este restrictionat. Oricine de pe intreg mapamond care are un PC conectat la Internet poate vedea continutul paginii mele. Ceea ce nu este prea indicat. Asadar, trebuie sa creez un sistem de autentificare care sa permita doar persoanelor autorizate sa vada continutul paginii. Acest sistem de autentificare este destul de simplu. Nu necesita un formular de login sau o baza de date. Ma folosesc doar de array-ul superglobal $_GET.</p>
<p><span id="more-364"></span></p>
<pre class="brush: php;">
&lt;?php
if ($_GET['pw'] != 'primavarapeinserate') {
	echo 'You are NOT allowed to view this page.';
	exit();
}

phpinfo();
?&gt;
</pre>
<p>Ca sa pot accesa continutul paginii trebuie sa scriu URL-ul astfel: <strong>http://www.accesinterzis.ro/myportofolio/phpinfo.php<span style="color: #cc0000;">?pw=primavarapeinserate</span></strong>.</p>
<p>Scriptul are doua mici dezavantaje:</p>
<ul>
<li>cel mai important dezavantaj e ca, desi am deschis pagina si pot vedea continutul,  parola ramane in URL si este vizibila (deci cineva din camera unde ma aflu o poate vedea)</li>
<li>al doilea dezavantaj e ca parola nu este validata cu toate ca nu prea e necesar acest lucru in acest context dar este un obicei bun de programare sa validam intotdeauna datele primite de la utilizator</li>
</ul>
<p>Deci, trebuie sa rescriu scriptul. Sa il imbunatatesc.</p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum restrictionez accesul la continutul paginii mele web phpinfo.php?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
session_start();

#2
if (!isset($_GET['pw'])) {
		#2.1
		if ($_SESSION['pw'] != sha1('primavarapeinserate')) {
			echo 'You are NOT allowed to view the content of this page.';
			exit();
		} else {
			#2.2
			if ($_GET['action']) {
				$action = trim($_GET['action']);

				if (!preg_match('/^[a-z]{6}$/', $action)) {
					echo 'Your action is wrong.';
					exit();
				} else {
					if ($action == 'logout') {
						$_SESSION = array();
						if (session_destroy() &amp;&amp; setcookie('PHPSESSID', '', time()-300, '/', '', 0)) {
							header('Location:http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
							exit();
						}
					}
				}
			}
		}
} else {
	#2.3
	$pw = trim($_GET['pw']);

	if (!preg_match('/^[a-zA-Z0-9]{5,30}$/', $pw)) {
		echo 'Your password is NOT valid.';
		exit();
	} else {
		if ($pw != 'primavarapeinserate') {
			echo 'Your password is wrong.';
			exit();
		} else {
			$_SESSION['pw'] = sha1($pw);
			header('Location:http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
		}
	}
}

#3
phpinfo();
?&gt;
</pre>
<p>Acum nu mai ramane decat sa punem scriptul de mai sus deasupra DOCTYPE-ului fiecarei paginii web pe care vrem sa o protejam de ochii curiosi. Am adaugat in script si functia de logout. Nu trebuie decat sa scriem URL-ul astfel: <strong>http://www.accesinterzis.ro/myportofolio/phpinfo.php<span style="color: #cc0000;">?action=logout</span></strong>.</p>
<p>Scriptul poate fi dezvoltat si mai mult si poate fi folosit ca <a title="Cum fac un formular de autentificare a utilizatorilor unei sectiunii de administrare?" href="http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/" target="_blank">sistem de autentificare a utilizatorilor unei sectiuni de administrare</a>. Diferenta dintre sistemul de login ce foloseste un formular HTML si acesta este ca in loc sa preiau datele de logare din array-ul superglobal $_POST, le preiau din array-ul superglobal $_GET.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+restrictionez+accesul+la+continutul+paginii+mele+web+phpinfo.php%3F+http://gm5w9.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+restrictionez+accesul+la+continutul+paginii+mele+web+phpinfo.php%3F+http://gm5w9.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-afisez-continutul-unui-site-in-mai-multe-limbi-folosind-php/' rel='bookmark' title='Permanent Link: Cum afisez continutul unui site in mai multe limbi folosind PHP?'>Cum afisez continutul unui site in mai multe limbi folosind PHP?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-restrictionez-accesul-la-continutul-paginii-mele-web-phpinfo-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum fac un formular de autentificare a utilizatorilor?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 18:54:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=246</guid>
		<description><![CDATA[Un website (website de prezentare, blog, forum, magazin online, portal) este alcatuit din doua parti:

frontend &#8211; este  partea publica a unui website unde se gaseste tot continutul lui (text, imagini, video, animatii Flash). Frontend-ul este destinat vizitatorilor. De exemplu, frontend-ul unui website de prezentare al unei firme este constituit din toate paginile sale cum ar [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Un website (website de prezentare, blog, forum, magazin online, portal) este alcatuit din doua parti:</p>
<ul>
<li><strong>frontend</strong> &#8211; este  partea publica a unui website unde se gaseste tot continutul lui (text, imagini, video, animatii Flash). Frontend-ul este destinat <strong>vizitatorilor</strong>. De exemplu, frontend-ul unui website de prezentare al unei firme este constituit din toate paginile sale cum ar fi pagina &#8220;Despre&#8221; (unde firma prezinta istoricul firmei si profilul de activitate al firmei), pagina &#8220;Portofoliu&#8221; (unde firma prezinta lucrarile realizate si proiectele in curs de realizare), pagina &#8220;Galerie&#8221; (unde vizitatorul gaseste o galerie de imagini cu produsele firmei), pagina &#8220;Contact&#8221; (unde vizitatorul poate intra in legatura cu detinatorii firmei) s.a.m.d..</li>
<li><strong>backend</strong> &#8211; este partea cu acces restrictionat din spatele websiteului pe care numai un numar limitat de <strong>utilizatori</strong> o pot accesa pe baza unei autentificari. Din backend se administreaza continutul de pe frontend si chiar se pot face modificari asupra designului, structurii si functionalitatii frontend-ului in sine. Spre deosebire de frontend, backend-ul nu trebuie sa fie indexat de motoarele de cautare (Google, Yahoo, Bing, Ask.com etc.). Ca sa evitam acest lucru vom scrie in fisierul robots.txt din folderul radacina a websiteului urmatoarele linii:
<pre class="brush: plain;">
User-agent: *
Disallow: /backend/
</pre>
</li>
</ul>
<p>In loc de termenul <strong>backend</strong> se mai folosesc termenii <strong>sectiune de administrare</strong> si <strong>CMS </strong>(de la Content Managment System &#8211; in limba engleza, Sistem de gestionare a continutului). Cand intalnim unul din acesti termeni trebuie sa stim ca se face referire la unul si acelasi lucru.</p>
<p>Ca sa restrictionam accesul la sectiunea de administrare <a title="Cum fac un formular de inregistrare a utilizatorilor unei sectiuni de administrare?" href="http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/" target="_blank">trebuie mai intai sa inregistram toti utilizatorii intr-o baza de date</a>. Apoi cream un <a title="Cum fac un formular de autentificare a utilizatorilor?" href="http://www.accesinterzis.ro/myportofolio/loginform.php" target="_blank">formular de autentificare</a> a utilizatorilor sectiunii de administrare si un tabel, numit <strong>ai_authentication_logs</strong>, in care vom inregistra loguri despre autentificarile facute.</p>
<pre class="brush: php;">
$q = &quot;CREATE TABLE IF NOT EXISTS ai_authentication_logs(
		authentication_log_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
		username VARCHAR(30) NOT NULL,
		password VARCHAR(40) NOT NULL,
		server_authentication_date DATETIME NOT NULL,
		client_authentication_date DATETIME NOT NULL,
		ip VARCHAR(30) NOT NULL,
		browser_os VARCHAR(255) NOT NULL,
		screen_resolution VARCHAR(15) NOT NULL,
		status VARCHAR(10) NOT NULL,
		PRIMARY KEY(authentication_log_id))&quot;;

mysql_query($q) or die(mysql_error());
</pre>
<p><span id="more-246"></span></p>
<p>Acest tabel ne permite sa tinem o evidenta a celor care utilizeaza sectiunea de administrare. De fiecare data cand cineva se autentifica se introduce in baza de date numele utilizatorului, parola encriptata a utilizatorului, data si ora autentificarii (atat ora de pe server cat si ora de pe PC-ul utilizatorului), IP-ul de pe care s-a facut autentificarea, browserul si sistemul de operare folosite de utilizator, rezolutia monitorului utilizatorului, statusul autentificarii (reusita sau esuata).</p>
<p>Daca o autentificare esueaza parola va fi inregistrata in clar. Astfel putem vedea daca cineva doreste sa intre neautorizat in sectiunea de administrare si cu ce cuvinte incearca sa sparga parola. Se stie foarte bine ca o parola poate fi aflata prin forta bruta (<strong>brute force attack</strong>), utilizand un dictionar de cuvinte (<strong>dictionary attack</strong>) sau prin inginerie sociala (<strong>social engineering</strong>) sau poate fi pur si simplu ghicita. De asemenea un utilizator poate sa isi infecteze PC-ul cu un <strong>keylogger</strong> si astfel un rau-voitor sa intre in posesia datelor sale de logare.</p>
<p>Mai pe scurt, acest tabel ne ajuta sa vedem daca se intampla ceva suspicios in legatura cu utilizatorii sectiunii de administrare.</p>
<p>In cazul in care autentificarea reuseste, se va crea o sesiune pe server, se va salva in sesiune numele utilizatorului si browserul si sistemul de operare folosite de utilizator si se va face redirectionarea de la pagina de login la pagina principala a sectiunii de administrare.</p>
<p>Apoi pe pagina principala a sectiunii de administrare, deasupra DOCTYPE-ului mai exact, exista un script PHP care verifica daca cel care vrea sa deschida pagina este autorizat sau nu sa faca acest lucru. Daca este autorizat pagina va fi afisata in browser, daca nu este autorizat va fi redirectionat catre pagina de login. Acest script PHP il punem in toate paginile sectiunii de administrare, deasupra DOCTYPE-ului, pentru a restrictiona accesul la ele.</p>
<p>Se prefera utilizarea sesiunilor in detrimentul cookie-urilor deoarece datele de logare ale utilizatorului sunt stocate pe server si nu pe PC-ul utilizatorului. In acest fel datele de logare sunt infinit mai protejate si nu sunt transmise in mod repetat intre server si browser. Pe PC-ul utilizatorului se creeaza doar un cookie cu identificatorul sesiunii. Numele acestui cookie este <strong>PHPSESSID</strong> si valoarea stocata de cookie este o valoare de genul <strong>a76b45cf92d87ea710fc8e9a9f812fa</strong> (32 de caractere hexazecimale). Existenta acestui cookie se poate verifica din browser.</p>
<p>Pentru ca acest script PHP de autentificare sa fie complet functional mai am nevoie de <a title="Cum ma conectez la o baza de date MySQL?" href="http://www.accesinterzis.ro/index.php/programare/cum-ma-conectez-la-o-baza-de-date/" target="_blank">fisierul care ma conecteaza la baza de date</a>, <strong>connect_to_db.inc.php</strong>, pe care il apelez cu functia include().</p>
<p><strong>loginform.php</strong> &#8211; pagina cu formularul de autentificare</p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum fac un formular de autentificare a utilizatorilor?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
include('includes/connect_to_db.inc.php');

#2
if (isset($_POST['login'])) {
	#3
	$errors = array();

	#4
	foreach($_POST as $k =&gt; $v) {
		#4.1
		$v = trim($v);

		#4.2
		/*
		Cand bag datele in baza de date le infasor in mysql_real_escape_string().
		Cand citesc datele din baza de date le infasor in stripslashes() si htmlentities().
		*/
		if (ini_get('magic_quotes_gpc')) {
			$v = stripslashes($v);
		}

		$v = mysql_real_escape_string($v);

		#4.3
		$$k = $v;

		#4.4
		if (empty($v)) {
			$errors[$k] = 'The '.$k.' is required.';
		} else {
			if (strlen($v) &gt; 30) {
				$errors[$k] = 'The '.$k.' is too long.';
			} else {
				if ($k == 'username') {
					if (!preg_match('/^[a-z0-9_. ]*$/i', $v)) {
						$errors[$k] = 'The username isn\'t valid.';
					}
				}

				if ($k == 'password') {
					if(!preg_match('/^[a-z0-9]*$/i', $v)) {
						$errors[$k] = 'The password isn\'t valid.';
					} else {
						if (strlen($v) &lt; 5) {
							$errors[$k] = 'The password is too short.';
						}
					}
				}
			}
		}
	}

	#5
	/*
	Dupa ce m-am asigurat ca datele de autentificare sunt valide (adica nu contin caractere nepermise
	utilizate in atacuri asupra bazei de date cum ar fi injectiile sql) verific daca combinatia username/password
	se regaseste in tabelul in care sunt inregistrati toti utilizatorii sectiunii de administrare.
	*/
	if (count($errors) == 0) {
		$q = &quot;SELECT username FROM ai_registrationform WHERE username='$username' AND password=SHA('$password')&quot;;
		$result = mysql_query($q) or die(mysql_error());
		$row = mysql_fetch_array($result);

		#5.1
		/*
		Daca autentificarea s-a efetuat cu succes:
		- salvez in tabelul de loguri un log despre autetificare
		- salvez in sesiune numele utilizatorului si numele browserului si sistemului de operare pe care le foloseste
		- redirectez utilizatorul de pe pagina de login pe pagina principala a sectiunii de administrare
		*/
		if ($row) {
			$q2 = &quot;INSERT INTO ai_authentication_logs(`username`, `password`, `server_authentication_date`, `client_authentication_date`, `ip`, `browser_os`, `screen_resolution`, `status`)&quot;
				 .&quot;VALUES('$username', SHA('$password'), NOW(), '&quot;.$_COOKIE['client_authentication_date'].&quot;', '&quot;.$_SERVER['REMOTE_ADDR'].&quot;', '&quot;.$_SERVER['HTTP_USER_AGENT'].&quot;', '&quot;.$_COOKIE['screen_resolution'].&quot;', 'succesful')&quot;;

			mysql_query($q2) or die(mysql_error());

			session_start();
			$_SESSION['username'] = $row['username'];
			$_SESSION['browser_os'] = $_SERVER['HTTP_USER_AGENT'];

			header('Location:http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/backend.php');
			exit();
		} else {
			$q2 = &quot;INSERT INTO ai_authentication_logs(`username`, `password`, `server_authentication_date`, `client_authentication_date`, `ip`, `browser_os`, `screen_resolution`, `status`)&quot;
				 .&quot;VALUES('$username', '$password', NOW(), '&quot;.$_COOKIE['client_authentication_date'].&quot;', '&quot;.$_SERVER['REMOTE_ADDR'].&quot;', '&quot;.$_SERVER['HTTP_USER_AGENT'].&quot;', '&quot;.$_COOKIE['screen_resolution'].&quot;', 'failed')&quot;;

			mysql_query($q2) or die(mysql_error());

			$error_message = 'Your login data are wrong.';
		}
	}
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How do I make a login form?&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a login form?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;login,form,php,script,mysql,database,user,backend,admin,section,cms&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a login form?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE AUTENTIFICARE*/

form#login_form {
	width:285px;
	margin:0px auto;
}

form#login_form h1 {
	color:black;
	font: normal normal normal 24px  Verdana;
	/*font-style font-variant font-weight font-size font-family*/
	padding-bottom:5px;
}

form#login_form div {
	margin:0 0 5px 0;
}

form#login_form label {
	width:80px;
	float:left;
}

form#login_form label span {
	color:#c00;
}

form#login_form input {
	width:200px;
}

form#login_form textarea {
	width:300px;
	height:150px;
}

form#login_form input, form#login_form textarea {
	border:1px #ccc solid;
}

form#login_form input:hover, form#login_form textarea:hover {
	border:1px #666 solid;
}

form#login_form input#login {
	width:auto;
	color:#FFF;
	background-color:#333;
	border:1px #000 solid !important;
	cursor:pointer;
}

form#login_form input#login:hover {
	color:#333;
	background-color:#fff;
	border:1px #333 solid;
}

/*Inceput - stilurile erorilor*/
form#login_form p {
	color:#c00;
	padding:0 0 0 80px;
	font-size:10px;
	text-align:left;
}

form#login_form div#username_field label,
form#login_form div#password_field label {
	color:#c00;
}

form#login_form div#username_field input,
form#login_form div#password_field input {
	border:1px #c00 solid;
	color:#c00;
}

form#login_form div#username_field input:hover,
form#login_form div#password_field input:hover {
	border:1px #c00 solid;
}
/*Sfarsit - stilurile erorilor*/

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE AUTENTIFICARE*/
&lt;/style&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
/*
Creez cookie-urile care vor stoca date despre utilizator.
Aceste cookie-uri se creeaza atunci cand se deschide prima oara pagina de login.
De abia cand se reincarca pagina, adica cand utilizatorul apasa butonul &quot;login&quot;, scriptul PHP
se poate folosi de aceste cookie-uri.
*/
document.cookie = 'screen_resolution=' + screen.width + '*' + screen.height + ';';

var current_date = new Date();
var year = current_date.getFullYear();
var month = current_date.getMonth();
var day = current_date.getDate();
var hour = current_date.getHours();
var minutes = current_date.getMinutes();
var seconds = current_date.getSeconds();
var current_date = year + '-' + month + '-' + day + ' ' + hour + ':' + minutes + ':' + seconds;
document.cookie = 'client_authentication_date=' + current_date + ';';
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form action=&quot;&lt;?php echo htmlentities(strip_tags('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8'); ?&gt;&quot; method=&quot;post&quot; id=&quot;login_form&quot;&gt;
	&lt;h1&gt;
		&lt;label&gt;&amp;nbsp;&lt;/label&gt;
		Login
	&lt;/h1&gt;

	&lt;?php if ($error_message) echo '&lt;p&gt;'.$error_message.'&lt;/p&gt;'; ?&gt;

	&lt;?php echo ($errors['username'] || $error_message) ? '&lt;p&gt;'.$errors['username'].'&lt;/p&gt;&lt;div id=&quot;username_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;username&quot;&gt;Username&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;username&quot; type=&quot;text&quot; id=&quot;username&quot; value=&quot;&lt;?php if ($username) echo htmlentities(stripslashes($username)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;?php echo ($errors['password'] || $error_message) ? '&lt;p&gt;'.$errors['password'].'&lt;/p&gt;&lt;div id=&quot;password_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;password&quot;&gt;Password&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;password&quot; type=&quot;password&quot; id=&quot;password&quot; /&gt;
	&lt;/div&gt;

	&lt;div&gt;
		&lt;label&gt; &amp;nbsp; &lt;/label&gt;
		&lt;input name=&quot;login&quot; type=&quot;submit&quot; id=&quot;login&quot; value=&quot;login&quot; /&gt;
	&lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong> backend.php</strong> &#8211; pagina principala a sectiunii de administrare</p>
<pre class="brush: php;">
&lt;?php
#1
session_start();

#2
if (!isset($_SESSION['username']) || !isset($_SESSION['browser_os']) || $_SESSION['browser_os'] != $_SERVER['HTTP_USER_AGENT']) {
		header('Location:http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/loginform.php');
		exit();
}

#3
if ($_GET['action'] == 'logout') {
	#3.1
	/*
	Pentru a deloga un utilizator din sectiunea de administrare trebuie sa urmez pasii de mai jos:
	- distrug toate variabilele sesiunii de pe server reinitializind intregul tablou superglobal $_SESSION
	- sterg de pe server toate datele sesiunii apeland functia session_destroy()
	- sterg de pe PC-ul utilizatorului cookie-ul care stocheaza identificatorul de sesiune
	*/
	$_SESSION = array();
	if (session_destroy() &amp;&amp; setcookie('PHPSESSID', '', time()-300, '/', '', 0)) {
		header('Location:http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/loginform.php');
		exit();
	}
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Backend&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a backend?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;backend,administration,section,admin,cms,content,managament,system,php,script,mysql,database&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a backend?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL SECTIUNII DE ADMINISTRARE*/

div#backend {
	width:1000px;
	margin:10px auto;
	overflow:auto;
	border:1px #ccc solid;
	padding:10px;
}

div#backend ul#welcome_message {
	overflow:auto;
	list-style-type:none;
}

div#backend ul#sidebar {
	width:10%;
	float:left;
	list-style-type:none;
	border-right:1px #ccc solid;
}

div#backend div#mainarea {
	width:80%;
	float:right;
}

div#backend div#mainarea p#confirmation_message {
	width:75%;
	margin:250px auto;
}

div#backend div#footer{
	width:100%;
	float:left;
	text-align:center;
}

div.splitter {
	width:100%;
	height:1px;
	clear:both;
	float:left;
	border-top:1px #ccc solid;
	margin: 10px 0 10px 0;
}

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL SECTIUNII DE ADMINISTRARE*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div id=&quot;backend&quot;&gt;
	&lt;ul id=&quot;welcome_message&quot;&gt;
		&lt;li style=&quot;float:left;&quot;&gt;Welcome &lt;strong&gt;&lt;?php echo $_SESSION['username']; ?&gt;&lt;/strong&gt; to the administration section&lt;/li&gt;
		&lt;li style=&quot;float:right;&quot;&gt;&lt;a href=&quot;&lt;?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ?&gt;?action=logout&quot; title=&quot;Logout&quot;&gt;Logout&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div class=&quot;splitter&quot;&gt;&lt;/div&gt;

	&lt;ul id=&quot;sidebar&quot;&gt;
		&lt;?php
		for ($i = 0; $i &lt; 40; $i++) {
			echo '&lt;li&gt;sidebar&lt;/li&gt;';
		}
		?&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;mainarea&quot;&gt;
		&lt;p id=&quot;confirmation_message&quot;&gt;
		&lt;strong&gt;&lt;?php echo $_SESSION['username']; ?&gt;&lt;/strong&gt;, esti aici deoarece ai dovedit ca esti un utilizator autorizat al acestei sectiuni de administrare.
		Acum delogheaza-te si incearca sa accesezi din nou &lt;strong&gt;&lt;?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ?&gt;&lt;/strong&gt;.
		Vei vedea ce se intampla cand cineva neautentificat incearca sa intre in sectiunea de administrare.
		&lt;/p&gt;
	&lt;/div&gt;

	&lt;div class=&quot;splitter&quot;&gt;&lt;/div&gt;

	&lt;div id=&quot;footer&quot;&gt;
		Designed and developed by &lt;a href=&quot;http://www.accesinterzis.ro&quot; title=&quot;Programare | Web development | Web design | Securitate IT | SEO&quot; target=&quot;_blank&quot;&gt;www.accesinterzis.ro&lt;/a&gt; &amp;copy; 2010. All rights reserved.
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pentru un mai bun managment al codului trebuie sa facem urmatoarele lucruri:</p>
<ul>
<li>scriptul PHP de deasupra DOCTYPE-ului paginii de login, care valideaza datele introduse in formular, autentifica utilizatorul si il redirectioneaza catre sectiunea de administrare, se baga intr-un fisier include si se apeleaza prin functia PHP include().
<pre class="brush: php;">
&lt;?php @include('includes/authenticate_user.inc.php'); ?&gt;
</pre>
</li>
<li>liniile CSS, care creeaza skinul formularului de autentificare, din sectiunea &lt;head&gt; &lt;/head&gt; a paginii de login se baga intr-un fisier CSS extern si se apeleaza cu tagul HTML &lt;link /&gt;.
<pre class="brush: xml;">
&lt;link href=&quot;css/login_form_design.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
</pre>
</li>
<li>liniile Javascript, care creeaza cookie-urile cu datele despre utilizator, din sectiunea &lt;head&gt;&lt;/head&gt; a paginii de login se baga intr-un fisier JS extern si se apeleaza cu tagul HTML &lt;script&gt;.
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/user_data.js&quot;&gt;&lt;/script&gt;
</pre>
</li>
<li>scriptul PHP de deasupra DOCTYPE-ului paginilor ce alcatuiesc sectiunea de administrare, care permite doar utilizatorilor autentificati sa intre in sectiunea de administrare si realizeaza si functia de logout, se baga intr-un fisier include si se apeleaza prin functia PHP include().
<pre class="brush: php;">
&lt;?php @include('includes/restricted_area.inc.php'); ?&gt;
</pre>
</li>
<li>liniile CSS, care creeaza skinul sectiunii de administrare, din sectiunea &lt;head&gt; &lt;/head&gt;se baga intr-un fisier CSS extern si se apeleaza cu tagul HTML &lt;link /&gt;.
<pre class="brush: xml;">
&lt;link href=&quot;css/backend_design.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
</pre>
</li>
</ul>
<p>Ca sa verificati functionalitatea acestui script PHP de autentificare a utilizatorilor si sa intrati in sectiunea de administrare puteti sa va <a title="Cum fac un formular de inregistrare a utilizatorilor?" href="http://www.accesinterzis.ro/myportofolio/registrationform.php" target="_blank">inregistrati in baza de date</a> si apoi sa va <a title="Cum fac un formular de autentificare a utilizatorilor unei sectiunii de administrare?" href="http://www.accesinterzis.ro/myportofolio/loginform.php" target="_blank">logati</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+autentificare+a+utilizatorilor%3F+http://qkzmc.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+autentificare+a+utilizatorilor%3F+http://qkzmc.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cum fac un formular de inregistrare a utilizatorilor?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:56:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=206</guid>
		<description><![CDATA[Prin ce se caracterizeaza acest formular de inregistrare a utilizatorilor?

scriptul PHP isi creeaza singur tabelul in care va stoca utilizatorii daca acesta nu exista in baza de date
toate datele introduse sunt validate server-side
scriptul verifica in baza de date daca exista deja numele de utilizator ales si adresa de email a noului utilizator
fiecare mesaj de eroare este [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Prin ce se caracterizeaza acest <a title="Cum fac un formular de inregistrare a utilizatorilor?" href="http://www.accesinterzis.ro/myportofolio/registrationform.php" target="_blank">formular de inregistrare a utilizatorilor</a>?</p>
<ul>
<li>scriptul PHP isi creeaza singur tabelul in care va stoca utilizatorii daca acesta nu exista in baza de date</li>
<li>toate datele introduse sunt validate server-side</li>
<li>scriptul verifica in baza de date daca exista deja numele de utilizator ales si adresa de email a noului utilizator</li>
<li>fiecare mesaj de eroare este personalizat pentru fiecare eroare in parte</li>
<li>campurile care contin date invalide sunt evidentiate</li>
<li>scriptul pastreaza datele introduse in campurile formularului atunci cand detecteaza o eroare</li>
<li>designul formularului este creat EXCLUSIV din CSS</li>
<li>de protectie antispam nu avem nevoie deoarece se presupune ca formularul de inregistrare se afla in interiorul unei sectiuni de administrare</li>
</ul>
<p><span id="more-206"></span></p>
<p>Asadar, ca sa realizez un formular de inregistrare a utilizatorilor mai intai creez in baza de date tabelul care va stoca toti utilizatorii.</p>
<pre class="brush: php;">
$q = &quot;CREATE TABLE IF NOT EXISTS ai_registrationform(
		user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
		username VARBINARY(30) NOT NULL,
		email VARCHAR(30) NOT NULL,
		password CHAR(40) NOT NULL,
		registration_date DATETIME NOT NULL,
		ip VARCHAR(16) NOT NULL,
		PRIMARY KEY(user_id))&quot;;

mysql_query($q) or die(mysql_error());
</pre>
<p>Mai avem nevoie de <a title="Cum ma conectez la o baza de date?" href="http://www.accesinterzis.ro/index.php/programare/cum-ma-conectez-la-o-baza-de-date/" target="_blank">connect_to_db.inc.php</a>, fisierul care ne conecteaza la baza de date.</p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum fac un formular de inregistrare a utilizatorilor?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
include('includes/connect_to_db.inc.php');

#2
if (isset($_POST['add'])) {
	#3
	$errors = array();

	#4
	foreach($_POST as $k =&gt; $v) {
		#4.1
		$v = trim($v);

		#4.2
		/*
		Cand bag datele in baza de date le infasor in mysql_real_escape_string().
		Cand citesc datele din baza de date le infasor in stripslashes() si htmlentities().
		*/
		if (ini_get('magic_quotes_gpc')) {
			$v = stripslashes($v);
		}

		$v = mysql_real_escape_string($v);

		#4.3
		$$k = $v;

		#4.4
		if (empty($v)) {
			if ($k != 'retype_password') {
				if ($k == 'email') {
					$errors[$k] = 'The email address is required.';
				} else {
					$errors[$k] = 'The '.$k.' is required.';
				}
			}
		} else {
			if (strlen($v) &gt; 30) {
				if ($k == 'email') {
					$errors[$k] = 'The email address is too long.';
				} else {
					$errors[$k] = 'The '.$k.' is too long.';
				}
			} else {
				if ($k == 'username') {
					if (!preg_match('/^[a-z0-9_. ]*$/i', $v)) {
						$errors[$k] = 'The username isn\'t valid.';
					} else {
						$q = &quot;SELECT user_id FROM ai_registrationform WHERE LOWER(username)='&quot;.strtolower($v).&quot;'&quot;;
						$result = mysql_query($q) or die(mysql_error());

						if (mysql_num_rows($result) != 0) {
							$errors[$k] = 'The username already exists in our database.';
						}
					}
				}

				if ($k == 'email') {
					if (!preg_match('/^[a-z0-9_.]+@[a-z0-9-.]+\.[a-z]{2,4}$/i', $v)) {
						$errors[$k] = 'The email address isn\'t valid.';
					} else {
						$q = &quot;SELECT user_id FROM ai_registrationform WHERE LOWER(email)='&quot;.strtolower($v).&quot;'&quot;;
						$result = mysql_query($q) or die(mysql_error());

						if (mysql_num_rows($result) != 0) {
							$errors[$k] = 'The email address already exists in our database.';
						}
					}
				}

				if ($k == 'password') {
					if(!preg_match('/^[a-z0-9]*$/i', $v)) {
						$errors[$k] = 'The password isn\'t valid.';
					} else {
						if (strlen($v) &lt; 5) {
							$errors[$k] = 'The password is too short.';
						} else {
							/*
							Daca parola aleasa este valida verific daca a fost retiparita corect.
							*/
							if ($k == 'retype_password' &amp;&amp; ($password != $retype_password)) {
								$errors['password'] = 'The two passwords don\'t match.';
								$errors['retype_password'] = true;
							}
						}
					}
				}
			}
		}
	}

	#6
	if(count($errors) == 0) {
		#6.1
		$q = &quot;INSERT INTO ai_registrationform(`username`, `email`, `password`, `registration_date`, `ip`)&quot;
			.&quot;VALUES('$username', '$email', SHA('$password'), NOW(), '&quot;.$_SERVER['REMOTE_ADDR'].&quot;')&quot;;

		#6.2
		if (mysql_query($q)) {
			$confirmation = 'The user &lt;strong&gt;'.$username.'&lt;/strong&gt; was succesfully registered in our databse.';
		} else {
			$confirmation = 'Something is wrong with the server. Your registration wasn\'t added.';
		}
	}
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How do I make a registration form?&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a registration form?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;registration,form,php,script,mysql,database,user,backend,admin,section,cms&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a registration form?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE INREGISTRARE*/

form#registration_form {
	width:335px;
	margin:0px auto;
}

form#registration_form h1 {
	color:black;
	font: normal normal normal 24px  Verdana;
	/*font-style font-variant font-weight font-size font-family*/
	padding-bottom:5px;
}

form#registration_form div {
	margin:0 0 5px 0;
}

form#registration_form label {
	width:130px;
	float:left;
}

form#registration_form label span {
	color:#c00;
}

form#registration_form input {
	width:200px;
}

form#registration_form textarea {
	width:300px;
	height:150px;
}

form#registration_form input, form#registration_form textarea {
	border:1px #ccc solid;
}

form#registration_form input:hover, form#registration_form textarea:hover {
	border:1px #666 solid;
}

form#registration_form input#add {
	width:auto;
	color:#FFF;
	background-color:#333;
	border:1px #000 solid !important;
	cursor:pointer;
}

form#registration_form input#add:hover {
	color:#333;
	background-color:#fff;
	border:1px #333 solid;
}

/*Inceput - stilurile erorilor*/
form#registration_form p {
	color:#c00;
	padding:0 0 0 130px;
	font-size:10px;
	text-align:left;
}

form#registration_form div#username_field label,
form#registration_form div#email_field label,
form#registration_form div#password_field label,
form#registration_form div#retype_password_field label {
	color:#c00;
}

form#registration_form div#username_field input,
form#registration_form div#email_field input,
form#registration_form div#password_field input,
form#registration_form div#retype_password_field input {
	border:1px #c00 solid;
	color:#c00;
}

form#registration_form div#username_field input:hover,
form#registration_form div#email_field input:hover,
form#registration_form div#password_field input:hover,
form#registration_form div#retype_password_field input:hover {
	border:1px #c00 solid;
}
/*Sfarsit - stilurile erorilor*/

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE INREGISTRARE*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form action=&quot;&lt;?php echo htmlentities(strip_tags('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8'); ?&gt;&quot; method=&quot;post&quot; id=&quot;registration_form&quot;&gt;
	&lt;h1&gt;
		&lt;label&gt;&amp;nbsp;&lt;/label&gt;
		Register an user
	&lt;/h1&gt;

	&lt;?php if ($confirmation) echo '&lt;p&gt;'.$confirmation.'&lt;/p&gt;'; ?&gt;

	&lt;?php echo ($errors['username']) ? '&lt;p&gt;'.$errors['username'].'&lt;/p&gt;&lt;div id=&quot;username_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;username&quot;&gt;Username&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;username&quot; type=&quot;text&quot; id=&quot;username&quot; value=&quot;&lt;?php if ($username) echo htmlentities(stripslashes($username)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;?php echo ($errors['email']) ? '&lt;p&gt;'.$errors['email'].'&lt;/p&gt;&lt;div id=&quot;email_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;email&quot;&gt;Email&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;email&quot; type=&quot;text&quot; id=&quot;email&quot; value=&quot;&lt;?php if ($email) echo htmlentities(stripslashes($email)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;?php echo ($errors['password']) ? '&lt;p&gt;'.$errors['password'].'&lt;/p&gt;&lt;div id=&quot;password_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;password&quot;&gt;Password&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;password&quot; type=&quot;password&quot; id=&quot;password&quot; /&gt;
	&lt;/div&gt;

	&lt;?php echo ($errors['retype_password']) ? '&lt;div id=&quot;email_field&quot;&gt;' : '&lt;div&gt;' ; ?&gt;
		&lt;label for=&quot;retype_password&quot;&gt;Retype password&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;retype_password&quot; type=&quot;password&quot; id=&quot;retype_password&quot; /&gt;
	&lt;/div&gt;

	&lt;div&gt;
		&lt;label&gt; &amp;nbsp; &lt;/label&gt;
		&lt;input name=&quot;add&quot; type=&quot;submit&quot; id=&quot;add&quot; value=&quot;add&quot; /&gt;
	&lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pentru un mai bun managment al codului este indicat ca scriptul PHP de deasupra DOCTYPE-ului, care valideaza datele introduse in formular si inregistreaza utilizatorul in baza de date, sa se bage intr-un fisier include si sa fie apelat prin functia PHP include().</p>
<pre class="brush: php;">
&lt;?php @include('includes/register_user.inc.php'); ?&gt;
</pre>
<p>De asemenea, este indicat ca liniile CSS, care creeaza skinul formularului de inregistrare, din sectiunea &lt;head&gt; &lt;/head&gt; sa fie bagate intr-un fisier CSS extern si apelate cu tagul HTML &lt;link /&gt;.</p>
<pre class="brush: xml;">
&lt;link href=&quot;css/registration_form_design.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+inregistrare+a+utilizatorilor%3F+http://nzgae.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+inregistrare+a+utilizatorilor%3F+http://nzgae.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cum fac un formular de comentarii?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:34:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=144</guid>
		<description><![CDATA[Prin ce se caracterizeaza acest formular de comentarii?

scriptul PHP isi creeaza singur tabelul in care va stoca comentariile daca acesta nu exista in baza de date (deci mai putina munca in phpmyadmin)
protectie antispam 100% datorita sistemului CAPTCHA integrat
toate datele introduse sunt validate server-side (nu bag mana in foc caci inca nu sunt doxa de programare, [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Prin ce se caracterizeaza acest <a title="Cum fac un formular de comentarii?" href="http://www.accesinterzis.ro/myportofolio/commentform.php" target="_blank">formular de comentarii</a>?</p>
<ul>
<li>scriptul PHP isi creeaza singur tabelul in care va stoca comentariile daca acesta nu exista in baza de date (deci mai putina munca in phpmyadmin)</li>
<li>protectie antispam 100% datorita sistemului CAPTCHA integrat</li>
<li>toate datele introduse sunt validate server-side (nu bag mana in foc caci inca nu sunt doxa de programare, dar cred ca este securizat destul ca sa nu execute vreun rau-voitor o injectie sql)</li>
<li>evidentierea campurilor care contin date invalide</li>
<li>pastrarea datelor in campuri atunci cand scriptul detecteaza o eroare</li>
<li>background-ul fiecarui comentariu alterneaza de la un comentariu la altul pentru o mai buna vizualizare a comentariilor</li>
<li>designul formularului este creat EXCLUSIV din CSS</li>
</ul>
<p><span id="more-144"></span></p>
<p>Asadar, ca sa realizez un formular de cometarii mai intai creez in baza de date tabelul care va stoca toate comentariile.</p>
<pre class="brush: php;">
$q = &quot;CREATE TABLE IF NOT EXISTS ai_commentform(
		comment_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
		name VARCHAR(30) NOT NULL,
		email VARCHAR(30) NOT NULL,
		website VARCHAR(30) NOT NULL,
		comment TEXT NOT NULL,
		date DATETIME NOT NULL,
		ip VARCHAR(30) NOT NULL,
		PRIMARY KEY(comment_id))&quot;;

mysql_query($q) or die(mysql_error());
</pre>
<p>Mai avem nevoie de <a title="Cum ma conectez la o baza de date?" href="http://www.accesinterzis.ro/index.php/programare/cum-ma-conectez-la-o-baza-de-date/" target="_blank">connect_to_db.inc.php</a>, fisierul care ne conecteaza la baza de date.</p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum fac un formular de comentarii?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
session_start();

#2
include('includes/connect_to_db.inc.php');

#3
if (isset($_POST['add'])  &amp;&amp; isset($_POST['security_code'])) {
	#4
	$errors = array();

	#5
	foreach($_POST as $k =&gt; $v) {
		#5.1
		$v = trim($v);

		#5.2
		/*
		Cand bag datele in baza de date le infasor in mysql_real_escape_string().
		Cand citesc datele din baza de date le infasor in stripslashes() si htmlentities().
		*/
		if (ini_get('magic_quotes_gpc')) {
			$v = stripslashes($v);
		}

		$v = mysql_real_escape_string($v);

		#5.3
		$$k = $v;

		#5.4
		if (empty($v)) {
			if ($k != 'website') {
				$errors[$k] = true;
			}
		} else {
			if ($k != &quot;comment&quot;) {
				if (strlen($v) &gt; 30) {
					$errors[$k] = true;
				} else {
					if ($k == 'name' &amp;&amp; !preg_match('/^[a-z0-9_. ]*$/i', $v)) {
						$errors[$k] = true;
					}

					if ($k == 'email' &amp;&amp; !preg_match('/^[a-z0-9_.]+@[a-z0-9-.]+\.[a-z]{2,4}$/i', $v)) {
						$errors[$k] = true;
					}

					if ($k == 'website' &amp;&amp; !preg_match('/^http:\/\/[a-z0-9.-]+\.[a-z]{2,4}$/i', $v)) {
						$errors[$k] = true;
					}

					if ($k == 'security_code' &amp;&amp; $_SESSION['security_code'] != $v ) {
						$errors[$k] = true;
					}
				}
			}
		}
	}

	#6
	if(count($errors) == 0) {
		#6.1
		$q = &quot;INSERT INTO ai_commentform(`name`, `email`, `website`, `comment`, `date`, `ip`)&quot;
			.&quot;VALUES('$name', '$email', '$website', '$comment', NOW(), '&quot;.$_SERVER['REMOTE_ADDR'].&quot;')&quot;;

		#6.2
		if (mysql_query($q) == false) {
			$error_message = 'Something is wrong with the server. Your comment wasn\'t added.';
		}
	} else {
		$error_message = 'We got '.count($errors).' error(s). Check out the highlitghed field(s).';
	}
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How do I make a comment form?&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a comment form?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;comment,form,php,script,mysql,database&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a comment form?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE COMENTARII*/

form#comment_form {
	width:430px;
	margin:0px auto;
}

form#comment_form h1 {
	color:black;
	font: normal normal normal 24px  Verdana;
	/*font-style font-variant font-weight font-size font-family*/
	padding-bottom:5px;
}

form#comment_form div {
	margin:0 0 5px 0;
}

form#comment_form label {
	width:115px;
	float:left;
}

form#comment_form label span {
	color:#c00;
}

form#comment_form input {
	width:200px;
}

form#comment_form textarea {
	width:300px;
	height:150px;
}

form#comment_form input, form#comment_form textarea {
	border:1px #ccc solid;
}

form#comment_form input:hover, form#comment_form textarea:hover {
	border:1px #666 solid;
}

form#comment_form input#add {
	width:auto;
	color:#FFF;
	background-color:#333;
	border:1px #000 solid !important;
	cursor:pointer;
}

form#comment_form input#add:hover {
	color:#333;
	background-color:#fff;
	border:1px #333 solid;
}

/*Inceput - stilurile erorilor*/
form#comment_form p#error_message {
	color:#c00;
	font-size:10px;
	padding:0 0 5px 115px;
	text-align:left;
}

form#comment_form div#name_field label,
form#comment_form div#email_field label,
form#comment_form div#website_field label,
form#comment_form div#comment_field label,
form#comment_form div#security_code_field label {
	color:#c00;
}

form#comment_form div#name_field input,
form#comment_form div#email_field input,
form#comment_form div#website_field input,
form#comment_form div#comment_field textarea,
form#comment_form div#security_code_field input {
	border:1px #c00 solid;
	color:#c00;
}

form#comment_form div#name_field input:hover,
form#comment_form div#email_field input:hover,
form#comment_form div#website_field input:hover,
form#comment_form div#comment_field textarea:hover,
form#comment_form div#security_code_field input:hover {
	border:1px #c00 solid;
}
/*Sfarsit - stilurile erorilor*/

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE COMENTARII*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form action=&quot;&lt;?php echo htmlentities(strip_tags('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8'); ?&gt;&quot; method=&quot;post&quot; id=&quot;comment_form&quot;&gt;
	&lt;?php
	$q = &quot;SELECT name, website, date, comment FROM ai_commentform ORDER BY comment_id DESC&quot;;
	$result = mysql_query($q) or die(mysql_error());

	if (mysql_num_rows($result) != 0) {
		echo '&lt;div&gt;';
		echo '&lt;p&gt;'.mysql_num_rows($result).' comment(s) so far&lt;/p&gt;';

		$i = 0;
		while ($row = mysql_fetch_array($result)) {
			echo '&lt;p&gt;';
			echo ($row['website'] == '') ? '&lt;strong&gt;'.$row['name'].'&lt;/strong&gt;' : '&lt;a href=&quot;'.$row['website'].'&quot; title=&quot;'.$row['website'].'&quot; target=&quot;_blank&quot;&gt;'.$row['name'].'&lt;/a&gt;';
			echo ' - '.$row['date'];
			echo '&lt;/p&gt;';

			echo (is_int($i/2)) ? '&lt;p style=&quot;margin-bottom:15px;&quot;&gt;' : '&lt;p style=&quot;margin-bottom:15px; background:#ccc;&quot;&gt;';
			echo htmlentities(stripslashes($row['comment']));
			echo '&lt;/p&gt;';

			$i++;
		}
		echo '&lt;/div&gt;';
	}
	?&gt;

	&lt;h1&gt;
		&lt;label&gt;&amp;nbsp;&lt;/label&gt;
		Leave a comment
	&lt;/h1&gt;

	&lt;?php if ($error_message) echo '&lt;p id=&quot;error_message&quot;&gt;'.$error_message.'&lt;/p&gt;'; ?&gt;

	&lt;div &lt;?php if ($errors['name']) echo 'id=&quot;name_field&quot;'; ?&gt;&gt;
		&lt;label for=&quot;name&quot;&gt;Name&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;name&quot; type=&quot;text&quot; id=&quot;name&quot; value=&quot;&lt;?php if ($name) echo htmlentities(stripslashes($name)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;div &lt;?php if ($errors['email']) echo 'id=&quot;email_field&quot;'; ?&gt;&gt;
		&lt;label for=&quot;email&quot;&gt;Email&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;input name=&quot;email&quot; type=&quot;text&quot; id=&quot;email&quot; value=&quot;&lt;?php if ($email) echo htmlentities(stripslashes($email)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;div &lt;?php if ($errors['website']) echo 'id=&quot;website_field&quot;'; ?&gt;&gt;
		&lt;label for=&quot;website&quot;&gt;Website:&lt;/label&gt;
		&lt;input name=&quot;website&quot; type=&quot;text&quot; id=&quot;website&quot; value=&quot;&lt;?php if ($website) echo htmlentities(stripslashes($website)); ?&gt;&quot; /&gt;
	&lt;/div&gt;

	&lt;div &lt;?php if ($errors['comment']) echo 'id=&quot;comment_field&quot;'; ?&gt;&gt;
		&lt;label for=&quot;comment&quot;&gt;Your comment&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
		&lt;textarea name=&quot;comment&quot; rows=&quot;1&quot; cols=&quot;1&quot; id=&quot;comment&quot;&gt;&lt;?php if ($comment) echo htmlentities(stripslashes($comment)); ?&gt;&lt;/textarea&gt;
	&lt;/div&gt;

	&lt;div style=&quot;padding-left:115px;&quot;&gt;
		&lt;img src=&quot;includes/captchaimage.inc.php?width=120&amp;height=40&amp;characters=5&quot; /&gt;
	&lt;/div&gt;

	&lt;div &lt;?php if ($errors['security_code']) echo 'id=&quot;security_code_field&quot;'; ?&gt;&gt;
		&lt;label for=&quot;security_code&quot;&gt;Are you human?&lt;span&gt;*&lt;/span&gt;&lt;/label&gt;
		&lt;input id=&quot;security_code&quot; name=&quot;security_code&quot; type=&quot;text&quot; /&gt;
	&lt;/div&gt;

	&lt;div&gt;
		&lt;label&gt; &amp;nbsp; &lt;/label&gt;
		&lt;input name=&quot;add&quot; type=&quot;submit&quot; id=&quot;add&quot; value=&quot;add&quot; /&gt;
	&lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Felul in care se integreaza sistemul CAPTCHA in formular il puteti gasi in <a title="Cum fac un formular de contact?" href="http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/" target="_blank">articolul</a> care prezinta cum se realizeaza un formular de contact.</p>
<p>Pentru un mai bun managment al codului este indicat ca scriptul PHP de deasupra DOCTYPE-ului, care valideaza datele introduse in formular si introduce comentariile in baza de date, sa se bage intr-un fisier include si sa fie apelat prin functia PHP include().</p>
<pre class="brush: php;">
&lt;?php @include('includes/add_comment.inc.php'); ?&gt;
</pre>
<p>De asemenea, este indicat ca liniile CSS, care creeaza skinul formularului de comentarii, din sectiunea &lt;head&gt; &lt;/head&gt; sa fie bagate intr-un fisier CSS extern si apelate cu tagul HTML &lt;link /&gt;.</p>
<pre class="brush: xml;">
&lt;link href=&quot;css/comment_form_design.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+comentarii%3F+http://5r28a.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+comentarii%3F+http://5r28a.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/' rel='bookmark' title='Permanent Link: Cum fac un formular de contact?'>Cum fac un formular de contact?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cum fac un formular de contact?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 15:11:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=80</guid>
		<description><![CDATA[Prin ce se caracterizeaza acest formular de contact?

toate datele sunt validate server-side
protectie antispam 100% datorita sistemului CAPTCHA integrat in formular
campul unde exista o eroare este evidentiat
datele completate raman in campurile formularului atunci cand se detecteaza o eroare
skin creat EXCLUSIV din CSS
formularul poate fi usor de integrat intr-un website
skinul emailului trimis poate fi formatat prin folosirea tagurilor [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Prin ce se caracterizeaza acest <a title="Cum fac un formular de contact?" href="http://www.accesinterzis.ro/myportofolio/contactform.php" target="_blank">formular de contact</a>?</p>
<ul>
<li>toate datele sunt validate server-side</li>
<li>protectie antispam 100% datorita sistemului CAPTCHA integrat in formular</li>
<li>campul unde exista o eroare este evidentiat</li>
<li>datele completate raman in campurile formularului atunci cand se detecteaza o eroare</li>
<li>skin creat EXCLUSIV din CSS</li>
<li>formularul poate fi usor de integrat intr-un website</li>
<li>skinul emailului trimis poate fi formatat prin folosirea tagurilor HTML si a regulilor CSS aplicate inline</li>
<li>in subsolul emailului trimis exista cateva informatii despre expeditor</li>
</ul>
<p><span id="more-80"></span></p>
<pre class="brush: php;">
&lt;?php
/*
Titlu: Cum fac un formular de contact?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
session_start();

/*
Ma asigur ca URL-urile obtinute dinamic nu contin cod Javascript folosit
in atacurile XSS.
*/
#2
$php_self = htmlentities(strip_tags($_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8');
$referer = (isset($_SERVER['HTTP_REFERER'])) ? htmlentities(strip_tags($_SERVER['HTTP_REFERER']), ENT_QUOTES, 'utf-8') : NULL;

$required_fields = array('name', 'phone_number', 'email', 'message', 'security_code', 'send');
$sent_fields = array_keys($_POST);

/*
Nu procesez datele pana nu ma asigur ca cererea de procesare a datelor este venita de la pagina curenta
in care se afla formularul meu de contact si ca toate campurile formularului au fost trimise.
*/
#3
if ($referer == 'http://'.$_SERVER['HTTP_HOST'].$php_self &amp;&amp; $required_fields == $sent_fields) {
	#4
    $post = array();
    $errors = array();

    #5
    foreach($_POST as $k =&gt; $v) {
        #5.1
        $v = trim($v);

        #5.2
        $post[$k] = htmlentities(stripslashes($v) , ENT_QUOTES, 'utf-8');

		if (empty($post[$k]) || (strlen($post[$k]) &gt; 30 &amp;&amp; $k != 'message')) {
			$errors[$k] = true;
		}
    }

    #6
    $k = 'name';
    if (!preg_match('/^[a-z0-9_. ]*$/i', $post[$k])) {
        $errors[$k] = true;
    }

    $k = 'phone_number';
    if (!preg_match('/^[0-9.+ ]*$/', $post[$k])) {
        $errors[$k] = true;
    }

    $k = 'email';
    if (!preg_match('/^[a-z0-9_.]+@[a-z0-9-.]+\.[a-z]{2,4}$/i', $post[$k])) {
        $errors[$k] = true;
    }

    $k = 'security_code';
    if ($_SESSION['security_code'] != $post[$k]) {
        $errors[$k] = true;
    }

    #7
    if(count($errors) == 0) {
        #7.1
        $to = 'whovisitedme@gmail.com';
        $subject = substr($post['message'],0,20).'...';
        $body = 'This message is received from http://'.$_SERVER['HTTP_HOST'].$php_self.'&lt;br /&gt;&lt;br /&gt;
                &lt;strong&gt;Name&lt;/strong&gt;: '.$post['name'].'&lt;br /&gt;
                &lt;strong&gt;Phone number&lt;/strong&gt;: '.$post['phone_number'].'&lt;br /&gt;
                &lt;strong&gt;Email address&lt;/strong&gt;: '.$post['email'].'&lt;br /&gt;
                &lt;strong&gt;Mesagge&lt;/strong&gt;: '.$post['message'].'&lt;br /&gt;&lt;br /&gt;
                &lt;strong style=&quot;color:#c00;&quot;&gt;Infos about sender:&lt;/strong&gt;&lt;br /&gt;
                &lt;strong&gt;IP address&lt;/strong&gt;: '.$_SERVER['REMOTE_ADDR'].'&lt;br /&gt;
                &lt;strong&gt;browser and operating system&lt;/strong&gt;: '.$_SERVER['HTTP_USER_AGENT'].'&lt;br /&gt;
                &lt;strong&gt;dispatch hour&lt;/strong&gt;: '.date(&quot;l, F j, Y, H:i:s&quot;);
        $headers  = &quot;From: &quot;.$post['email'].&quot;\r\n&quot;;

        #7.2
        $headers .= 'MIME-Version: 1.0'.&quot;\r\n&quot;;
        $headers .= 'Content-type: text/html; charset=utf-8' . &quot;\r\n&quot;;

        #7.3
        if (mail($to, $subject, $body, $headers)) {
            $confirmation = 'Your message was succesfully sent. We will get in touch with you as soon as possible.';
        } else {
            $confirmation = 'Something is wrong with the server. Your message wasn\'t sent.';
        }
    } else {
        $confirmation = 'We got '.count($errors).' error(s). Check out the highlighted field(s).';
    }
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How do I make a contact form?&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;How do I make a contact form?&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;contact,form,php,script,send,email&quot; /&gt;
&lt;meta name=&quot;abstract&quot; content=&quot;How do I make a contact form?&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;copyright&quot; content=&quot;AccesInterzis&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;7 days&quot; /&gt;

&lt;link href=&quot;http://www.accesinterzis.ro/myportofolio/css/reset.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
/*INCEPUT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE CONTACT*/

form#contact_form {
	width:430px;
	margin:0px auto;
}

form#contact_form h1 {
	color:black;
	font: normal normal normal 24px  Verdana;
	/*font-style font-variant font-weight font-size font-family*/
	padding-bottom:5px;
}

form#contact_form div {
	margin:0 0 5px 0;
}

form#contact_form label {
	width:115px;
	float:left;
}

form#contact_form label span {
	color:#c00;
}

form#contact_form input {
	width:200px;
}

form#contact_form textarea {
	width:300px;
	height:150px;
}

form#contact_form input, form#contact_form textarea {
	border:1px #ccc solid;
}

form#contact_form input:hover, form#contact_form textarea:hover {
	border:1px #666 solid;
}

form#contact_form input#send {
	width:auto;
	color:#FFF;
	background-color:#333;
	border:1px #000 solid !important;
	cursor:pointer;
}

form#contact_form input#send:hover {
	color:#333;
	background-color:#fff;
	border:1px #333 solid;
}

/*Inceput - stilurile erorilor*/
form#contact_form p#confirmation {
	color:#c00;
	font-size:10px;
	padding:0 0 5px 115px;
	text-align:left;
}

form#contact_form div#name_field label,
form#contact_form div#email_field label,
form#contact_form div#phone_number_field label,
form#contact_form div#message_field label,
form#contact_form div#security_code_field label {
	color:#c00;
}

form#contact_form div#name_field input,
form#contact_form div#email_field input,
form#contact_form div#phone_number_field input,
form#contact_form div#message_field textarea,
form#contact_form div#security_code_field input {
	border:1px #c00 solid;
	color:#c00;
}

form#contact_form div#name_field input:hover,
form#contact_form div#email_field input:hover,
form#contact_form div#phone_number_field input:hover,
form#contact_form div#message_field textarea:hover,
form#contact_form div#security_code_field input:hover {
	border:1px #c00 solid;
}
/*Sfarsit - stilurile erorilor*/

/*SFARSIT - LINIILE CSS CARE CREEAZA SKINUL FORMULARULUI DE CONTACT*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form action=&quot;&lt;?php echo 'http://'.$_SERVER['HTTP_HOST'].$php_self; ?&gt;&quot; method=&quot;post&quot; id=&quot;contact_form&quot;&gt;
    &lt;h1&gt;
        &lt;label&gt;&amp;nbsp;&lt;/label&gt;
        Contact us
    &lt;/h1&gt;

    &lt;?php if (isset($confirmation)) echo '&lt;p id=&quot;confirmation&quot;&gt;'.$confirmation.'&lt;/p&gt;'; ?&gt;

    &lt;div &lt;?php if (isset($errors['name'])) echo 'id=&quot;name_field&quot;'; ?&gt;&gt;
        &lt;label for=&quot;name&quot;&gt;Name&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
        &lt;input name=&quot;name&quot; type=&quot;text&quot; id=&quot;name&quot; value=&quot;&lt;?php if (isset($post['name'])) echo $post['name']; ?&gt;&quot; /&gt;
    &lt;/div&gt;

    &lt;div &lt;?php if (isset($errors['phone_number'])) echo 'id=&quot;phone_number_field&quot;'; ?&gt;&gt;
        &lt;label for=&quot;phone_number&quot;&gt;Phone number&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
        &lt;input name=&quot;phone_number&quot; type=&quot;text&quot; id=&quot;phone_number&quot; value=&quot;&lt;?php if (isset($post['phone_number'])) echo $post['phone_number']; ?&gt;&quot; /&gt;
    &lt;/div&gt;

    &lt;div &lt;?php if (isset($errors['email'])) echo 'id=&quot;email_field&quot;'; ?&gt;&gt;
        &lt;label for=&quot;email&quot;&gt;Email&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
        &lt;input name=&quot;email&quot; type=&quot;text&quot; id=&quot;email&quot; value=&quot;&lt;?php if (isset($post['email'])) echo $post['email']; ?&gt;&quot; /&gt;
    &lt;/div&gt;

    &lt;div &lt;?php if (isset($errors['message'])) echo 'id=&quot;message_field&quot;'; ?&gt;&gt;
        &lt;label for=&quot;message&quot;&gt;Your message&lt;span&gt;*&lt;/span&gt;:&lt;/label&gt;
        &lt;textarea name=&quot;message&quot; rows=&quot;1&quot; cols=&quot;1&quot; id=&quot;message&quot;&gt;&lt;?php if (isset($post['message'])) echo $post['message']; ?&gt;&lt;/textarea&gt;
    &lt;/div&gt;

    &lt;div style=&quot;padding-left:115px;&quot;&gt;
        &lt;img src=&quot;includes/captchaimage.inc.php?width=120&amp;height=40&amp;characters=5&quot; /&gt;
    &lt;/div&gt;

    &lt;div &lt;?php if (isset($errors['security_code'])) echo 'id=&quot;security_code_field&quot;'; ?&gt;&gt;
        &lt;label for=&quot;security_code&quot;&gt;Are you human?&lt;span&gt;*&lt;/span&gt;&lt;/label&gt;
        &lt;input id=&quot;security_code&quot; name=&quot;security_code&quot; type=&quot;text&quot; /&gt;
    &lt;/div&gt;

    &lt;div&gt;
        &lt;label&gt; &amp;nbsp; &lt;/label&gt;
        &lt;input name=&quot;send&quot; type=&quot;submit&quot; id=&quot;send&quot; value=&quot;send&quot; /&gt;
    &lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pe langa fisierul principal de mai sus mai avem nevoie de fisierul care genereaza imaginea cu codul de securitate si anume captchaimage.inc.php care se gaseste in folderul &#8220;includes&#8221; si de fontul folosit pentru generarea codului de securitate si anume <a title="Cum fac un formular de contact?" href="http://www.accesinterzis.ro/myportofolio/includes/monofont.ttf" target="_blank">monofont.ttf</a> care trebuie sa se afle in acelasi folder cu captchaimage.inc.php.</p>
<pre class="brush: php;">
&lt;?php
/*
File: CaptchaSecurityImages.php
Author: Simon Jarvis
Copyright: 2006 Simon Jarvis
Date: 03/08/06
Updated: 07/02/07
Requirements: PHP 4/5 with GD and FreeType libraries
Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php
*/

session_start();

class CaptchaSecurityImages {

	var $font = 'monofont.ttf';

	function generateCode($characters) {
		/* list all possible characters, similar looking characters and vowels have been removed */
		$possible = '23456789bcdfghjkmnpqrstvwxyz';
		$code = '';
		$i = 0;
		while ($i &lt; $characters) {
			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
			$i++;
		}
		return $code;
	}

	function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
		$code = $this-&gt;generateCode($characters);
		/* font size will be 75% of the image height */
		$font_size = $height * 0.75;
		$image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');
		/* set the colours */
		$background_color = imagecolorallocate($image, 255, 255, 255);
		$text_color = imagecolorallocate($image, 51, 51, 51);
		$noise_color = imagecolorallocate($image, 110, 110, 110);
		/* generate random dots in background */
		for( $i=0; $i&lt;($width*$height)/10; $i++ ) {
			imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
		}
		/* generate random lines in background */
		for( $i=0; $i&lt;($width*$height)/150; $i++ ) {
			imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
		}
		/* create textbox and add text */
		$textbox = imagettfbbox($font_size, 0, $this-&gt;font, $code) or die('Error in imagettfbbox function');
		$x = ($width - $textbox[4])/2;
		$y = ($height - $textbox[5])/2;
		imagettftext($image, $font_size, 0, $x, $y, $text_color, $this-&gt;font , $code) or die('Error in imagettftext function');
		/* output captcha image to browser */
		header('Content-Type: image/jpeg');
		imagejpeg($image);
		imagedestroy($image);
		$_SESSION['security_code'] = $code;
	}

}

$width = isset($_GET['width']) ? $_GET['width'] : '120';
$height = isset($_GET['height']) ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) &amp;&amp; $_GET['characters'] &gt; 1 ? $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

?&gt;
</pre>
<p>Pentru un mai bun managment al codului este indicat ca scriptul PHP de deasupra DOCTYPE-ului, care valideaza datele introduse in formular si trimite emailul, sa se bage intr-un fisier include si sa fie apelat prin functia PHP include().</p>
<pre class="brush: php;">
&lt;?php @include('includes/register_user.inc.php'); ?&gt;
</pre>
<p>De asemenea, este indicat ca liniile CSS, care creeaza skinul formularului de contact, din sectiunea &lt;head&gt; &lt;/head&gt; sa fie bagate intr-un fisier CSS extern si apelate cu tagul HTML &lt;link /&gt;.</p>
<pre class="brush: xml;">
&lt;link href=&quot;css/contact_form_design.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; media=&quot;all&quot; /&gt;
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+contact%3F+http://wqoit.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+fac+un+formular+de+contact%3F+http://wqoit.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-comentarii/' rel='bookmark' title='Permanent Link: Cum fac un formular de comentarii?'>Cum fac un formular de comentarii?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-inregistrare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de inregistrare a utilizatorilor?'>Cum fac un formular de inregistrare a utilizatorilor?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-autentificare-a-utilizatorilor/' rel='bookmark' title='Permanent Link: Cum fac un formular de autentificare a utilizatorilor?'>Cum fac un formular de autentificare a utilizatorilor?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-contact/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cum restartez calculatorul din Command Prompt?</title>
		<link>http://www.accesinterzis.ro/index.php/sisteme-de-operare/cum-restartez-calculatorul-din-command-prompt/</link>
		<comments>http://www.accesinterzis.ro/index.php/sisteme-de-operare/cum-restartez-calculatorul-din-command-prompt/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 10:35:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sisteme de operare]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=58</guid>
		<description><![CDATA[A venit zilele trecute la mine un vecin ca sa ii bag pe laptop Windows 7. Laptopul era un Acer Aspire 7520 cu Windows Vista incorporat si limba italiana ca limba default. Asa ca nu intelegeam mai nimic din meniuri. Dar nu trebuia decat sa ii dau un restart ca sa pot intra in BIOS [...]


<strong>Niciun articol asemanator.</strong>]]></description>
			<content:encoded><![CDATA[<p>A venit zilele trecute la mine un vecin ca sa ii bag pe laptop Windows 7. Laptopul era un Acer Aspire 7520 cu Windows Vista incorporat si limba italiana ca limba default. Asa ca nu intelegeam mai nimic din meniuri. Dar nu trebuia decat sa ii dau un restart ca sa pot intra in BIOS sa setez prioritatea bootarii. In timp ce bajbaiam prin meniu si ma chinuiam sa ghicesc care este butonul de restart mi-am adus aminte de o linie de cod care iti permite sa restartezi calculatorul din Command Prompt.</p>
<pre class="brush: plain;">

shutdown -r -t 1
</pre>
<p><strong>-r</strong> inseamna ca PC-ul va fi restartat iar <strong>-t 1</strong> inseamna ca PC-ul va fi restartat peste o secunda.</p>
<p>Tot aceasta linie de cod poate fi folosita cand vrem ca PC-ul sa se stinga peste o anumita perioada. De exemplu, ma uit la un film, e seara tarziu si imi e ca o sa adorm si calculatorul o sa ramana deschis pana maine dimineata. Asa ca scriu in Command Prompt urmatoarea linie de cod:</p>
<pre class="brush: plain;">

shutdown -s -t 7200
</pre>
<p><strong>-s</strong> inseamna ca PC-ul se va stinge si <strong>-t 7200</strong> inseamna ca PC-ul se va stinge peste 7200 de secunde. Adica 2 ore.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+restartez+calculatorul+din+Command+Prompt%3F+http://7ky28.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+restartez+calculatorul+din+Command+Prompt%3F+http://7ky28.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Niciun articol asemanator.</strong></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/sisteme-de-operare/cum-restartez-calculatorul-din-command-prompt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum extrag extensia unui fisier?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:46:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=16</guid>
		<description><![CDATA[Scriptul PHP de mai jos extrage extensia unui fisier. Este util atunci cand dezvoltam formulare de upload sau cand citim dinamic un folder de fisiere. De exemplu, un folder de imagini folosit de o galerie de imagini sau un folder de fonturi folosit de catre un CAPTCHA.

&#60;?php
function extract_extension($file) {
	if (strrpos($file,'.')) {
		$extension = strtolower(substr($file,strrpos($file,'.'),100));
	} else {
		$extension [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-upload-in-php/' rel='bookmark' title='Permanent Link: Cum fac un formular de upload in PHP?'>Cum fac un formular de upload in PHP?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-adrese-de-email-de-pe-o-pagina-web/' rel='bookmark' title='Permanent Link: Cum extrag adrese de email de pe o pagina web?'>Cum extrag adrese de email de pe o pagina web?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Scriptul PHP de mai jos extrage extensia unui fisier. Este util atunci cand dezvoltam formulare de upload sau cand citim dinamic un folder de fisiere. De exemplu, un folder de imagini folosit de o galerie de imagini sau un folder de fonturi folosit de catre un CAPTCHA.</p>
<pre class="brush: php;">
&lt;?php
function extract_extension($file) {
	if (strrpos($file,'.')) {
		$extension = strtolower(substr($file,strrpos($file,'.'),100));
	} else {
		$extension = '';
	}
	return($extension);
}

//example
echo extract_extension(&quot;header.inc.php&quot;);//output-ul va fi .php
?&gt;
</pre>
<p>Cand cream un formular de upload pentru adaugare de poze trebuie sa nu permitem utilizatorilor sa urce pe serverul nostru de hosting orice vor ei. Trebuie sa fim siguri ca ceea ce utilizatorul urca este intr-adevar o poza si nu altceva. Ca de exemplu un executabil malitios sau pagini scam care evident ar face rau serverului, website-ului si imaginii noastre. Deci, de fiecare data cand scriem cod server-side trebuie sa plecam de la premisa ca <strong>ceea ce utilizatorul introduce nu e de incredere</strong>. De aceea, trebuie sa adaugam toate restrictiile necesare.</p>
<p>De obicei, o galerie de imagini se hraneste dinamic cu imaginile unui folder de pe serverul de hosting. Acest script PHP ne ajuta sa fim siguri ca galeria citeste din folder doar imaginile.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+extrag+extensia+unui+fisier%3F+http://hwcwg.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+extrag+extensia+unui+fisier%3F+http://hwcwg.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-fac-un-formular-de-upload-in-php/' rel='bookmark' title='Permanent Link: Cum fac un formular de upload in PHP?'>Cum fac un formular de upload in PHP?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-adrese-de-email-de-pe-o-pagina-web/' rel='bookmark' title='Permanent Link: Cum extrag adrese de email de pe o pagina web?'>Cum extrag adrese de email de pe o pagina web?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cum extrag adrese de email de pe o pagina web?</title>
		<link>http://www.accesinterzis.ro/index.php/programare/cum-extrag-adrese-de-email-de-pe-o-pagina-web/</link>
		<comments>http://www.accesinterzis.ro/index.php/programare/cum-extrag-adrese-de-email-de-pe-o-pagina-web/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:41:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programare]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.accesinterzis.ro/?p=11</guid>
		<description><![CDATA[Scriptul PHP de mai jos extrage adrese de email de pe o pagina web.

&#60;?php
$url = &#34;http:/www.genericwebsite.com/contact.php&#34;;
//getting the source-code of the web page
$sc = file_get_contents($url);
$sc = strtolower($sc);
$forbidden_symbols = array('?', '!', ',', ';', ':', '+', '=', '/', '\\', '&#34;', '\'', '`', '’', '“', '”', '#', '$', '%', '^', '&#38;amp;', '*', '(', ')', '[', ']', '{', '}', '&#124;', [...]


<strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-floodez-o-adresa-de-email/' rel='bookmark' title='Permanent Link: Cum floodez o adresa de email?'>Cum floodez o adresa de email?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/' rel='bookmark' title='Permanent Link: Cum extrag extensia unui fisier?'>Cum extrag extensia unui fisier?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Scriptul PHP de mai jos extrage adrese de email de pe o pagina web.</p>
<pre class="brush: php;">
&lt;?php
$url = &quot;http:/www.genericwebsite.com/contact.php&quot;;
//getting the source-code of the web page
$sc = file_get_contents($url);
$sc = strtolower($sc);
$forbidden_symbols = array('?', '!', ',', ';', ':', '+', '=', '/', '\\', '&quot;', '\'', '`', '’', '“', '”', '#', '$', '%', '^', '&amp;amp;', '*', '(', ')', '[', ']', '{', '}', '|', '&lt;', '&gt;');
//removing all symbols from the source-code less &quot;@&quot;, &quot;.&quot; and &quot;_&quot;
$sc = str_replace($forbidden_symbols, ' ', $sc);
//storing all words from the source-code into an array
$words_found = explode(' ', $sc);

//verifying each word from array if it is an email address
for ($i = 0; $i &lt; count($words_found); $i++) {
	//if the word contains the symbols &quot;@&quot; that means it is an email address
	if (strpos($words_found[$i], '@')) {
		//I make sure that the email address has no empty spaces in the beginning and in the and of it
		$email_address = trim($words_found[$i]);

		//I make sure that the email address has no symbols in the beginning and in the and of it
		//I apply all these cleaning filters because the source-code can be pretty messy
		$first_char = substr($email_address, 0, 1);
		while (!ctype_alpha($first_char)) {
			$email_address = substr($email_address, 1, strlen($email_address));
			$first_char = substr($email_address, 0, 1);
		}

		$last_char = substr($email_address, strlen($email_address) - 1, 1);
		while (!ctype_alpha($last_char)) {
			$email_address = substr($email_address, 0, strlen($email_address) - 1);
			$last_char = substr($email_address, strlen($email_address) - 1, 1);
		}

		//I make sure that the extracted string is really an email address
		if (eregi(&quot;^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$&quot;, $email_address)) {
			echo $email_address.'&lt;br /&gt;';
		}
	}
}
?&gt;
</pre>
<p><span id="more-11"></span></pre>
<p>O caracteristica importanta a scriptului este ca poate rula foarte bine  pe un server local ca EasyPHP sau XAMPP. Nu trebuie sa ruleze neaparat  pe un server de hosting care poate sa fi restrictionat utilizarea  functiei PHP file_get_contents(). Aceasta restrictie se face editand  fisierul php.ini al serverului Apache. Mai exact, urmatoare linie de  cod: allow_url_fopen = Off.</p>
<p>Incepand de la acest script pot fi dezvoltate aplicatii web mult mai  complexe cu multe campuri de formulare, tot felul de scripturi jQuery si  o baza de date unde sa fie stocate adresele de email. Deci, simte-te  liber sa iti dezvolti propria aplicatie bazata pe propriile interese. Eu  doar am prezentat idea de baza. Am aratat cum se poate obtine  codul-sursa al unei pagini web din care putem extrage ce dorim. De  exemplu, adrese de email, URL-uri, cuvinte-chie s.a.m.d.. Depinde ce  doresti.</p>
<p>Inainte sa termin articolul vreau sa mentionez ca scriptul nu are nimic  de a face cu spamming-ul. <span style="text-decoration: underline;">Spamming inseamna mesagerie electronica  nesolicitata</span>. Deci, atat timp cat scriptul nu trimite emailuri  nesolicitate cu reclame scriptul nu poate fi considerat bot de spamming.  Seamana mai mult cu crawlerele motoarelor de cautare (Yahoo, Bing si  evident maretul Google) care aduna informatii de pe Internet sapand  adanc in codul-sursa al paginilor web. Scriptul poate fi adaptat sa  adune URL-uri sau intreg textul de pe pagina web sau ce vrea mintea ta  in loc de adrese de email.</p>
<p>Privitor la adresele de email de pe paginile web, am vazut pe Internet  persoane care incearca sa isi protejeze adresele de email inlocuind "@"  cu "[at]" si "." cu "[dot]". Aceasta metosa are doua dezavantaje: primul  este ca se pot scrie scripturi care foarte usor pot sparge acest  sistem: scrptul cauta in codul-sursa "[at]" in loc de "@". Deci va  obtine adresa de email in acest format: accesinterzis[at]gmail.com.  Urmatorul pas este sa inlocuiasca "[at]" cu "@" folosind functia PHP  str_replace() si va obtine intr-un sfarsit adresa de email adevarata. Al  doilea dezavantaj al metodei este ca adresa de email arata urat.  Asadar, cea mai buna cale de a proteja o adresa de email este de a o  genera pe ecran folosind Javascript asa cum am facut eu in <a title="Contact" href="../index.php/contact/" target="_blank">pagina mea de contact</a>. Avem nevoie doar de cateva  linii de cod:</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
var first_half = &quot;accesinterzis&quot;;
var at = &quot;@&quot;;
var second_half = &quot;gmail.com&quot;;
document.write(first_half + at + second_half);
&lt;/script&gt;
</pre>
<p>Utilizand aceste linii de cod Javascript niciun bot nu poate  extrage adresa de email din codul-sursa al paginii web si adresa de  email arata mult mai friendly in browser. Cand lucram cu Javascript,  principala ingrijorare este ca scriptul Javascript ar putea sa nu fie  cross-browser. Dar in acest caz codul este simplu si nu trebuie sa ne  ingrijoram in aceasta privinta.</p>
<p>Astept sugestii de a imbunatati acest algoritm de extragere a adreselor  de email de pe o pagina web.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Cum+extrag+adrese+de+email+de+pe+o+pagina+web%3F+http://fgzck.th8.us" title="Publica acest articol pe Twitter"><img class="nothumb" src="http://www.accesinterzis.ro/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Cum+extrag+adrese+de+email+de+pe+o+pagina+web%3F+http://fgzck.th8.us" title="Publica acest articol pe Twitter">Publica acest articol pe Twitter</a></p>

<p><strong>Articole asemanatoare:<ul><li><a href='http://www.accesinterzis.ro/index.php/programare/cum-floodez-o-adresa-de-email/' rel='bookmark' title='Permanent Link: Cum floodez o adresa de email?'>Cum floodez o adresa de email?</a></li>
<li><a href='http://www.accesinterzis.ro/index.php/programare/cum-extrag-extensia-unui-fisier/' rel='bookmark' title='Permanent Link: Cum extrag extensia unui fisier?'>Cum extrag extensia unui fisier?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.accesinterzis.ro/index.php/programare/cum-extrag-adrese-de-email-de-pe-o-pagina-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
