probleem met eval()

  • Onderwerp starter Onderwerp starter bn2vs
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Ik krijg de foutmelding "Kan niet worden toegewezen aan het resultaat van een functie" :confused:
PHP:
         precatk = "";
         if (bedr1 != "") { eval("precat" + naam1let) = eval("precat" + naam1let) + "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"; };
naam1let is hier "k" en de rest van de variabelen lijkt me niet echt belangrijk.

Ik ben er vrij zeker van dat het probleem hieraan licht, maar heb geen idee wat er dan wel fout is :(
PHP:
eval("precat" + naam1let) = eval("precat" + naam1let) + ...
 
Ik denk de eval() om alles heenzetten:
PHP:
if (bedr1 != "") eval("precat" + naam1let + " +=  <a href='#' onclick='" + naam1nos + "()'>" + naam1 + "</a><br>");
Je hoeft de ' binnen de " niet te backslashen. En += is makkelijker, x = x + 4 is hetzelfde als x += 4 :)


Vr.Gr. Egel.
 
Dit had ik nodig voor die ene site waar ik jou al zo veel me heb lastiggevallen, en die lijn code word naar een andere pagina geschreven, vandaar de backlashes :)

Ik heb jouw methode uitgeprobeert, en krijg een syntax fout medling
PHP:
         if (bedr1 != "") { eval("precat" + naam1let += "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"); };
moeten die { ... }; weg ofzo?
 
Hey Bn2vs,

Er zit iets fout waardoor Eval (=evaluate) de code niet slikt. Ik kan zo gauw niet je fout vinden. Nu is het zo dat Eval voor dit soort problemen wordt afgeraden (!). Je kunt beter een Array gebruiken (tenzij er een onwijs goede reden is dat het zo moet natuurlijk):

PHP:
precat       = Array();
bedr1        = "iets";
naam1let   = "k";
naam1nos  = "l";
naam1       = "klm"

if(bedr1!="") precat[naam1let] += "......";

Let wel dat wanneer je += gebruikt, het variabel dat je set al moet bestaan. (Je kunt niet iets optellen bij een waarde die niet bestaat). (ik gok trouwens dat dat het hele probleem bij die Eval functie is).

Ik hoop dat dit je probleem oplost.

Wout
 
Ik heb nu deze code

PHP:
         precat = Array();
         precatk = "";
         if (bedr1 != "") { precat[naam1let] += "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"};

Ik krijg geen foutmelding, maar hij doet ook niet echt veel... doe ik iets verkeerd met die array ofzo?
 
Wel, de code die word samengesteld word niet naar de gegenereerde pagina geschreven :'(

bedr1 heeft een redelijk lange waarde, maar die is niet gelijk aan nix, dus dat is het ook niet denk ik...
 
plaats even een alert(bedr1); voor je if, dan weet je zeker dat de waarde op dat punt aankomt.

En kun je nog even de code die wat gaat doen met de code plakken. Want waarschijnlijk zit daar de fout.

Wout
 
Ok, dat heb ik net gedaan, en de waarde komt aan zoals die zou moeten :confused:
 
Huh? ik snap die zin niet volledig :confused:
Moet ik de waarde van die variabele er gewoon inzetten?
 
Je zegt dat het script niks genereerd. Zou je het stukje script dat iets zou moeten genereren (of het complete script) hier even kunnen plakken. Want daar zit de fout waarschijnlijk in.

Wout
 
