PHP-teller verhogen in Javascript
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)
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
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);
}
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
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
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..
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
of
$j++;
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...