Een 'Notice:' negeren?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$toilet_1 = check_num($_POST['toilet'], 0);
function check_input($data) {
if (!empty($data)) {
$data = mysql_real_escape_string($data);
$data = htmlspecialchars($data);
$data = trim($data);
}
return $data;
}
function check_num($data, $none) {
if (is_numeric($data) AND strlen($data) <= 100) {
$data = check_input($data);
} else {
$data = $none;
}
return $data;
}
?>
$toilet_1 = check_num($_POST['toilet'], 0);
function check_input($data) {
if (!empty($data)) {
$data = mysql_real_escape_string($data);
$data = htmlspecialchars($data);
$data = trim($data);
}
return $data;
}
function check_num($data, $none) {
if (is_numeric($data) AND strlen($data) <= 100) {
$data = check_input($data);
} else {
$data = $none;
}
return $data;
}
?>
Maar als $_POST['toilet'] niet is gezet, dus het formulier is niet verzonden krijg ik natuurlijk de notice:
- Notice: Undefined index: toilet in....
Is dit erg? Loopt hierdoor het script ook vertraging op?
Of kan ik het wel laten staan want er kan eigenlijk niets mee gebeuren aangezien er alleen maar nummers door kunnen komen..
Gewijzigd op 13/09/2011 02:37:42 door Ki ma
je moet nooit errors negeren
@jelmer De $data is altijd al gezet, als er niets in staat is het vanzelf 0.
Als iets numeric is, waarom dan nog al die andere functies er op los laten?
Dat klopt, is wat overbodig misschien alleen de strlen() is nog wel nuttig. Ook alleen als je geen limit hebt opgesteld in de SQL maar toch.
Ki ma op 13/09/2011 02:37:06:
Ook bij 'normale' gegevens zou ik het niet op deze manier doen. Wat is de (toegevoegde) waarde?
Als je de gegevens in een db wilt zetten, volstaat mysql_real_escape_string bij je query. Verder zou ik werken met de originele input.
Controleren of de lengte van een getal kleiner is dan 100 vind ik ook wat overdreven; welk doel heb je daarmee voor ogen?
Het enige zinvolle van je code vind ik is_numeric.
Code (php)
1
2
3
2
3
$data = mysql_real_escape_string($data);
$data = htmlspecialchars($data);
$data = trim($data);
$data = htmlspecialchars($data);
$data = trim($data);
Gebruik ik onder andere ook bij andere inputs bijvoorbeeld text inputs.
Dit vooral omdat mysql_real_escape_string alleen niet veilig genoeg is.
"Simpel voorbeeldje:
$sql = "DELETE FROM table WHERE id = " . mysql_real_escape_string($_POST['id']);
Je roept pagina aan met in het id-vak "1 OR id > 0". De query wordt dan:
DELETE from table WHERE id = 1 OR id > 0.
Beter is dus om 't te casten naar een integer:
$sql = "DELETE FROM table WHERE id = " . (int) $_POST['id'];
Gooi je wat anders dan 'n int erin komt er 0 uit en wordt het
DELETE from table WHERE id = 0
Misschien dan eerst een htmlspecialchars() eroverheen doen ?
Nee, want je kan bijvoorbeeld ook "OR id != 0" meegeven, en daar doet htmlspecialchars() volgens mij niets mee."