[[oktatas:programozás:php|< PHP]] ====== PHP Űrlapfeldolgozás ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2014 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== Űrlap =====
Férfi

===== 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: * GET metódus * POST metódus 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: * http://www.seomofo.com/experiments/title-and-h1-of-this-post-but-for-the-sake-of-keyword-prominence-stuffing-im-going-to-mention-it-again-using-various-synonyms-stemmed-variations-and-of-coursea-big-fat-prominent-font-size-heres-the-stumper-that-stumped-me-what-is-the-max-number-of-chars-in-a-url-that-google-is-willing-to-crawl-and-index-for-whatever-reason-i-thought-i-had-read-somewhere-that-googles-limit-on-urls-was-255-characters-but-that-turned-out-to-be-wrong-so-maybe-i-just-made-that-number-up-the-best-answer-i-could-find-was-this-quote-from-googles-webmaster-trends-analyst-john-mueller-we-can-certainly-crawl-and-index-urls-over-1000-characters-long-but-that-doesnt-mean-that-its-a-good-practice-the-setup-for-this-experiment-is-going-to-be-pretty-simple-im-going-to-edit-the-permalink-of-this-post-to-be-really-really-long-then-im-going-to-see-if-google-indexes-it-i-might-even-see-if-yahoo-and-bing-index-iteven-though-no-one-really-cares-what-those-assholes-are-doing-url-character-limits-unrelated-to-google-the-question-now-is-how-many-characters-should-i-make-the-url-of-this-post-there-are-a-couple-of-sources-ill-reference-to-help-me-make-this-decision-the-first-is-this-quote-from-the-microsoft-support-pages-microsoft-internet-explorer-has-a-maximum-uniform-resource-locator-url-length-of-2083-characters-internet-explorer-also-has-a-maximum-path-length-of-2048-characters-this-limit-applies-to-both-post-request-and-get-request-urls-the-second-source-ill-cite-is-the-http-11-protocol-which-says-the-http-protocol-does-not-place-any-a-priori-limit-on-the-length-of-a-uri-servers-must-be-able-to-handle-the-uri-of-any-resource-they-serve-and-should-be-able-to-handle-uris-of-unbounded-length-if-they-provide-get-based-forms-that-could-generate-such-uris-a-server-should-return-414-request-uri-too-long-status-if-a-uri-is-longer.html ^ ^ 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ó ===== $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 ====
==== 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 ==== 0) { echo "Hiba: " . $_FILES["file"]["error"] . "
"; } else { echo "Feltöltés: " . $_FILES["file"]["name"] . "
"; echo "Típus: " . $_FILES["file"]["type"] . "
"; echo "Méret: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; echo "Tárolva itt: " . $_FILES["file"]["tmp_name"]; } ?>
==== Feldolgozó script korlátozásokkal ==== Feltöltő 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"] . "
"; } else { echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "
"; echo "Típus: " . $_FILES["kepfile"]["type"] . "
"; echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb
"; echo "Eltárolva itt: " . $_FILES["kepfile"]["tmp_name"]; } } } } } print ""; ?>
==== Feltöltött fájl elmentése ==== Feltöltő 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"] . "
"; } else { echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "
"; echo "Típus: " . $_FILES["kepfile"]["type"] . "
"; echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb
"; echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."
"; 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 ""; ?>
Esetleg így: Feltöltő 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
"; $upload = false; } if ($_FILES["kepfile"]["size"] > $maxmeret) { echo "Túl nagy fájlméret
"; $upload = false; } if(!in_array($extension, $allowedExts)) { echo "Tiltott kiterjesztés
"; $upload = false; } if ($upload) { if ($_FILES["kepfile"]["error"] > 0) { echo "Hiba: " . $_FILES["kepfile"]["error"] . "
"; $upload = false; } else { echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "
"; echo "Típus: " . $_FILES["kepfile"]["type"] . "
"; echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb
"; echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."
"; } 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 ""; ?>
Ugyanaz átrendezve: Feltöltő 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"] . "
"; }else { echo "Feltöltés: " . $_FILES["kepfile"]["name"] . "
"; echo "Típus: " . $_FILES["kepfile"]["type"] . "
"; echo "Méret: " . ($_FILES["kepfile"]["size"] / 1024) . " Kb
"; echo "Ideiglenesen tárolva itt: " . $_FILES["kepfile"]["tmp_name"]."
"; 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 "";
==== 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: 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. Összeg: $osszeg


EOT;
Vegyük észre, hogy a form elemnek nincs action tulajdonsága. ===== Forrás ===== * http://www.faqs.org/rfcs/rfc2068.html (2014) * http://www.boutell.com/newfaq/misc/urllength.html (2014) * http://stackoverflow.com/questions/812925/what-is-the-maximum-possible-length-of-a-query-string (2014) * http://www.w3schools.com/tags/ref_httpmethods.asp (2014) * http://www.w3.org/2001/tag/doc/get7#myths (2014) * http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline (2014)