Notice: Undefined offset:
Hallo allemaal,
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:
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)
Check of er wel iets is ingevuld (met 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.
Controleren of de variabele wel bestaat met isset()
Je kan bijvoorbeeld als je geen geboordedatum invult altijd de waarde 0 terug geven :
of zoals Frank zei, controleren of de variabele is gezet met isset :
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)
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....
Je kan bij functies ook een standaard-waarde aangeven. Dat als een variabele niet is gevuld (of leeg is), dan pakt hij de standaard:
Vult gebruiker dus niets in, dan is hij geboren op 1 januari 1970 (start tellen computertijd UNIX > TIMESTAMP = 0)
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)
Er worden wel veel foute adviezen gegeven helaas.
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:
resultaat: null (en dus niet 'nothing').
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').
oei. Het is goed dat Erwin hier zo goed oplet want die heeft wat mij betreft helemaal gelijk.
Leest de topic-schrijver nog mee?
Leest de topic-schrijver nog mee?
Ik lees zeker mee! Ben een lange tijd uit php geweest, dus ik moet een heleboel in me opnemen weer, dus het duurt wat langer voordat ik alles snap weer...
Thanks dat jullie meedenken ennn dat deze community nog zo levendig is! :D
Thanks dat jullie meedenken ennn dat deze community nog zo levendig is! :D
Natuurlijk, PHP is nog steeds hot.
- 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 :-)
- 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 :-)




