Tartalomjegyzék

< PHP

PHP Űrlapfeldolgozás

Űrlap

<form action="feldolgoz.php" method="POST" >
 
<input type="radio" name="nem" value="ferfi" /> Férfi<br />
<input type="radio" name="nem" value="no" /></br />
<input type="submit" value="Mehet" />
 
</form>

A GET és a POST metódus

A metódusokról

Az böngésző egy űrlap tartalmát két módon küldheti el a webszervernek:

A legszembetűnőbb, hogy a GET metódus használata esetén az átadott paraméterek a böngésző címsorában is látszanak. A POST metódus esetén, nem.

Az URL maximális hossza

A HTTP protokoll nem határozza meg egy URL hosszát.

A böngészők adatai
IE Firefox Safari Opera Chrome
2048 65 536 80 000 190000 ?
Webszerverek
Apache IIS Perl HTTP::Daemon
4000
alapértelmezetten
16 384 8000

A w3schools 2048 karakterben adja meg maximumot. Nagy Gusztáv a könyvében 2000 körül adja meg a határt. A W3C konzorcium a 256 karakteres határt weboldalukon tévhitként kezeli, amelyet néhány webszerveren beállított limit miatt vált ismerté, a denial-of-service támadások korlátozására.

Az apache webszerveren a LimitRequestLine direktíva szolgál az érték beállítására. Használatára két példa:

LimitRequestLine 4094
LimitRequestLine 8190

1855 karakteres URL:

GET POST
Adathossz-korlát maximum 2048 Nincs korlátozás
Kedvencek Kedvencekbe tehető A kedvencekben nem menthető
Vissza gomb/frissítés Nincs Az adatok újra elküldésre kerülnek
Kódolás application/x-www-form-urlencoded application/x-www-form-urlencoded
multipart/form-data
bináris adatok számára multipart kódolás
Előzmények A paraméterek megmaradnak
az előzményben
A paraméterek nem
szerepelnek az előzményben.
Adattípus-korlát csak ASCII Nincs korlátozás,
bináris adat is megengedett
Biztonság A paraméterek
látszanak az URL-ben
Paraméterek nem látszanak,
nem tárolódnak, és
az előzményekben sem szerepelnek

Űrlap feldolgozó

feldolgoz.php
$valasz = $_POST['nem'];

Annak ellenőrzése, hogy tartalmaz-e értéket egy változó:

empty($_POST["nev"])
empty($_GET["nev"])
if(empty($_GET['valami'])) {
    echo "Nincs ilyen";
}

Fájlfeltöltés

Űrlap

<form method="post" action="upload.php" enctype="multipart/form-data">
  <input type="file" name="kep" />
  <input type="submit" value="Feltöltés" />
</form>

A $_FILES változó

Az első paraméter a form input elemének a name értéke, a második pedig az index, amely „name”, „type”, „size”, „tmp_name” vagy „error” lehetnek. Az alábbiakhoz hasonlóan használhatjuk:

$_FILES["file"]["name"] - A feltöltött fájl neve.
$_FILES["file"]["type"] - A feltöltött fájl típusa.
$_FILES["file"]["size"] - A feltöltött fájl mérete byte-okban.
$_FILES["file"]["tmp_name"] - Az ideiglenes fájl neve, amelyen a szerveren tárolásra kerül.
$_FILES["file"]["error"] - A feltöltés ezzel a kóddal tér vissza hiba esetén.

Fogadó script

upload.php
<?php
 
if ($_FILES["file"]["error"] > 0)
{
  echo "Hiba: " . $_FILES["file"]["error"] . "<br />";
}
else
{
  echo "Feltöltés: " . $_FILES["file"]["name"] . "<br />";
  echo "Típus: " . $_FILES["file"]["type"] . "<br />";
  echo "Méret: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Tárolva itt: " . $_FILES["file"]["tmp_name"];
}
?>

Feldolgozó script korlátozásokkal

upload.php
<?php
 
print <<< EOT
<!DOCTYPE html>
<html>
<head>
<title>Feltöltő</title>
<meta charset="utf-8" />
</head>
<body>
 
EOT;
 
 
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["kepfile"]["name"]));
 
