Vecka 06, Torsdag 9 Februari 2012 Prenumerera

Funktion för att kontrollera indata lättare i PHP-skript

Det här är en simpel funktion för att kolla indata som är numeriska id. Småsak att göra, men saker som upprepas är det bra att samla i funktioner.

En återkommande uppgift när jag gör skript är att kolla indata som skickas, t.ex. ett id som skickas i adressraden. För att kontrollera sådant i PHP använder man if-satser, men man (jag) vill inte göra en massa sådana, utan så kort kod som möjligt. Då händer det att jag använder en förkortningsmetod som heter ternary operator. Jag ska visa hur ternary operator ser ut, först en vanlig if-sats för att kontrollera indata ”id” som finns i adressen:

<?php
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
	$mitt_id = $_GET['id'];
} else {
	$mitt_id = false;
}
?>

Vi förkortar det med ternary operator, (i pseudokod if this is true ? do this : or else;) :

<?php
$mitt_id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? $_GET['id'] : false;
?>

Det ser lite rörigt ut om man inte är van, det gör koden svårläst och kan ställa till det ibland. Så jag har skapat den här funktionen för att korta ned det ytterligare.

<?php
/**
 * Checks a valued and returns it if it's a numeric
 * or $default_return if it is not a numeric.
 * @param string $input			The name of GET|POST-value to check
 * @param mixed $default_return	What to return if $input is not numeric
 * @param bool $use_post		Check in POST instead of GET
 * @return mixed
 */
 function get_if_numeric($input, $default_return = false, $use_post = false) {
	if ($use_post) {
		$input = isset($_POST[$input]) ? $_POST[$input] : false;		
	} else {
	 	$input = isset($_GET[$input]) ? $_GET[$input] : false;
	}
 	return is_numeric($input) ? $input : $default_return;
 }
?>

Nu kan jag anropa funktionen i min kod väldigt enkelt:

<?php
$mitt_id = get_if_numeric('id');
?>

Smidigt! :)

Lämna en kommentar