Probleem van samenwerking tussen 4 php-docs en 2 included javascript-docs

Status
Niet open voor verdere reacties.

JohanDerks

Verenigingslid
Lid geworden
2 dec 2006
Berichten
82
Ik wil het aahtal talen tellen, waarvan de vertaling van een basiswoord uit een brontaal lijkt op dat basiswoord. De vertalingen worden gegeven met Google Translate. De al of niet gelijkenis wordt door de gebruiker ingevoerd met radioknoppen, voor elke taal, die de waarden x[0].checked (= gelijkend), x[1].checked (= niet gelijkend) of x[2].checked (= twijfelachtig) van de gebruiker hebben gekregen..
De uitkomst volgt uit de berekening van de som van talen met x[1].checked, gedeeld door de som van alle talen min de twijfelgevallemn (aantal x[0] + aantal x[1]).
Het telmechamisme is opgeslagen in de functie "nombru()":
Code:
function nombru(lg) {	
var unua = true;
	for (var i = 0; i < lenE; i++) {  
	    x = document.getElementsByName(kodoj[i]);  
		if (unua) {	 // De eerste Europese taal is het Albanees en die is gemarkeerd als m.behulp v. radio-knoppen. Bovendiemn gebruik de inspectie van de markering van het Albanees om de variabelen die uiteindelijk lingvonombro (talenaantal = het aantal talen met een gelijkende vertaling) en lingvosumo (talensom = alle talen behalve die met een twijfelgeval) moeten opleveren te declareren.
     if (x.length > 1) {  // x.length = 3: array(x[0]=gelijkend, x[1]=niet gelijkend, x[2]=twijfelgeval
          if (x[0].checked) {  // gelijkend
	      lingvonombro = 1;   // declaratie van lingvonombro met algemene scoop, dus geen "var"
	  } else if (x[1].checked) {
	      lingvonombro = 0;  	// idem als boven met andere beginwaarde
	  }
	  if (!x[2].checked) {
	      lingvosumo = 1;  // declaratie van lingvosumo met algemene scoop, dus geen "var"
	  }
     }     
     unua = false; // want nu zijn lingvonombro en lingvosumo gedeclareerd en geinitialiseerd
     } else {
	  if (x.length > 1) {  // nu komen andere Europese talen met radio-knoppen aan de beurt
                if (x[0].checked) {
		    lingvonombro += 1;  
		}
		lingvosumo += 1;
	 } else {  // Hier betekent "else: x.length=1. Dat geldt voor zeven "grote" Europese talen, die al in een eerder PHP-document door de gebruiker zijn gemarkeerd, maar met slechts twee mogelijkheden (gelijkend of niet-gelijkend) in plaats van drie. Ze hebben de waarde 1 gekregen voor gelijkend en 0 voor niet gelijkend. Om die uitkomsten bij lingvonombro en lingvosumo op te tellen, krijgen we:
	     lingvonombro += x.value;	
             lingvosumo += 1;
	}
    }
    if (i < lenE - 1) {
        alert("You still have not given your judgment on the\n" +
        "translation of '..................' to all the languages!");
    }
}
}
Het probleem is, dat ik als lingvonombro NaN voortdurend (aan het eind, maar ook tijdens de berekening m. behulp v. alerts) krijg én dat de alert "You still have not given your judgment.........."verschijnt, hoewel ik als gebruiker alle talen heb afgehandeld.
Ik dacht, dat het kwam door dat gedoe met "if (unua) {}". maar na verwijdering van dat gedeelte en op de plaats waar nu "if (unua) {}" staat de declaraties lingvonombro = 0; lingvosumo = 0 blijft het omschreven probleem bestaan!
Ik hoop, dat deze keer het probleem overzichtelijk en beperkt is aangeboden. Bij voorbaat veel dank voor tips.