if(empty($_FILES["kepfile"]["name"]))
{
	echo "Nem adtál meg fájlt!";
}
else
{
	if (!(
		($_FILES["kepfile"]["type"] == "image/gif")   ||
		($_FILES["kepfile"]["type"] == "image/jpeg")  ||
	        ($_FILES["kepfile"]["type"] == "image/pjpeg") ||
	        ($_FILES["kepfile"]["type"] == "image/png"))
	  )
	{
		echo "Tiltott fájltípus";
	}
	else
	{
		if (!($_FILES["kepfile"]["size"] < 20000))
		{
			echo "Túl nagy fájlméret";
		}
		else
		{
			if(!in_array($extension, $allowedExts))
			{
				echo "Tiltott kiterjesztés";
			}
			else
			{
   				if ($_FILES["kepfile"]["error"] > 0)
    			{
			   		echo "Hiba: " . $_FILES["kepfile"]["error"] . "<br />";
   				}
				else
				{
					echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "<br />";
					echo "Típus: " . $_FILES["kepfile"]["type"] . "<br />";
					echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb<br />";
					echo "Eltárolva itt: " . $_FILES["kepfile"]["tmp_name"];
			   	}
			}
		}
	}
}
 
 
 
print "</body></html>";
 
?>

Feltöltött fájl elmentése

upload.php
<?php
 
print <<< EOT
<!DOCTYPE html>
<html>
<head>
<title>Feltöltő</title>
<meta charset="utf-8" />
</head>
<body>
 
EOT;
 
 
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["kepfile"]["name"]));
 
if(empty($_FILES["kepfile"]["name"]))
{
	echo "Nem adtál meg fájlt!";
}
else
{
	if (!(
	            ($_FILES["kepfile"]["type"] == "image/gif")   ||
	            ($_FILES["kepfile"]["type"] == "image/jpeg")  ||
	            ($_FILES["kepfile"]["type"] == "image/pjpeg") ||
	            ($_FILES["kepfile"]["type"] == "image/png"))
	   )
	{
		echo "Tiltott fájltípus";
	}
	else
	{
		if (!($_FILES["kepfile"]["size"] < 200000))
		{
			echo "Túl nagy fájlméret";
		}
		else
		{
			if(!in_array($extension, $allowedExts))
			{
				echo "Tiltott kiterjesztés";
			}
			else
			{
				if ($_FILES["kepfile"]["error"] > 0)
				{
					echo "Hiba: " . $_FILES["kepfile"]["error"] . "<br />";
				}
				else
				{
					echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "<br />";
					echo "Típus: " . $_FILES["kepfile"]["type"] . "<br />";
					echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb<br />";
					echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."<br />";
					if (file_exists("upload/" . $_FILES["kepfile"]["name"]))
					{
						echo "A " .$_FILES["kepfile"]["name"] . " fájl már létezik. ";
					}
					else
					{
						move_uploaded_file($_FILES["kepfile"]["tmp_name"], "upload/" 
                                                . $_FILES["kepfile"]["name"]);
						echo "Végleg tárolva itt: " . "upload/" . $_FILES["kepfile"]["name"];
					}
				}
			}
		}
	}
}
 
 
 
print "</body></html>";
 
?>

Esetleg így:

upload2.php
<?php
 
print <<< EOT
<!DOCTYPE html>
<html>
<head>
<title>Feltöltő</title>
<meta charset="utf-8" />
</head>
<body>
 
EOT;
 
$maxmeret = 20000;
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["kepfile"]["name"]));
 
