JS binnen PHP kan wel, PHP binnen JS niet?

Status
Niet open voor verdere reacties.

JohanDerks

Verenigingslid
Lid geworden
2 dec 2006
Berichten
82
De ellende van googlen op programmeerproblemen is, dat de antwoorden of vaak onbegrijpelijk zijn (voor mij) of tegenstrijdig.
Zo kan ik er niet achter komen of
Code:
<script>document.getElementsByName("<?php echo $fontLingvo ?>"[0]).checked = true;</script>
toegestaan is of niet, uiteraard binnen een php-document.
Hiermee hangt samen de volgende vraag:
Ik krijg voor var x = document.getElementsByName(kodoj); bij i=13 de foutmelding
(via alerts:) x[0] is undefined; x is object.
Wat voor object kan x dan wel zijn: geen string, geen boolean, maar .......... ?
 
Laatst bewerkt:
Jouw Javascript kan prima in PHP werken. Want als je een request doet naar een server om een bepaalde URL op te halen, dan wordt (versimpeld verteld) in dat proces eerst je PHP-code verwerkt door de server. Vervolgens wordt de uitgevoerde PHP (geparste content om het te noemen) als HTML naar de browser gestuurd, en als daar Javascript in voorkomt, dan zal de browser dat uitvoeren.

Dus: Je kan PHP in Javascrpt gebruiken. Maar je kan geen inhoud van Javascript in PHP uitvoeren.

Het is wel fijn dat je jouw PHP-code laat zien, maar omdat het naar jouw idee een JavaScript probleem is, moet je juist eerst even debuggen en dus kijken hoe de browser de Javascriptcode intepreteert. Dus rechtsklik eens, en kies "Paginabron bekijken", of gebruik je Webdevelopers-toolbox als je die in je browser hebt.
 
Laatst bewerkt:
RE: x[0] is undefined; x is object

x[0] is geen waarde maar een object. Ik kan niet zien wat x[0] is.

Vergelijk dit als object "auto"
bedrag = auto.mazda (er is meer info nodig voor de prijs)
bedrag = auto.mazda.cx5.benzine.automaat.blauw (nu kan dealer wel een prijs geven)
 
Die javascriptcode <script>document.getElementsByName("<?php echo $fontLingvo ?>"[0]).checked = true;</script> was deel van een stupide methode om er achter te komen welke optie van een dropdown-menu was geselecteerd.
Ik neem aan, dat ik daarvoor met een js-functie
for (var i = 0; i < talen.length; i++) {
if (talen.selected) {
break
}
} een heel eind kom, toch?
 
RE: optie van een dropdown-menu

Ik neem aan dat je hier een <select> bedoelt.
Bij select begint de index bij 0. In dit voorbeeld dus 0, 1 en 2
Het voorbeeld spreek voor zich, je kan de index, de waarde of beide gebruiken.
Code:
<select id="keuze">
  <option>Aap</option>
  <option>Noot</option>
  <option>Mies</option>
</select>

var idx = document.getElementById("keuze").selectedIndex;
var opt = document.getElementById("keuze").options;
alert("Index: "  + opt[idx].index);
alert("Waarde: " + opt[idx].text);
 
Laatst bewerkt:
Sorry, dat ik van de hak op de tak spring. Er zit nu eenmaal voor mij nog geen samenhang in de fouten.