Ik heb een deel van de oplossing gevonden:
Als x = getElementsByName maar één element oplevert, kun je toch niet werken met x.value of (dat zou al beter zijn:) x.value[0]. Het is en blijft een node, dus typeof x.value[0] is "undefined". De enige juiste voorwaarde is: if (x[0].checked) {....................}. x[0].checked is boolean. Dus
Code:
function nombru(lg) {
lingvonombro = 0;
lingvosumo = 0;	
    for (var i = 0; i < lenE; i++) { 
         x = document.getElementsByName(kodoj[i]);  
        if (x.length > 1) {  
            [B]if (x[0].checked)[/B] {
	        lingvonombro += 1;   
	    }
	    if (!x[2].checked) {
	        lingvosumo += 1;   
	    }
       } else { 
	    if (x[0].checked) {
	        lingvonombro += 1;
	    } 
	    lingvosumo += 1;
            }
       }
}
Maar toch werkt het nog niet goed. Er gaat iets fout bij het vet gedrukte if (x[0].checked), de ene keer bij i = 11, de andere keer bij i = 10. Dat helpt jullie niet, maar misschien wel, dat in beide gevallen "x[0].checked" true is en de foutmelding "x[0] is undefined" verschijnt.
Is er iets fout met "if (!x[2].checked)" ? Die uitdrukking wordt geaccepteerd door JSHint, evenals "if (x[2].checked = false)".
Vandaag heb ik een andere mogelijke oorzaak ontdekt. De volgende PHP-syntax wordt niet geaccepteerd door http://phpcodechecker.com/:
Code:
if (isset($_POST['en'])) {
	print '
	    <input type="hidden" name="en" value="'.$_POST['en'].'" />
	    <input type="hidden" name="de" value="'.$_POST['de'].'" />
	    <input type="hidden" name="pl" value="'.$_POST['pl'].'" />
	    <input type="hidden" name="ru" value="'.$_POST['ru'].'" />		  
	    <input type="hidden" name="fr" value="'.$_POST['fr'].'" />
	    <input type="hidden" name="es" value="'.$_POST['es'].'" />
	';
	$pI = $_POST['portugalaItala'];
	//  Plenigo de radibutonoj fM.pI jam estas kontrolita en fontsugesto.html. @pI = pt, it au ip
	    if ($pI=="it") { 
	        print '
	            <input type="hidden" name="it" value="'.$_POST['it'].'" />
			';
		} else if ($pI=="pt") {
		    print '
			    <input type="hidden" name="pt" value="'.$_POST['pt'].'" />
			';
		} else {
	        print '
	            <input type="hidden" name="it" value="'.$_POST['it'].'" />
			    <input type="hidden" name="pt" value="'.$_POST['pt'].'" />
			';
			}
	    }
	print '
	<input type="hidden" name="specifZ" value="'.$_POST['specifZ'].'" />
	<input type="hidden" name="lingvonbro" value="'.$_POST['lingvonbro'].'" />       
	<input type="hidden" name="lingvosumo" value="'.$_POST['lingvosumo'].'" />           
	<input type="hidden" name="denprlnbro" value="'.$_POST['denprlnbro'].'" />      
	<input type="hidden" name="denprlsumo" value="'.$_POST['denprlsumo'].'" />
	<input type="hidden" name="vavalnbro" value="'.$_POST['vavalnbro'].'" />      
	<input type="hidden" name="vavalsumo" value="'.$_POST['vavalsumo'].'" />
	';
} else {
    print '
	<input type="hidden" name="lingvonbro" value="0" />       
	<input type="hidden" name="lingvosumo" value="0" />           
	<input type="hidden" name="denprlnbro" value="0" />      
	<input type="hidden" name="denprlsumo" value="0" />
	<input type="hidden" name="vavalnbro" value="0" />      
	<input type="hidden" name="vavalsumo" value="0" />
	
	<table border= "0" class="mllrgh">
        .....................
        </table>
    ';
Ik krijg nl. als foutmelding:
PHP Syntax Check: Parse error: syntax error, unexpected '}' in your code on line 36:
} else {
PHP Syntax Check: Errors parsing your code
Ik heb allerlei varianten uitgeprobeerd. Ziet iemand de fout?
Ik werk al sinds november aan deze app. Oh wanneer zal ik dit kunnen beëindigen!
 
Laatst bewerkt:
Helaas lukt helpen niet meer omdat het verhaal complex is en woorden als nombru, lingvosumo, nombruKonkl tijdrovend zijn om uit te pluizen. Ook gebruik je globale variabelen in de functies waarvan niet bekend is wat het zijn. Afgaande op de titel "Probleem van samenwerking tussen 4 php-docs en 2 included javascript-docs" is dit niet in kleine berichtjes te beantwoorden. Je praat nu over een complete applicatie.
 
Het probleem is in zoverre opgelost, dat alles afhangt van de volgorde, waarin de declaratie van variabelen en het gebruik van hun waarden in een functie chronologisch juist geordend is. Dat is soms moeilijk of niet uitvoerbaar, omdat in een included js-document enerzijds globale variabelen kunnen voorkomen, die op het moment van aanroep in een ander (normaliter HTML-)document nog niet gedeclareerd zijn, terwijl anderzijds die declaratie niet "vervroegd" kan worden, omdat onderliggende definities (bv. van een form) nog niet gegeven zijn.
Met andere woorden: het is noodazkelijk, dat alle in een included document voorkomende globale variabelen elders al gedeclareerd zijn, voordat een functie in dat document aangeroepen kan worden.
 
Laatst bewerkt:
Helaas lukt helpen niet meer omdat het verhaal complex is en woorden als nombru, lingvosumo, nombruKonkl tijdrovend zijn om uit te pluizen. Ook gebruik je globale variabelen in de functies waarvan niet bekend is wat het zijn. Afgaande op de titel "Probleem van samenwerking tussen 4 php-docs en 2 included javascript-docs" is dit niet in kleine berichtjes te beantwoorden. Je praat nu over een complete applicatie.

Zoals ik al had aangeraden: Gebruik de Engelse of Nederlandse taal.
Ook bij ondersteuning van derden is het erg gemakkelijk. Nu loop je eigenlijk al tegen een steen aan.

Voor jou is het makkelijk, maar voor ons niet.
 
Laatst bewerkt:
Constructief opbouwende kritiek voor de duidelijkheid.
En wat is de moeite om het aan te passen?

Je moet het zelf weten. Maar je lijkt nu dus daarom tegen een muur aan te lopen, omdat iemand niet dit script wilt en of kan doorgronden vanwege de moeilijke ondoorgrondelijke taal die erin gebruikt wordt. Eigenlijk had ik je al eerder gewaarschuwd. Dus zie het als een leerzame les i.p.v meteen af te blaffen over 'herhaalde kritiek'.

Ikzelf zou ook weigeren een script met zulke taal uitpluizen. Hoe moet ik nou precies weten wat er gebeurt met Spaans commentaar, en wat voor inhoud de variabele betreffen.

Het zal mij dan teveel moeite kosten om dit allemaal in Google Translate te gaan vertalen en het uitzoeken. Dus neem er gewoon je voordeel mee en vertaal het gewoon naar het Engels of Nederlands en zorg voor fatsoenlijke commentaar in je code die we kunnen begrijpen. Dat helpt zeker een stuk makkelijker ;).