if(empty($_FILES["kepfile"]["name"]))
{
	echo "Nem adtál meg fájlt!";
}
else
{
	$upload = true;
	if (!(
	            ($_FILES["kepfile"]["type"] == "image/gif")   ||
	            ($_FILES["kepfile"]["type"] == "image/jpeg")  ||
	            ($_FILES["kepfile"]["type"] == "image/pjpeg") ||
	            ($_FILES["kepfile"]["type"] == "image/png"))
	   )
	{
		echo "Tiltott fájltípus<br />";
		$upload = false;
	}
 
 
	if ($_FILES["kepfile"]["size"] > $maxmeret)
	{
		echo "Túl nagy fájlméret<br />";
		$upload = false;	
	}
 
 
	if(!in_array($extension, $allowedExts))
	{
		echo "Tiltott kiterjesztés<br />";
		$upload = false;
	}
 
 
	if ($upload)
	{
		if ($_FILES["kepfile"]["error"] > 0)
		{
			echo "Hiba: " . $_FILES["kepfile"]["error"] . "<br />";
			$upload = false;
		}
		else
		{
			echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "<br />";
			echo "Típus: " . $_FILES["kepfile"]["type"] . "<br />";
			echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb<br />";
			echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."<br />";
		}
 
		if (file_exists("upload/" . $_FILES["kepfile"]["name"]))
		{
			echo "A " .$_FILES["kepfile"]["name"] . " fájl már létezik. <br />";
		}
		else
		{
			move_uploaded_file($_FILES["kepfile"]["tmp_name"], "upload/"
			. $_FILES["kepfile"]["name"]);
			echo "Végleg tárolva itt: " . "upload/" . $_FILES["kepfile"]["name"]."<br />";
		}
	}
}
 
 
 
print "</body></html>";
 
?>

Ugyanaz átrendezve:

upload2.php
<?php
 
print <<< EOT
<!DOCTYPE html>
<html>
<head>
<title>Feltöltő</title>
<meta charset="utf-8" />
</head>
<body>
 
EOT;
 
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["kepfile"]["name"]));
 
if(empty($_FILES["kepfile"]["name"])) {
    echo "Nem adtál meg fájlt!";
}elseif (!(
	       ($_FILES["kepfile"]["type"] == "image/gif")   ||
	       ($_FILES["kepfile"]["type"] == "image/jpeg")  ||
	       ($_FILES["kepfile"]["type"] == "image/pjpeg") ||
	       ($_FILES["kepfile"]["type"] == "image/png"))
	   ) {
    echo "Tiltott fájltípus";
}elseif (!($_FILES["kepfile"]["size"] < 200000)) {
    echo "Túl nagy fájlméret";
}elseif(!in_array($extension, $allowedExts)) {
    echo "Tiltott kiterjesztés";
}elseif ($_FILES["kepfile"]["error"] > 0) {
    echo "Hiba: " . $_FILES["kepfile"]["error"] . "<br />";
}else {
    echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "<br />";
    echo "Típus: " . $_FILES["kepfile"]["type"] . "<br />";
    echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb<br />";
    echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."<br />";
    if (file_exists("upload/" . $_FILES["kepfile"]["name"])) {
       	echo "A " .$_FILES["kepfile"]["name"] . " fájl már létezik. ";
    }else {
	move_uploaded_file($_FILES["kepfile"]["tmp_name"], "upload/" 
           . $_FILES["kepfile"]["name"]);
	echo "Végleg tárolva itt: " . "upload/" . $_FILES["kepfile"]["name"];
    }
}
 
print "</body></html>";

Egyéb

Esetleg tegyük a feltöltéskönyvtárat változóba:

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

Esetleg megvizsgálhatjuk a mentés sikerességét:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "A fájl érvényes és sikeresen feltöltésre került\n";
} else {
    echo "Lehetséges fájlfeltöltés támadás!\n";
}

Időfeldolgozás

Az input elem date típusát így használjuk:

<input type="date" name="datum">

Ha megkapjuk dátumot egy másik PHP scriptben, annak formátuma:

2020-01-10T18:00:00.000Z

Ha adatbázisba akarjuk írni, át kell alakítani:

$date = $_POST['date'];
$standardDate("Y-m-d H:i:s", strtotime($date));
$sql="insert into tabla1 set date=$standardDate";

Önmagát hívó script

A script vár egy számot, majd mindig eltárolja.

index.php
<?php
$osszeg = 0;
if(isset($_GET['szam']) ) {
    $szam = $_GET['szam'];
    $osszeg = $_GET['osszeg'];
    $osszeg = $osszeg + $szam;
}
 
echo <<<EOT
<p>
Összeg: $osszeg
</p>
<form method="get">
 
<input type="hidden" name="osszeg" value="$osszeg">
 
<label>Szám</label>
<input type="text" name="szam">
<br>
<button type="submit">Hozzáad</button>
 
</form>
EOT;

Vegyük észre, hogy a form elemnek nincs action tulajdonsága.

Forrás