Toegepast
Laat ons dit toepassen. We maken een datum die juist geformatteerd is. Jaartallen met vier cijfers, de rest telkens twee cijfers.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if (isset($_GET['y'], $_GET['m'], $_GET['d'])) {
echo sprintf('%04d-%02d-%02d',
$_GET['y'],
$_GET['m'],
$_GET['d']
);
}
echo '<br>Vul je geboortedatum in:<form action=""><input placeholder="YYYY" name="y"> <input placeholder="MM" name="m"> <input placeholder="DD" name="d"> <input type="submit" value="GO"></form>'
?>
if (isset($_GET['y'], $_GET['m'], $_GET['d'])) {
echo sprintf('%04d-%02d-%02d',
$_GET['y'],
$_GET['m'],
$_GET['d']
);
}
echo '<br>Vul je geboortedatum in:<form action=""><input placeholder="YYYY" name="y"> <input placeholder="MM" name="m"> <input placeholder="DD" name="d"> <input type="submit" value="GO"></form>'
?>
Laat ons het even hebben over de sql-string.
Sprintf is in mijn ogen de meest duidelijke en krachtige manier om te helpen escapen, om te beschermen tegen injection.
Wat vooral handig is, is dat je de sql-string volledig kan zien, in een oogopslag. De string wordt niet onderbroken.
Je ziet ook welk soort gegeven moet komen op de placeholder; en je weet dat de dataTypes gerespecteerd zullen worden.
Je kan die string dus ook hergebruiken, zonder dat je op voorhand moet weten wat de key is van de POST-variabele
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// uiteraard komen deze gegevens normaal uit data van een formulier
$_POST['username'] = 'John';
$_POST['password'] = 'repelsteeltje';
$_POST['gewicht'] = 78.23;
$_POST['kinderen'] = 3;
$sql_format = "INSERT INTO users (username, password, gewicht, kinderen) VALUES ('%s', '%s', %.3f, %d)";
$sql = sprintf($sql_format,
mysql_real_escape_string($_POST['username']),
mysql_real_escape_string($_POST['password']),
$_POST['gewicht'], // Hier is heen enkele andere bescherming nodig
$_POST['kinderen'] // Hier is heen enkele andere bescherming nodig
);
echo $sql; // INSERT INTO users (username, password, gewicht, kinderen) VALUES ('John', 'repelsteeltje', 78.230, 3)
?>
// uiteraard komen deze gegevens normaal uit data van een formulier
$_POST['username'] = 'John';
$_POST['password'] = 'repelsteeltje';
$_POST['gewicht'] = 78.23;
$_POST['kinderen'] = 3;
$sql_format = "INSERT INTO users (username, password, gewicht, kinderen) VALUES ('%s', '%s', %.3f, %d)";
$sql = sprintf($sql_format,
mysql_real_escape_string($_POST['username']),
mysql_real_escape_string($_POST['password']),
$_POST['gewicht'], // Hier is heen enkele andere bescherming nodig
$_POST['kinderen'] // Hier is heen enkele andere bescherming nodig
);
echo $sql; // INSERT INTO users (username, password, gewicht, kinderen) VALUES ('John', 'repelsteeltje', 78.230, 3)
?>
Verder is het aan jullie om meer van sprintf te ontdekken.
Er staat een schat aan informatie en voorbeelden op php.net