Ik word (niet) gek!
Ik heb een array van 25 talen (volgens ISO-afkortingen):
codes = ["sq", "en", "bg", "cs", "da", "fi", "fr", "de", "el", "es", "hu", "it", "ca", "hr", "lt", "nl", "no", "pl", "pt", "ro", "ru", "sr", "sk", "sv", "tr", "uk"], die allemaal de waarden “goed” of “slecht” moeten krijgen van de user. (Uiteraard gaat het niet om de kwaliteit van de taal.)
Zeven daarvan moeten door de user beoordeeld worden in Zamenhof.php, de andere 18 in intereurop.php.
Zes van de zeven liggen vast: en, fr, de, es, pl en ru. De zevende mag de user zelf kiezen, namelijk it of pt. Welke hij kiest, geeft hij op met de variabel pI (“portugees-Italiaans”). Kiest hij/zij Portugees, dan wordt pI = “pt”, kiest hij/zij Italiaans, dan wordt pI = “it”. In het eerste geval wordt Italiaans bij intereurop.php ingedeeld, in het tweede geval wordt Portugees bij intereurop.php ingedeeld. Zodoende komen alle 25 talen toch ergens aan de beurt.
De waarden van “de grote zes” (en, fr, de, es, pl en ru: goed of slecht) en van pI (Portugees of Italiaans) worden van Zamenhof.php naar intereurop.php gepost. Wat gebeurt er nu?
De uitprint van de postvariabelen in intereurop.php bevat “Zamsubmit: submit” (d.w.z. Zamsubmit is set) en “pI: it” (de user kiest Italiaans in de groep van zeven talen). Dat bepaalt, hoe de server de volgende stukken PHP-code in intereurop.php behandelt:
Code:
<?php 
if (isset($_POST['ZamSubmit'])) {  
    if ($pI=="pt") {   //  Tio signifas, ke chi-tiu pagho estas vokita el Zamenhofa.php, kie la itala estis ekskludita 
?>
	    <tr>
		    <td class="d">
		        <button type="button" onclick="style='background-color: ' + kleur; KijkinGoogle('it')">
			    Klik hier voor Italiaans (it)</button >
		    </td>
		    <td class="ctr">
		        <input type="radio" name="it" value="1" onclick="marku('it','goed')" />goed
		        <input type="radio" name="it" value="0" onclick="marku('it','slecht')" />slecht 
		        <input type="radio" name="it" value="-1" onclick="return forigu('it')" />onbepaald
		    </td>
	    </tr>
<?php 
    }
}
?>
en
Code:
<?php 
if (isset($_POST['ZamSubmit'])) {  
    if ($pI=="it") {   
?>
	    <tr>
		    <td class="d">
		        <button type="button" onclick="style='background-color: ' + kleur; KijkinGoogle('pt')">
			    Klik hier voor Portugees (pt)</button >
		    </td>
		    <td class="ctr">
		        <input type="radio" name="pt" value="1" onclick="marku('pt','goed')" />goed 
		        <input type="radio" name="pt" value="0" onclick="marku('pt','slecht')" />slecht 
		        <input type="radio" name="pt" value="-1" onclick="return forigu('pt')" />onbepaald
		    </td>
	    </tr>
<?php 
    }
}
?>
Het is onbegrijpelijk, maar waar: geen van beide snippets worden van server-side doorgegeven! (Een van de twee zou door moeten komen, in dit geval (pI: it) de tweede, in het andere (pI: pt) de tweede.)

Toevoeging:
Als ik de PHP-code weghaal, komen beide talen-snippets natuurlijk wel door, maar ook verdwijnt een heel andere fout, nl. x[0] is undefined die ik op 7-5 om 12u48 al vermeldde:
Ik krijg voor var x = document.getElementsByName(kodoj); bij i=13 (Italiaans!) de foutmelding
(via alerts) "x[0] is undefined; x is object".
Wat voor object kan x dan wel zijn: geen string, geen boolean, maar .......... ?

Hoe die twee fouten gerelateerd zijn, is nog een groter raadsel dan bovenstaande fout.
Dat ze samenhangen staat voor mij vast.
 
Laatst bewerkt:
Sorry, ik overzie je code niet meer. Met de info in het berichtje hierboven is hulp niet mogelijk.
 
Stom, stom, stom, althans onzorgvuldig!
De variabele pI heette in het eerste formulier pI, in het tweede werd dat hernoemd tot portugalaItala (om het als hidden element te op te slaan) en in het derde werd weer een element met naam pI verwacht. Logisch, dat if ($pI = "it") en if ($pI = "pt") dan niet vervuld zijn en die talen aan browser-side niet verschijnen. Die naamsverandering moet dan ook de oorzaak zijn, dat de uitvoering van de code afbrak. In ieder geval werkt de telling nu wel goed.
Sorry Bron, en bedankt voor de antwoorden. Ook al geven die geen oplossing, ze houden me aan de gang.
 
Misschien moet je jouw vraag opdelen in kleinere vragen, in plaats van een hele bloemlezing over je applicatie ;).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan