Een 'Notice:' negeren?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ki ma

ki ma

13/09/2011 02:37:06
Quote Anchor link
Ik heb een klein scriptje gemaakt om de input te controleren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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
 
PHP hulp

PHP hulp

30/07/2021 15:34:20
 
Gerhard l

gerhard l

13/09/2011 07:02:41
Quote Anchor link
eerst controleren of er wel iets gepost is lijkt mij

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if($_SERVER['REQUEST_METHOD' == 'POST'){
//form is gepost

    if($_POST['toilet']){
    //toilet is gezet
        $toilet_1 = check_num($_POST['toilet'], 0);
    }
}

?>
 
Vincent Huisman

Vincent Huisman

13/09/2011 07:03:11
Quote Anchor link
gewoon een isset er voor zetten.

je moet nooit errors negeren
 
Jelmer -

Jelmer -

13/09/2011 07:22:49
Quote Anchor link
Ander trucje met references:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function check_num(&$data, $none) {
    if (isset($data) && is_numeric($data) AND strlen($data) <= 100) {
        $data = check_input($data);
    }
else {
        $data = $none;
    }

    return $data;
}


$toilet_1 = check_num($_POST['toilet'], 0);
?>
 
Ki ma

ki ma

13/09/2011 12:42:41
Quote Anchor link
@jelmer De $data is altijd al gezet, als er niets in staat is het vanzelf 0.
 
- SanThe -

- SanThe -

13/09/2011 13:16:57
Quote Anchor link
Als iets numeric is, waarom dan nog al die andere functies er op los laten?
 
Ki ma

ki ma

13/09/2011 13:41:09
Quote Anchor link
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.
 
Obelix Idefix

Obelix Idefix

13/09/2011 14:59:10
Quote Anchor link
Ki ma op 13/09/2011 02:37:06:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
        $data = mysql_real_escape_string($data);
        $data = htmlspecialchars($data);
        $data = trim($data);


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.
 
Ki ma

ki ma

14/09/2011 17:20:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
        $data = mysql_real_escape_string($data);
        $data = htmlspecialchars($data);
        $data = trim($data);
[/quote]

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."
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.