Undefined index
Ik ben bezig met een PHP scriptje, maar jammergenoeg heb ik temaken met een foutmelding. Ik heb het zelf niet weten op te lossen. Zouden jullie er ook naar kunnen kijken.
Ten eerste heb ik een invoer pagina gemaakt;
Code (php)
1
2
3
4
5
2
3
4
5
<form ACTION="makesearch2.php" METHOD="post">
<input type="checkbox" name="MachineID" value="MachineID">MachineID<br>
<input type="submit" value="Create" > <br>
</form>
<input type="checkbox" name="MachineID" value="MachineID">MachineID<br>
<input type="submit" value="Create" > <br>
</form>
Als ik op create klik komt de verwerkingspagina;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$MachineID=strip_tags(stripslashes(trim($_POST['MachineID'])));
print ("$MachineID<br>\n");
$doorgaan=true;
if ($doorgaan==true)
{
$bn="gegevens.txt";
$Open=fopen($bn,"a");
if ($Open)
{
$MachineID="Naam: ".$MachineID ;
fwrite($Open,"$MachineID\n");
fwrite($Open,"------------------------------\n");
fclose($Open);
}
}
?>
$MachineID=strip_tags(stripslashes(trim($_POST['MachineID'])));
print ("$MachineID<br>\n");
$doorgaan=true;
if ($doorgaan==true)
{
$bn="gegevens.txt";
$Open=fopen($bn,"a");
if ($Open)
{
$MachineID="Naam: ".$MachineID ;
fwrite($Open,"$MachineID\n");
fwrite($Open,"------------------------------\n");
fclose($Open);
}
}
?>
En op de verwerkingspagina gaat het dus fout, ik krijg de foutmelding Notice: Undefined index: MachineID in C:\Program Files\EasyPHP 3.0\www\makesearch2.php on line 2.
Ik zou het fijn vinden als iemand me zou kunnen helpen om hier een oplossing voor te vinden.
Met vriendelijke groet,
Jan Volker
De variabele MachineID bestaat niet in de $_POST array.
En hoe voeg ik hem toe?
is dat wel wat jij wil???
Ja, aan de hand van de checkbox op de invoer pagina kan je bepalen welke je tezien krijgt op de resultpagina. Ik heb alleen MachineID geschreven om het kort te houden.
$_POST['MachineID'] bestaat niet.
Hoe kan ik hem dan aanmaken?
Als ik
verander in
Krijg ik als resultaat "1" i.p.v. "MachineID"
Dat komt doordat isset() true of false oplevert (1 of 0)
Op http://us.php.net/isset zie ik ook niks daarover
Notice betekent iets als 'merk op'. Over het algemeen kan dat geen kwaad voor de rest van de code.
De gemakkelijke oplossing: zet de error melding af.
Ergens bovenaan je code zet je
Om de opmerking echt weg te krijgen, controleer je eerst of de variabele bestaat en dan pas controleer je wat de waarde is.
Bv;
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if ( isset($_POST['MachineID']) )
{
$MachineID=strip_tags(stripslashes(trim($_POST['MachineID'])));
}
// eventueel met else een default afhandeling
?>
if ( isset($_POST['MachineID']) )
{
$MachineID=strip_tags(stripslashes(trim($_POST['MachineID'])));
}
// eventueel met else een default afhandeling
?>
Naast isset() is er ook nog empty().
Empty controleert of de waarde bestaat en of er een waardevolle waarde in zit.
empty geeft een false indien de waarde 0 of null of "" (en nog een aantal) is.
Tenzij deze waarden in jouw applicatie wel een geldige waarde kunnen zijn, kan je dus schrijven:
Dit levert geen notice op.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Emmanuel Delay schreef op 19.03.2009 13:50:
EDe gemakkelijke oplossing: zet de error melding af.
Dat is geen oplossing maar struisvogelgedrag.
Bedankt.
SanThe schreef op 19.03.2009 14:58:
Dat is geen oplossing maar struisvogelgedrag.
Vandaar dat ik ook de echte oplossing geef.
Okay, nu wijk ik wel af...
Soms is het trouwens zeer belangrijk dat de error reporting niet zomaar op je scherm ziet. Denk bv. aan een een Ajax response, gecodeerd in JSON. Indien php dan nog opmerkingen geeft, gaat de string niet door de eval() (javascript) raken. Je hebt dan dus absoluut niets aan die error report, dus in dat geval is het geen struisvogelgedrag. Je kan eventueel de opmerkingen, en waarschuwingen in een variabele mee coderen.
Ik spreek over JSON he. Dat moet door eval().
@Emmanuel Delay en @WillemJan Z: Bedankt voor deze info. Zo zie je maar weer, zelfs ik ben niet te oud om weer wat te leren. ;)
Emmanuel Delay schreef op 19.03.2009 15:48:
Ik spreek over JSON he. Dat moet door eval().
Ja, maar wil je dan niet weten of de string die je terug krijgt ook daadwerkelijk een JSON string is? Zoals in Prototype heb je de sanitize parameter, zodat niet alle javascript lukraak wordt uitgevoerd.
Maar ja, daar ging dit topic niet over :P
Ik heb de (soms kwalijke) gewoonte om niet te veel van anderen te gebruiken. Ik gebruik jQuery, maar dan enkel voor een klein aantal dingen.
Een voorbeeld: een call back krijgen wanneer een image helemaal is geladen. Zelf krijg ik dat niet voor mekaar voor alle webbrowsers.
Maar we dwalen inderdaad wel heel erg af. :)