Notice: Undefined offset:
Ik krijg deze foutcode, wanneer ik het veld geboortedatum NIET invul
Notice: Undefined offset: 2 in ..../omrekenen.php on line 3
Notice: Undefined offset: 1 in ..../omrekenen.php on line 3
Wanneer ik wel wat invul, dan krijg ik deze niet.
Hoe kan ik oplossen dat wanneer ze perongeluk geen geboortedatum invullen, niet direct deze foutmelding zien?
De code voor omrekenen.php is:
Code (php)
isset en met een test ongelijk op lege string). Daarnaast moet je ook testen op het split karakter. Als een gebruiker niet 10-08-2013, maar 10/08/2013 invult ga je ook de mist in.
Check of er wel iets is ingevuld (met Controleren of de variabele wel bestaat met isset()
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
function age($birthDate) {
if(empty($birthDate)
return '0';
list($day, $month, $year) = explode('-', $birthDate);;
$ageOfPerson = date('Y') - $year;
if ($month > date('m')) {
$ageOfPerson--;
}
if ($month == date('m') && $day > date('d')) {
$ageOfPerson--;
}
$ageOfPerson .= ' jaar';
return $ageOfPerson;
}
?>
function age($birthDate) {
if(empty($birthDate)
return '0';
list($day, $month, $year) = explode('-', $birthDate);;
$ageOfPerson = date('Y') - $year;
if ($month > date('m')) {
$ageOfPerson--;
}
if ($month == date('m') && $day > date('d')) {
$ageOfPerson--;
}
$ageOfPerson .= ' jaar';
return $ageOfPerson;
}
?>
of zoals Frank zei, controleren of de variabele is gezet met isset :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
En als laatste, meest smerige oplossing kan je de notices onderdrukken met een @. (Niet aan te raden, alleen gebruiken als je zeker weet dat het verder geen fouten oplevert) :
Code (php)
Gewijzigd op 11/08/2013 08:29:12 door Erik van Beek
Erik van Beek op 11/08/2013 08:23:40:
En als laatste, meest smerige oplossing kan je de notices onderdrukken met een @. (Niet aan te raden, alleen gebruiken als je zeker weet dat het verder geen fouten oplevert) :
Afgezien van het feit dat het echt een hele, hele, HELE slecht manier is, doe je het ook nog eens behoorlijk fout. De foutmelding komt namelijk niet uit die variabele, maar uit de functie list. Omdat er geen goede datum is ingevuld wordt er door explode een array met maar 1 element teruggegeven, terwijl list in dit geval er drie verwacht. Die fout krijg je dus nog steeds, ongeacht of je die @ gebruikt.
En nee, dan natuurlijk ook niet die @ voor de list functie zetten, want dan ga je in de rest van de functie weer compleet nat.
Met andere woorden, gewoon geen @ gebruiken....
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Vult gebruiker dus niets in, dan is hij geboren op 1 januari 1970 (start tellen computertijd UNIX > TIMESTAMP = 0)
Nee Eddy, dat werkt niet. Dat werkt alleen als er helemaal geen variabele wordt meegegeven. Als je echter een variabele meegeeft met als waarde null, dan is dat waarmee gewerkt zal worden:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function print_me( $text = 'nothing' ){
echo $text;
}
$test = null;
print_me( $test );
?>
function print_me( $text = 'nothing' ){
echo $text;
}
$test = null;
print_me( $test );
?>
resultaat: null (en dus niet 'nothing').
Leest de topic-schrijver nog mee?
Thanks dat jullie meedenken ennn dat deze community nog zo levendig is! :D
- on topic -
Alle variabelen die van buiten komen (zoals $_GET en $_POST) moet je zien als onzeker en 'vervuild'.
Bij deze variabelen moet je dus alle scenario's als mogelijk beschouwen. dat houdt in de praktijk in dat je er van uit moet gaan dat de variabelen niet bestaan of een compleet ongeldige waarde hebben. En dat mag jij allemaal in je PHP script af zien te vangen.
Zo kun je bij een datum veld een functie gebruiken die checkt of de datum die ingegeven wordt wel geldig is, want een datum 25-63-2012 is natuurlijk onjuist. Maar ook kun je gaan bedenken of het wel een datum in het verleden mag zijn, of misschien juist een datum in het verleden MOET zijn. Een veld waar je een numerieke waarde verwacht kun je ook testen of deze waarde wel numeriek is. Maar ook of hij bijvoorbeeld wel groter is als nul. Bij een tekstveld kun je controleren of de tekst wel geldige tekens bevat en of deze niet te lang of te kort is.
er zijn natuurlijk voorbeelden te geven maar eigenlijk is het allemaal afhankelijk van de situatie. Ik hoop dat ik je zo aan het denken heb gezet :-)