Dat lijkt me onwaarschijnlijk, want al de rest word wel gegenereerd, enkel deze lijn niet :(
PHP:
   naam1    = "k een naam";   
   locatie1 = "een adres";   
   url1     = "http://www.een-website.com";   
   telefoon1= "05419665464";   

         functionbeg = "function "; functionope = "() { "; functnaam = "naam = \""; functloc = "locatie = \""; functendr = "\"; "; functurL = "url = \""; functtel = "telefoon = \""; funfend = "} \n";
         if (window.naam1 != null && naam1 != "" && naam1 !=" ") {naam1let = naam1.charAt(0); naam1nos = naam1.split(' ').join(''); bedr1 = functionbeg + naam1nos + functionope + functnaam + naam1 + functendr + functloc + locatie1 + functendr + functurL + url1 + functendr + functtel + telefoon1 + functendr + funfend} else {bedr1 = ""};
         vardetailed = bedr1 + bedr2 + bedr3 ;
         precat = Array();
         precatk = "";
         if (bedr1 != "") { precat[naam1let] += "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"};


         if (precatk != "") {categoryk = "function a() {hide(); imgsta.src=\'a/\'" + active_btn2 + "; Tip(\'"+ precatk +"\');}"};
         varcategories = precatk;

varcategories word dan naar een nieuwe pagina geschreven. (die code werkt)
 
Laatst bewerkt:
Ik heb je code even uitgelijnd, en zie dat je nog steeds verwijst naar precatk terwijl je nu precat["k"] definieerd. Ik denk dat daar je fout zit.

PHP:
         functionbeg = "function ";
		 functionope = "() { ";
		 functnaam = "naam = \"";
		 functloc = "locatie = \"";
		 functendr = "\"; ";
		 functurL = "url = \"";
		 functtel = "telefoon = \""; 
		 unfend = "} \n";
        
		if (window.naam1 != null && naam1 != "" && naam1 !=" ") {
			naam1let = naam1.charAt(0);
			naam1nos = naam1.split(' ').join('');
			bedr1 = functionbeg + naam1nos + functionope + functnaam + naam1 + functendr + functloc + locatie1 + functendr + functurL + url1 + functendr + functtel + telefoon1 + functendr + funfend
		} else {
			bedr1 = ""
		};
        
		vardetailed = bedr1 + bedr2 + bedr3 ;
      // Category tooltips
        precat = Array();
        precatk = "";  // WOUT:je definieerd hem hier als zijnde leeg
        if (bedr1 != "") {
			precat[naam1let] += "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"
		};


         if (precatk != "") { // WOUT: je vraag hier of hij niet leeg is. maar het is nogal wiedes dat hij leeg is aangezien je hem leeg hebt gedefinieerd en niet veranderd.
			 categoryk = "function a() {hide(); imgsta.src=\'a/\'" + active_btn2 + "; Tip(\'"+ precatk +"\');}"
		};
         varcategories = precatk;
 
Dit zorcht er toch voor dat hij 'opgevuld' word?
PHP:
precat[naam1let] += "<a href=\\'#\\' onclick=\\'" + naam1nos + "()\\'>" + naam1 + "</a><br>"
		};
 
dat zorgt ervoor dat precat["k"] wordt opgevuld :). dat is iets anders dan precatk.

Wout
 
Hoe maak ik dan dat precatk word opgevuld?
(daarom gebreukte ik dus eval() )
 
Dat zou dus met eval zijn. Maar het wordt zeer streng afgeraden om eval voor dat soort doeleinde te gebruiken. Zoals ik boven vermelde kun je beter gebruik maken van een array. Je checked dan dus niet voor precatk, maar voor precat["k"].

dus je if zou dan worden: if(precat["k"]!="") { ... }

Wat je goed moet onthouden is dat wanneer je een groep variabelen hebt (precata, precatb enz..) je deze beter gegroepeerd weer kan geven. Dus als in een array: precat["a"], precat["b"]. De computer snap dan waar je mee bezig bent, en heeft dan een grote bak aan functies beschikbaar om ermee te werken.

Wout
 
Ow, daar had ik zelf aan moete denken -_-"

Ja, je hebt gelijk, maar ik heb nopg nooit eerder ene array gebruikt, dus ik snap nog niet volledig wat de toepassingsmoeglijkheden zijn. Maar al doende leer je he :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan