Graag uitleg bij dit script
In het vlg script wordt een menu dmv select option gemaakt, de waarden in de reeks moeten via echo op het scherm komen. Dit script werkt wel, maar er staat een hinderlijke foutmelding op het scherm te wijten aan deze opdrachtregel: if (in_array($_POST['category'], $map))
waardoor wordt deze foutmelding veroorzaakt?
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 -
Johan zet het hele script eens tussen [ c o d e ] en [ / c o d e ] tags (maar dan zonder de spaties er tussen)
Welke foutmelding krijg je?
Welke foutmelding krijg je?
Gewijzigd op 17/05/2015 22:28:22 door Frank Nietbelangrijk
>> waardoor wordt deze foutmelding veroorzaakt?
Is het echt heeeeeel veel moeite om ook meteen even de foutmelding erbij te vermelden? :-s
Is het echt heeeeeel veel moeite om ook meteen even de foutmelding erbij te vermelden? :-s
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.
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..
Foutmelding is:
NOTICE: undefined index: category
Ik krijg dus wel het dropdown menu en de submit knop. Kan dit gewoon uitvoeren en de echo wordt uitgevoerd.
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
Verander je if als volgt :
Werkt gelijk, dus: TOP ! Erg waardevolle tip Jacco.
En wat is nu de theorie hierachter?
En wat is nu de theorie hierachter?
Je kijkt of je formulier verstuurd is via de POST-method, en daarna kijk je of de $_POST-waarde uit je formulier ook voorkomt in je array ($map).
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.
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.
Hee Eddy, leuke variant maar ik zou het dan zo gedaan hebben:
Kan inderdaad ook. Dat is wel handig.
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.
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 :-)
Ik dacht even dit te maken:
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?
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?
Kijk nog eens goed naar de voorbeelden hierboven.
Jij hebt nu $return maar geen return.
En als je de function aanroept moet je het in een variabele stoppen.
Jij hebt nu $return maar geen return.
En als je de function aanroept moet je het in een variabele stoppen.
> Mijn vraag is: waarom niet?
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.
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




