Undefined variable
Pagina: « vorige 1 2 3 volgende »
inderdaad :-)
Stap 1 is dus om een standaard variabele in te stellen.
In het script kom ik variabelen tegen die ik niet als true/false kan instellen.
Zoals $result (success, $error_empty, $error_noemail) en $info (string).
Hoe pak ik dat aan?
http://code.tutsplus.com/articles/creating-a-simple-contact-form-for-simple-needs--wp-27893
Guido
Het is eigenlijk een beetje hoe je het plannetje trekt.
Als ik bijvoorbeeld een contactformulier schrijf dan vraag ik om een emailadres. Dat is ook een string.
De eerste keer is het contactformulier helemaal leeg. dan wordt het ingevuld en verstuurd en wordt het emailadres getest (of liever gevalideerd) opdat het een geldig emailadres is. Stel dat dit het niet is dan wil ik niet dat de gebruiker alles weer opnieuw moet invullen. Dus toon ik de pagina opnieuw maar met alle velden weer ingevuld zoals ze verstuurd waren.
Na dit hele verhaal is belangrijk om te lezen wat nu de allereerste waarde van $email moet worden. Een lege string dus want dat is wat de gebruiker de allereerste keer moet zien: een leeg invoerveld waar hij zijn email moet invullen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// initialisatie
$email = '';
// als het formulier verzonden is:
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email = $_POST['email'];
if(validate($email))
{
// indien de validatie gelukt is dan sturen we hem door naar een bedankpagina en stopt het script
header('Location: bedankt.html');
exit;
}
}
?>
<form action="" method="post">
<input type="email" name="email" value="<?php echo $email; ?>" />
<button type="submit">Verzenden</button>
</form>
// initialisatie
$email = '';
// als het formulier verzonden is:
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email = $_POST['email'];
if(validate($email))
{
// indien de validatie gelukt is dan sturen we hem door naar een bedankpagina en stopt het script
header('Location: bedankt.html');
exit;
}
}
?>
<form action="" method="post">
<input type="email" name="email" value="<?php echo $email; ?>" />
<button type="submit">Verzenden</button>
</form>
Gewijzigd op 16/03/2015 20:48:25 door Frank Nietbelangrijk
Dan blijft mijn vraag, hoe set ik default waarde van variabele als er meerdere antwoorden mogelijk zijn?
Zoals $result ($success, $error_empty, $error_noemail)
Gewoon eentje kiezen?
Guido
stel je moet bijhouden of iemand ingelogd is.
Standaard is dat niet het geval, dus: $ingelogd = false;
Pas als je ziet dat in de session staat dat persoon is ingelogd, maar je van $ingelogd = true;
Of als een inlog form juist ingevuld is.
Dat zet je standaard dus niet op true.
Net zo met je $result.
Niet standaard gaan juichen dat het gelukt is, maar pas als de mail werkelijk de deur uit is.
Code (php)
Aangezien iemand nog 0 jaar oud kan zijn valt de nul af dus gebruik ik maar de -1.
PHP heeft nog een speciale voorziening dat in andere programmeertalen niet mogelijk is.
Code (php)
Let er op dat je hier de driedubbele = gebruikt anders is FALSE hetzelfde als nul!
Maar nog steeds vraag ik me af hoe ik $success, $error_empty en $error_noemail in moet stellen omdat dit geen variabalen zijn die ik met true/false kan beantwoorden maar 3 verschillende zinnen zijn. Voorbeeld:
"error_empty" => "Please fill in all the required fields.",
Helaas krijg ik bij deze 3 wel melding dat ze undefined zijn..
Guido
EDIT: of misschien script omgooien en gaan werken met echo's zoals in vb van Frank?
Gewijzigd op 17/03/2015 14:33:56 door Guido -
In de stijl van programmeertalen waarin je sowieso alle variabelen moet declareren, kun je bijvoorbeeld met een lege string beginnen:
Code (php)
Variabelen declareren die je toch niet altijd gebruikt, is alleen zonde van de overhead: je besteedt processortijd en geheugen aan iets dat je niet altijd nodig hebt. Je kunt ook een strategie volgen waarbij er kennelijk nog geen fout is opgetreden zolang de variabele $error niet bestaat:
Code (php)
Lees je script als een verhaal. Kijk waar je een variabele nodig hebt en bepaal vervolgens hoe en waar je die variabele dus moet declareren.
Guido vd L op 17/03/2015 14:31:01:
Dat is me nu duidelijk.
Maar nog steeds vraag ik me af hoe ik $success, $error_empty en $error_noemail in moet stellen omdat dit geen variabalen zijn die ik met true/false kan beantwoorden maar 3 verschillende zinnen zijn. Voorbeeld:
"error_empty" => "Please fill in all the required fields.",
Helaas krijg ik bij deze 3 wel melding dat ze undefined zijn..
Guido
EDIT: of misschien script omgooien en gaan werken met echo's zoals in vb van Frank?
Maar nog steeds vraag ik me af hoe ik $success, $error_empty en $error_noemail in moet stellen omdat dit geen variabalen zijn die ik met true/false kan beantwoorden maar 3 verschillende zinnen zijn. Voorbeeld:
"error_empty" => "Please fill in all the required fields.",
Helaas krijg ik bij deze 3 wel melding dat ze undefined zijn..
Guido
EDIT: of misschien script omgooien en gaan werken met echo's zoals in vb van Frank?
Jij bedoelt misschien hoe je een array een beginwaarde moet geven?
vanaf de recentere versies van php kan het ook zo:
Gewijzigd op 17/03/2015 16:17:54 door Frank Nietbelangrijk
$error_class
$form_data
$sent
$info
Mocht iemand een idee en ff wat tijd over hebben, tijdelijk link naar bestand:
http://www.webmastergroningen.nl/form.txt
Guido
Guido vd L op 19/03/2015 01:33:03:
Ben al een klein stukje verder, maar nog steeds undefined variables:
$error_class
$form_data
$sent
$info
Mocht iemand een idee en ff wat tijd over hebben, tijdelijk link naar bestand:
http://www.webmastergroningen.nl/form.txt
Guido
$error_class
$form_data
$sent
$info
Mocht iemand een idee en ff wat tijd over hebben, tijdelijk link naar bestand:
http://www.webmastergroningen.nl/form.txt
Guido
gewoon bovenaan in je script en zeker niet in een if() blok plaatsen:
$error_class = array();
$form_data = array();
$sent = FALSE;
$info = '';
Maar nu krijg ik undefined index voor ondermeer:
Dus daar maak ik dit van:
Code (php)
1
2
2
class="'.(isset($error_class['form_name'])).'
value="'.(isset($form_data['form_name'])).'"
value="'.(isset($form_data['form_name'])).'"
Notice ook weg, heel goed.
Maar ik heb gevoel dat het gewoon een truc is om die notice weg te krijgen en het verder helemaal niets uitmaakt voor de werking vh formulier. Waarom iets checken waarvan ik zeker weet dat het bestaat.
Guido
Met dit:
Code (php)
1
2
2
class="'.(isset($error_class['form_name'])).'
value="'.(isset($form_data['form_name'])).'"
value="'.(isset($form_data['form_name'])).'"
is je notice inderdaad weg, maar:
isset() geeft een boolean terug (true/false waarde) dus nu stop je feitelijk true of false in je class of value, dat lijkt mij niet de bedoeling.
Ten tweede,
isset() is niet perse een "truc" om de notice weg te krijgen, het is een controle of de variabele bestaat (zoals al door anderen is beschreven).
De notice geeft aan dat je niet zeker weet dat de variabele bestaat, anders krijg je deze niet.
Je zal dus ergens in je script moeten checken of de variabele (of array index) bestaat voordat je hem gebruikt, of een standaard-waarde toewijzen.
Code (php)
1
2
2
class="'.(isset($error_class['form_name'])).'
value="'.(isset($form_data['form_name'])).'"
value="'.(isset($form_data['form_name'])).'"
Ga verder met de undefined index meldingen > wordt vervolgd ;-)
Guido
Code (php)
1
2
2
class="'.(isset($error_class['form_name'])).'
value="'.(isset($form_data['form_name'])).'"
value="'.(isset($form_data['form_name'])).'"
Dit zou ik oplossen door voordat je die arrays gaat gebruiken eerst ervoor te zorgen dat alle elementen een waarde hebben:
Code (php)
Daarna kun je de elementen gebruiken zonder te checken of ze bestaan:
Bedankt voor je reactie.
Omdat ik $error_class 2 keer gebruik (voor label en voor input field) kon ik dit niet direct gebruiken omdat class 'hide' (middels css) error label verbergt en input veld natuurlijk zichtbaar moet blijven.
Ben inmiddels bijna klaar (jaja), alleen nog ff deze wegwerken:
Notice: Undefined variable: form_data
Komt vast helemaal goed. Goed weekend allen.
http://www.webmastergroningen.nl/form.txt
Guido
Het gaat dus om de form_data in het formulier, zoals:
Guido
Gewijzigd op 21/03/2015 18:08:44 door Guido -