Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

<SELECT name="info[0]"> verwerken met PHP

pieter78
14 antwoorden
  • Hallo,

    JavaScript heb ik even achter me gelaten voor een belangrijker probleem met PHP. Ik wil de dropdown-lists gebruiken voor educatieve doeleinden, alleen zijn er ook wel eens meerdere goede antwoorden mogelijk. Om stylistische redenen (bleuh..) wil ik dit niet met multiple-select of checkboxes doen, maar op dezelfde manier. Om de verwerking effectief te houden wil ik een PHP-functie maken, die kan kijken of een bepaald antwoord in één van de <SELECT>'s gekozen is. Om het geheel flexibel te houden, wil ik ook het aantal goede antwoorden (en dus aantal corresponderende <SELECT>s als parameter aan deze functie meegeven. Dus ik dacht: array! Maar mooi dat het niet wil lukken (eigenlijk niet zo mooi dus :wink: ).

    In het HTML-doc staat bv:
    <SELECT name=info[0]">
    <OPTION … etc>
    </SELECT>

    en nog een paar met name="info[1]" etc.

    In PHP staat een functie:

    <?php
    function fbmult($VariableName, $MaxNumberOfType, $GoodAnswer, $StandardFeedback)
    { static $ItemCorrect=false;
    for ($i=1; $i<($MaxNumberOfType); $i++)
    { if (($VariableName[$i])==$GoodAnswer) {$ItemCorrect=true;}
    }

    if ($ItemCorrect==true)
    {echo $StandardFeedback;}
    else
    {echo "<SPAN class="fb_wrong">".$StandardFeedback."</FONT>";}
    }
    ?>

    die ik dan (stel: 3 selects) aanroep als:

    <?php
    fbmult($info, '3', 'dit is goed','goed gedaan!')
    ?>

    (let niet op de waardevolle feedback in dit geval, het gaat om het idee :smile: ).

    Dit werkt niet, en via het forum van PHPfreakz word ik ook niet wijzer. Bill, where are you? And take your friends with you plz…

    Grtz,

    Pieter

  • Hier ben ik al :smile:

    Ik weet het zo 123 ook niet (heb maar heel vluchtig gekeken, druk druk druk), maar toevallig heb ik ooit eens met iets vergelijkbaars gezeten en dat zo opgelost:

    ${"question" . $questionnumber . "_form"};

    Zo maak je dus een variable, die dus eigenlijk (afhankelijk van $questionnumber in dit geval) $question0_form ($question1_form, etc) heet. Die kan je dan gewoon in je <SELECT> zetten en dat werkt dan ook wel.

    ——————
    Bill Gates: Scharrel een ouwe doos op, en zet er Linux op :)
    Chiquita71: tja…hahahah om nu linux op mezelf te zetten vind ik wat ver gaan.

  • Waauw, you're quick! Als de nood het hoogst is, is Bill nabij ;-)

    Dank je voor de tip, dat met die accolades ziet goed uit, had ik nog niet aan gedacht. Ik ga het proberen en dan laat ik het horen!

  • 't lukt niet :sad: …

    Hij herkent de variabele niet, heb al van alles geprobeerd, maar ook via echo krijg ik hem niet weergegeven. Volgens mij wil hij heel duidelijk "info1" of "info2" zien, als ik wil lezen als

    for ($i=1; $i<2; $i++)
    { if (${"info".$i}=="value") {echo "OKE";}
    else {echo "JAMMER";}
    }

    met value = de <OPTION-value> van het goede antwoord, krijg als feedback steevast "JAMMER" te zien.

    En een poging

    echo ${"info".1} levert een foutmelding,
    echo ${"info"."1"} toont alleen 1 op het beeld.

    Any idea?

  • Dit werkt bij mij gewoon:

    <?php
    $info1 = "test";
    echo ${"info"."1"};
    ?>

    (er komt dus test op het beeld te staan).

    ——————
    Pieter78: Als de nood het hoogst is, is Bill nabij.

  • Dit werkt in ieder geval zonder problemen bij mij:


    code:

    <?php
    if ($submit)
    {
    for ($item = 0; $item < count($info); $item++)
    {
    if ($info[$item] == 'goed')
    {
    echo 'Antwoord ' . ($item + 1) . ' was goed!<br />';
    }
    else
    {
    echo 'Antwoord ' . ($item + 1) . ' was niet goed!<br />';
    }
    }
    }
    ?>


    <form method="post">
    <select name="info[0]">
    <option value="goed">goed</option>
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    </select><br />
    <select name="info[1]">
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    <option value="goed">goed</option>
    <option value="fout">fout</option>
    </select><br />
    <select name="info[2]">
    <option value="fout">fout</option>
    <option value="goed">goed</option>
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    </select><br />
    <select name="info[3]">
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    <option value="fout">fout</option>
    <option value="goed">goed</option>
    </select><br />
    <input type="submit" value="Gaan met die banaan!" name="submit" />
    </form>


    ——————
    X2 Software (jawel, ik heb een domein aangeschaft!)
    Email: mark@x2software.net

  • Thanks guys (or girls?), ik weet niet waarom het eerst niet lukte, maar nu werkt het. De count-functie ga ik wel zeker nog proberen. Inmiddels ben ik een stuk verder, nu dit nog…

    In doc1.html staat

    <SELECT name="info1">etc
    <SELECT name="info2">etc

    Bij submit gaat de browser naar doc2.php?info1=antw1?info2=antw2;

    mogelijk is (lang verhaal, laat maar). Enfin, de functie:

    <?php
    function fbtest() {
    static $goed=0; $VarName="info"; $MaxNo=2;
    for ($h=1; $h<=$MaxNo; $h++)
    { if (${$VarName.$h}=="antw1") {$goed++;}
    }
    if ($goed>0)
    {echo "GOED";}
    else
    {echo "FOUT";}

    } fbtest();
    ?>

    Zonder functie werkt het perfect, maar als ik hem als functie aanroep,

    gaat het mis (altijd FOUT). Ik denk dat het met de aanroep van info1

    (via VarName) te maken heeft, op een of andere manier moet ik duidelijk

    maken dat dit buiten de functie ligt, denk ik. Global werkt niet.

    Enig idee wat ik fout doe /anders moet doen?

  • Tja, je hebt die infoX variabele niet in je scope (ik laat de uitleg even zitten :wink:) staan, dus je moet toch echt met global die paramaters opvragen…

    BTW: welke PHP versie heb je? Er is namelijk sinds versie 4.1.0 wat veranderd met het posten van variablen…

    BTW: ik ben een boy, geen girl

    ——————
    Pieter78: Als de nood het hoogst is, is Bill nabij.

  • PHP 4.0.4pl1

    Hoe moet ik die variabele dan declareren. Ik dacht gewoon

    global $info

    in de eerste regel van de functie.

    De techniek met de arrays die beschreven wordt, werkt ook perfect buiten de functie, maar daarbinnen niet.

    Kortom: vooralsnog heb ik jouw techniek gebruikt, maar hoe kan ik dat hier declareren?

  • Je zult dan voor iedere $infoX een global moeten maken…

    Dus global $info1, $info2; bijvoorbeeld. Het beste kan je dus een parameter meegeven hoeveel items je hebt en met een for loopje erdoor lopen…

    ——————
    Pieter78: Als de nood het hoogst is, is Bill nabij.

  • Je global is fout, daar staat varname zonder hoofdletter N, oftewel: het moet zijn:

    global ${$VarName . $h};

    (ik heb het getest en het werkte).

    ——————
    Pieter78: Als de nood het hoogst is, is Bill nabij.

  • Oké, het mag gezegd worden… wat een ontzettende OEN ben ik (je weet wie het zegt :wink: )!

    Thanx, ga het meteen proberen. Tssk, wat een beginnersfout. En daar zie ik dan ook nog een kwartier lang overheen…

    IQnullus (niet voor niets mijn Internet-nick)

  • YES! Hartstikke bedankt Bill en consorten, het werkt nu allemaal precies zoals bedoeld!

    BG> Je hebt je signature verdiend! :smile:

    Thanx, and till next time (ik ben klaar met deze post).

    Pieter

  • Graag gedaan :wink:

    ——————
    Pieter78: Als de nood het hoogst is, is Bill nabij.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.