PHP-teller verhogen in Javascript

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dave Habraken

Dave Habraken

12/03/2011 01:39:09
Quote Anchor link
Hoi,

Ik ben bezig aan een project voor een speelplein waar ik als vrijwilliger actief ben. Hierbij moet een gebruiker via een web-interface gegevens kunnen invoeren voor een kind in een bepaalde groep. Naargelang de gekozen groep moeten in een tweede droplist nu de ingeschreven kinderen van die groep worden getoond. Op die manier kan de gebruiker efficiënt relevante zaken invoeren per kind.

Het is me redelijk snel gelukt de droplists aan de babbel te krijgen en om de opties van de tweede droplist afhankelijk te maken van de eerste droplist, maar er is een probleem bij het tonen van de juiste namen: die namen staan in een MySQL-database en die bereik ik via PHP. Het script voor de droplist is echter in Javascript geschreven. Goed, je zal hieronder merken dat het me nog lukt om de juiste namen in een aparte array te zetten, maar dan loopt het mis. Ik moet nu die namen vanuit de PHP-array in Javascript gebruiken. Hiervoor heb ik 2 opties geprobeerd:
* de PHP-array copiëren naar een Javascript-array => niet gelukt tot nu toe
* de juiste waarden uit de PHP-array in Javascript gebruiken => dit lukt op één stom detail na: ik krijg de PHP-teller niet verhoogd en da's de reden dat ik jullie contacteer.

Hier is het script:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<script>
    function SelectSubCat(){
    // ON selection of category this function will work

    removeAllOptions(document.drop_list.SubCat);
    addOption(document.drop_list.SubCat, "", "SubCat", "");
    <?php
            $kind
= new Kind();
            $kinderen = $kind->GetList(array(),'groep');
            $i=0;
            $j=0;
            foreach ($kinderen as $kind) {
                if ($kind->groep==7)
                {

                $kindereningroep[$i]->kindId=$kind->kindId;
                $kindereningroep[$i]->naam=$kind->naam ." ". $kind->naam;
                
                $i++;                    
                }
            }

            $vorig_kind = $kind;?>

            for(var i = 0; i < "<?php echo $i?>" ; i++){
                var ID= "<?php echo $kindereningroep[$j]->kindId?>";
                var naam="<?php echo $kindereningroep[$j]->naam?>";
                addOption(document.drop_list.SubCat,ID, naam);
                <?php echo $j++?>
            }
    }
    //////////////////

    function removeAllOptions(selectbox)
    {
        var i;
        for(i=selectbox.options.length-1;i>=0;i--)
        {
            //selectbox.options.remove(i);
            selectbox.remove(i);
        }
    }


    function addOption(selectbox, value, text )
    {
        var optn = document.createElement("OPTION");
        optn.text = text;
        optn.value = value;

        selectbox.options.add(optn);
    }

Het probleem is dat teller $j telkens weer naar 0 vliegt op het moment dat de lus opnieuw doorlopen wordt. Ik vermoed dat dit iets te maken heeft met het feit dat ik telkens losse PHP-fragmentjes in Javascript gebruik, want bij teller $i (in de foreach-structure) lukt het wel. Maar hoe kan ik dit oplossen?

Hopelijk kan iemand hier me helpen met dit specifieke probleem.

Alvast bedankt,
Dave

Gebruik [code][/code] tags voor het overzichtelijk weergeven van code. Zie ook de FAQ.[/modedit]
Gewijzigd op 12/03/2011 12:58:21 door Joren de Wit
 
PHP hulp

PHP hulp

22/12/2024 07:41:00
 
Obelix Idefix

Obelix Idefix

12/03/2011 07:51:45
Quote Anchor link
Code aub tussen [code.] [/code.] tags (zonder.)

Kijk eens naar Jquery / ajax. Volgens mij zijn daar oplossing te vinden, zonder dat je het wiel opnieuw hoeft uit te vinden.
Gewijzigd op 12/03/2011 07:51:57 door Obelix Idefix
 
Kumkwat Trender

Kumkwat Trender

12/03/2011 12:55:16
Quote Anchor link
Nja, k heb snel globaal gekeken, enige wat k gezien heb en wat je moet vermijden is dat je een getal niet als string moet gebruiken. Verder is je vraag een beetje vaag.

Tip, probeer php's zo veel mogelijk boven aan je script te krijgen. Dus dat je eerst alle variabelen definieert van php in Javascript, want nu doe je dat steeds om en om, en maakt het lastiger om je script te lezen..
 
Dave Habraken

Dave Habraken

12/03/2011 13:54:02
Quote Anchor link
Alvast bedankt voor de reacties.

Doordat ik in een javascript (droplist aanpassen) die namen wil aanpassen, leek me dit een redelijk compromis, hoewel ik idd met een mengeling van java en PHP zit.

De concrete vraag is alleszins of en hoe ik die teller $j effectief kan laten tellen. Nu verhoogt hij wel, maar springt hij bij de volgende keer dat de lus doorlopen wordt doodleuk weer op 0. Dat schiet niet echt op dus... Echt concrete hints over hoe ik die teller wel kan laten werken zijn dus meer dan welkom.

Ajax heb ik al eens bekeken, maar ik ben nog druk PHP en Javascript aan 't leren, dus dan komt dat er ook nog eens bij. Als ik die teller kan laten tellen, is het probleem voor nu opgelost. Als ik later vertrouwder ben met heel deze materie, zal ik wellicht wel een en ander "verfraaien" en denken dat ik nu stommiteiten heb begaan :-)

Dat van die getallen als string zal ik ook nog nakijken dan. Ik zal er de volgende keer ook op letten dat ik een volgende keer alles als code post.

Bedankt voor verdere tips,
Dave
Gewijzigd op 12/03/2011 13:56:07 door Dave Habraken
 
Kumkwat Trender

Kumkwat Trender

12/03/2011 14:04:29
Quote Anchor link
$j = $j+1;
of
$j++;
 
Dave Habraken

Dave Habraken

12/03/2011 18:54:28
Quote Anchor link
Zo staat het nu in mijn code, maar dat werkt hier dus niet, omdat bij de volgende maal dat de Javascript-lus doorlopen wordt, $j weer op de beginwaarde springt...
 



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.