Graag uitleg bij dit script
waardoor wordt deze foutmelding veroorzaakt?
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
<?php
$map = array('cherry', 'mango', 'kiwi');
?>
<form method="post">
<select name="category">
<?php foreach ($map as $value) : ?>
<option value="<?php echo $value ?>"><?php echo $value ?></option>
<?php endforeach; ?>
</select>
<input type="submit" value="submit" />
</form>
<?php
if (in_array($_POST['category'], $map))
{
echo 'Clients enjoy eating a ' . $_POST['category'];
}
?>
$map = array('cherry', 'mango', 'kiwi');
?>
<form method="post">
<select name="category">
<?php foreach ($map as $value) : ?>
<option value="<?php echo $value ?>"><?php echo $value ?></option>
<?php endforeach; ?>
</select>
<input type="submit" value="submit" />
</form>
<?php
if (in_array($_POST['category'], $map))
{
echo 'Clients enjoy eating a ' . $_POST['category'];
}
?>
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/05/2015 22:44:36 door - Ariën -
Is het echt heeeeeel veel moeite om ook meteen even de foutmelding erbij te vermelden? :-s
Wild guess: $_POST['category'] bestaat (nog) niet omdat je nog geen formulierdata hebt gePOST.
Thomas van den Heuvel op 17/05/2015 22:29:00:
Hoe luidt de foutmelding?
Wild guess: $_POST['category'] bestaat (nog) niet omdat je nog geen formulierdata hebt gePOST.
Wild guess: $_POST['category'] bestaat (nog) niet omdat je nog geen formulierdata hebt gePOST.
Ik denk het ook. Verder ziet je code er niet uit /: Probeer eens een nette functie te schrijven die hetzelfde doet..
NOTICE: undefined index: category
Ik krijg dus wel het dropdown menu en de submit knop. Kan dit gewoon uitvoeren en de echo wordt uitgevoerd.
Gewijzigd op 18/05/2015 11:09:01 door Johan West
En wat is nu de theorie hierachter?
Je kan natuurlijk de controle ook in twee statements opschrijven, waarbij je eerst kijkt of je formulier verstuurd is via de POST-method, en daarna een aparte if-statement of je $_POST-waarde in de array voorkomt.
Hiermee kan je de foutafhandelng wel nauwkeuriger maken, of de array iets bevat, en of er ge-POST is of niet. In dit geval kan je eventueel eerst je formulier laten tonen.
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
<?php
echo $_POST['naam'];
/*
van alle $_POST, $_GET en $_COOKIE elementen (want het zijn array's) weet je NOOIT zeker of ze wel bestaan.
Daarom moet je ze voor gebruik altijd testen met isset(). Bij $_POST wordt ook veel
$_SERVER['REQUEST_METHOD'] gebruikt om te testen of de pagina in de POST methode is opgevraagd.
Daarna gaan we er vaak vanuit (bij formulieren) dat alle POST variabelen ook meegestuurd zijn.
Echter is dat nog steeds geen zekerheid.
*/
$naam = '';
if(isset($_POST['naam']))
$naam = $_POST['naam'];
/*
Nu heb je een $naam (en niet $_POST['naam']) die ALTIJD bestaat :-)
*/
echo $_POST['naam'];
/*
van alle $_POST, $_GET en $_COOKIE elementen (want het zijn array's) weet je NOOIT zeker of ze wel bestaan.
Daarom moet je ze voor gebruik altijd testen met isset(). Bij $_POST wordt ook veel
$_SERVER['REQUEST_METHOD'] gebruikt om te testen of de pagina in de POST methode is opgevraagd.
Daarna gaan we er vaak vanuit (bij formulieren) dat alle POST variabelen ook meegestuurd zijn.
Echter is dat nog steeds geen zekerheid.
*/
$naam = '';
if(isset($_POST['naam']))
$naam = $_POST['naam'];
/*
Nu heb je een $naam (en niet $_POST['naam']) die ALTIJD bestaat :-)
*/
En dan ergens deze functie:
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
function get($string)
{
if (isset($_GET[$string]))
{
return $_GET[$string];
}
if (isset($_POST[$string]))
{
return $_POST[$string];
}
if (isset($_COOKIE[$string]))
{
return $_COOKIE[$string];
}
return '';
}
Doet hetzelfde, maar is in je script zelf veel minder code.
Het houdt de volgorde GET, POST, COOKIE aan.
function get($string)
{
if (isset($_GET[$string]))
{
return $_GET[$string];
}
if (isset($_POST[$string]))
{
return $_POST[$string];
}
if (isset($_COOKIE[$string]))
{
return $_COOKIE[$string];
}
return '';
}
Doet hetzelfde, maar is in je script zelf veel minder code.
Het houdt de volgorde GET, POST, COOKIE aan.
Ik zat nog te denken om een $string=="id" gelijk te intval() te geven, maar dat is ook niet altijd wenselijk.
Want dan wordt het weer te complex. Je zou dan ook een type kunnen meegeven aan get(), bijvoorbeeld get("topicid", 0, "int");, maar dan wordt het niet echt makkelijker.
En wat als $naam dus nog niet bestaat? => Melding Notice.
Lijkt mij dan beter.
Ja, uiteraard. Stom.
SanThe wat ben je weer scherp :p :-)
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
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
error_reporting(E_ALL);
function get($string, $default = '')
{
if (isset($_GET[$string]))
{
$return = $_GET[$string];
}
elseif (isset($_POST[$string]))
{
$return = $_POST[$string];
}
elseif (isset($_COOKIE[$string]))
{
$return = $_COOKIE[$string];
}
else
{
$return = $default;
}
${$string} = $return;
echo 'Aangemaakte variabele: <b> $' . $string . ' = "' . $return . '";</b>';
global ${$string};
//return;
}
get('naam');
echo "<br><br>Ik heet " . $naam;
?>
error_reporting(E_ALL);
function get($string, $default = '')
{
if (isset($_GET[$string]))
{
$return = $_GET[$string];
}
elseif (isset($_POST[$string]))
{
$return = $_POST[$string];
}
elseif (isset($_COOKIE[$string]))
{
$return = $_COOKIE[$string];
}
else
{
$return = $default;
}
${$string} = $return;
echo 'Aangemaakte variabele: <b> $' . $string . ' = "' . $return . '";</b>';
global ${$string};
//return;
}
get('naam');
echo "<br><br>Ik heet " . $naam;
?>
Maar die laatste regel (met "Ik heet $naam") werkt niet...
Test via www.zundappforum.com/test.php?naam=erik
Toevoeging op 18/05/2015 22:28:05:
Mijn vraag is: waarom niet?
Al kan dit wellicht beter in een ander topic?
Jij hebt nu $return maar geen return.
En als je de function aanroept moet je het in een variabele stoppen.
Omdat je ${$string} pas global maakt nadat je hem een waarde hebt gegeven.
Als je de global meteen aan het begin van je functie zet, werkt het wel.
Gewijzigd op 19/05/2015 09:29:53 door Willem vp