Graag uitleg bij dit script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan West

Johan West

17/05/2015 22:21:23
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];                
                        }

     ?>
        

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/05/2015 22:44:36 door - Ariën -
 
PHP hulp

PHP hulp

20/04/2024 07:14:27
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 22:27:46
Quote Anchor link
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?
Gewijzigd op 17/05/2015 22:28:22 door Frank Nietbelangrijk
 
Ozzie PHP

Ozzie PHP

17/05/2015 22:28:52
Quote Anchor link
>> waardoor wordt deze foutmelding veroorzaakt?

Is het echt heeeeeel veel moeite om ook meteen even de foutmelding erbij te vermelden? :-s
 
Thomas van den Heuvel

Thomas van den Heuvel

17/05/2015 22:29:00
Quote Anchor link
Hoe luidt de foutmelding?

Wild guess: $_POST['category'] bestaat (nog) niet omdat je nog geen formulierdata hebt gePOST.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/05/2015 23:22:48
Quote Anchor link
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.


Ik denk het ook. Verder ziet je code er niet uit /: Probeer eens een nette functie te schrijven die hetzelfde doet..
 
Johan West

Johan West

18/05/2015 09:28:20
Quote Anchor link
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.
Gewijzigd op 18/05/2015 11:09:01 door Johan West
 
Jacco Engel

Jacco Engel

18/05/2015 11:53:24
Quote Anchor link
Verander je if als volgt :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($_SERVER["REQUEST_METHOD"] == "POST" && in_array($_POST['category'], $map))
 
Johan West

Johan West

18/05/2015 12:33:33
Quote Anchor link
Werkt gelijk, dus: TOP ! Erg waardevolle tip Jacco.

En wat is nu de theorie hierachter?
 
- Ariën  -
Beheerder

- Ariën -

18/05/2015 12:41:35
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2015 18:59:53
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 :-)
*/
 
Eddy E

Eddy E

18/05/2015 21:43:26
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $naam
= get($naam);
?>


En dan ergens deze functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2015 21:49:05
Quote Anchor link
Hee Eddy, leuke variant maar ik zou het dan zo gedaan hebben:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

    function get($string, $default = '')
    {

        if (isset($_GET[$string]))
        {

            return $_GET[$string];
        }

        if (isset($_POST[$string]))
        {

            return $_POST[$string];
        }

        if (isset($_COOKIE[$string]))
        {

            return $_COOKIE[$string];
        }


        return $default;
    }
 
Eddy E

Eddy E

18/05/2015 21:54:30
Quote Anchor link
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.
 
- SanThe -

- SanThe -

18/05/2015 22:00:31
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $naam
= get($naam);
?>


En wat als $naam dus nog niet bestaat? => Melding Notice.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $naam
= get('naam');
?>


Lijkt mij dan beter.
 
Eddy E

Eddy E

18/05/2015 22:19:42
Quote Anchor link
Ja, uiteraard. Stom.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2015 22:24:42
Quote Anchor link
SanThe wat ben je weer scherp :p :-)
 
Eddy E

Eddy E

18/05/2015 22:27:00
Quote Anchor link
Ik dacht even dit te maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>


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?
 
- SanThe -

- SanThe -

18/05/2015 22:34:57
Quote Anchor link
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.
 
Willem vp

Willem vp

19/05/2015 09:29:32
Quote Anchor link
> 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.
Gewijzigd op 19/05/2015 09:29:53 door Willem vp
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.