PHP variabele komt niet door in Javascript functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
Hi,

Ik ben bezig met een webpagina te ontwikkelen. Het is een bestelformulier. Om te kunnen bestellen moet ik het id van het artikel weten. Maar deze krijg ik niet door in m'n javascript functie. Als ik de id buiten het javascript stuk laat echo'en dan krijg ik de id te zien die ik wil.

Wat doe ik verkeerd?
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
$count = 1;
foreach ($producten as $tmp) {
$count++;
$tdclass = ($count % 2 ? " class='row_red'" : "");
$vrclass = ($tmp['voorraad'] == '0' ? " class='mark_red'" : " class='mark_green'"); 
echo "<tr>\n";
echo "<td><form action=\"add.php\" method=\"post\"></td>\n";
echo "<td><input type=\"text\" name=\"id\" value=\"".$tmp['id']."\" /></td>\n";
                                
echo "<td onclick=getNew('".$count."'); ".$tdclass.">".$tmp['naam']."</td>\n"; 
echo "<td".$tdclass.">€ ".$tmp['prijs']."</td>\n";
echo "<td".$vrclass.">".($tmp['voorraad'] >= 1 ? "Ja" : "Nee")."</td>\n";
echo "<td id=".$count."></td>\n";
echo "<td><script type=\"text/javascript\">
function getNew(element){
document.getElementById(element).innerHTML = '<form action=\"add.php\" method=\"post\">
<td><input type=\"text\" name=\"id\" value=\"".$tmp['id']."\" />
<input type=\"text\" name=\"aantal_stuks\" size=\"2\" maxlength=\"2\" value=\"1\" />
<input type=\"submit\" value=\"stuks\" /></form>';
}
</script></td>";
echo "</form>\n";
echo "</tr>\n"; 
}


Laat ik hem op regel 8 echo'en dan werkt het wel... maar op regel 17 krijg ik alleen maar "5" te zien iedere keer ?

Voor het gemak ook nog even op Pastebin gezet: http://pastebin.com/ftQZfmdB

Wie kan mij een duwtje in de goede richting geven?

Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 14-08 12:22

Wiethoofd

Broadcast TOM

Het is makkelijker om single quotes om HTML/javascript te zetten die je echoëd, dan hoef je niet al je quotes te escapen:
PHP:
1
2
echo "<td><form action=\"add.php\" method=\"post\"></td>\n";
echo '<td><form action="add.php" method="post"></td>'.PHP_EOL;

Ik zou sowieso eens controleren wat voor html je in je javascriptfunctie probeert te maken, je form om de <td> heen die je weer sluit binnen de </td> gaat niet goedkomen.

Volg me op Twitter/X & Bluesky


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
Heb een klasgenoot gevraagd, en het probleem is gevonden... de functie "getNew" wordt door de loop steeds opnieuw gedefinieerd :P En in de laatste loop is hij 5 (laatste product heeft id 5, dus dat klopt) en daardoor zijn ze allemaal 5.

De javascript buiten de loop plaatsen moet het oplossen, nu nog even kijken hoe we dat precies gaan doen :+

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Dat kun je toch ook zien als je de gegenereerde broncode bekijkt?

Wat je kan doen is de functienaam uniek maken door er bijvoorbeeld "_$tmp['id']" achter te zetten. Maar beter schrijf je gewoon een nette functie.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
Probeer je code leesbaar te houden, dan wordt debuggen ook direct een stuk makkelijker. Hieronder even een versimpeld voorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php $i = 0 ?>
<?php foreach ($producten as $product) : ?>

    <?php $rowClass = ($i % 2 == 0) ? 'even' : 'uneven' ?>
    <?php $priceClass= ($product['prijs'] > 100) ? 'red': 'green' ?>
    
    <tr class="<?php echo $rowClass ?>">
        <td>
            <?php echo $product['naam'] ?>
        </td>
        <td class="<?php echo $priceClass ?>">
            &euro; <?php echo $product['prijs'] ?>
        </td>
    </tr>

    <?php $i++ ?>
    
<?php endforeach ?>


Of met short-tags aan:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? $i = 0 ?>
<? foreach ($producten as $product) : ?>

    <? $rowClass = $i % 2 == 0 ? 'even' : 'uneven' ?>
    <? $priceClass= ($product['prijs'] > 100) ? 'red': 'green' ?>
    
    <tr class="<?= $rowClass ?>">
        <td>
            <?= $product['naam'] ?>
        </td>
    <td class="<?= $priceClass ?>">
            &euro; <?= $product['prijs'] ?>
        </td>
    </tr>

    <? $i++ ?>
    
<? endforeach ?>


Op deze manier houd je de html/javascript beter gescheiden van de php code, en is het veel makkelijker te zien wat je nu precies aan het outputten bent.

[ Voor 7% gewijzigd door Zeebonk op 02-06-2012 15:23 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

ThinkPadd schreef op zaterdag 02 juni 2012 @ 14:54:
Heb een klasgenoot gevraagd, en het probleem is gevonden... de functie "getNew" wordt door de loop steeds opnieuw gedefinieerd :P En in de laatste loop is hij 5 (laatste product heeft id 5, dus dat klopt) en daardoor zijn ze allemaal 5.
Nooit alleen maar debuggen door naar je PHP-code te kijken. Je hebt helemaal geen interesse in de PHP-code op het moment dat zoiets als dit niet goed werkt, het heeft dan veel meer zin om naar de uitgepoepte HTML/JS/whatever je genereert te kijken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1