Ons zal je er zeker een plezier mee doen, als je wilt dat wij je helpen met je script-gerelateerde problemen.
 
Laatst bewerkt:
Het probleem is in zoverre opgelost, dat alles afhangt van de volgorde, waarin de declaratie van variabelen en het gebruik van hun waarden in een functie chronologisch juist geordend is. Dat is soms moeilijk of niet uitvoerbaar
In jQuery is hiervoor document.ready(). Omdat je pure Javascript gebruikt is er een alternatief zodat je Javascript voor of na elementen kan zetten en het dan toch goed uitvoerbaar is.
Code:
<script>
function ready(callback){
  // Document Object Model (DOM) ready?
  if (document.readyState != 'loading') callback();
  else document.addEventListener('DOMContentLoaded', callback);
}
ready(function(){
  // main script
  var divText = document.getElementById("test").innerHTML;
  alert(divText);
});
</script>
<div id="test">Dit is een test</div>
 
Zouden we gewoon niet kunnen stoppen met deze discussie?
Het heeft allemaal niets te maken met het al door mijzelf opgeloste probleem.
 
Ik vind je persoonlijk een beetje ondankbaar overkomen.
Zeg dan gewoon iets als: "Op sich een goed punt. Ik zal er over denken!"
Lees ook dit even door:

http://www.helpmij.nl/forum/showthr...n-javascript?p=6094135&viewfull=1#post6094135

Vergeet niet dat we hier behulpzaam zijn, en dat we ook dankbaarheid graag terug zien.
Goed lering 'for the moment'

Ik stop er hier nu ook mee, maar onthoud wel dat mensen terughoudender zijn met buitenlandse taal. :)
Dus denk er nog maar eens goed over.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan