webForumDet fria alternativet

lagra phpkod i databasen.

8 svar · 502 visningar · startad av altruism

altruismMedlem sedan nov. 200664 inlägg
#1

Jag har ett dumt problem som är lite irriterande. Jag är ny på php mysql så det kanske finns ett enkelt svar på det här (hoppas det).

Det är så att jag tänkte lagra en htmltabell med lite bilder/länkar i, dessa länkar innehåller phpkod. När jag sedan hämtar htmltabellen från databasen exekveras inte phpkoden i länken utan skrivs bara ut som den står.

Tabellen ser ut såhär:

				
	<table cellpadding="20px"><tr><th>Measuring</th></tr><tr>
		<tr>
			<td  onMouseOver="this.style.backgroundColor='#f1f1f1'; this.style.cursor='pointer'; this.style.color='#ababab';" onMouseOut="this.style.backgroundColor='';" onclick="window.location.href='measuring.php?language=<?php echo $language;?>&pageId=cm600'"><img src="images/benchsmall.jpg" /><br/><a href='measuring.php?language=<?php echo $language;?>&pageId=cm600'>CM 600</a></td>
			<td  onMouseOver="this.style.backgroundColor='#f1f1f1'; this.style.cursor='pointer'; this.style.color='#ababab';" onMouseOut="this.style.backgroundColor='';" onclick="window.location.href='measuring.php?language=<?php echo $language;?>&pageId=cm600c'"><img src="images/benchsmall.jpg" /><br/><a href='measuring.php?language=<?php echo $language;?>&pageId=cm600c'>CM 600C+</a></td>
		</tr>
		<tr>
			<td colspan="2" onMouseOver="this.style.backgroundImage='url(images/tablebghover2.gif)'; this.style.cursor='pointer'; this.style.color='#ababab';" onMouseOut="this.style.backgroundColor=''; " onclick="window.location.href='accessories.php?language=<?php echo $language;?>&pageId=measuring'"><a href='accessories.php?language=<?php echo $language;?>&pageId=measuring'><?php echo $contents[0][0]; ?></a></td>
		</tr>
</table>

Länkarna blir då såhär:

http://localhost/Dataliner/measuring.php?language=%3C?php%20echo%20$language;?%3E&pageId=cm600

istället för t.ex.:

http://localhost/Dataliner/measuring.php?language=sv&pageId=cm600

Finns det något sätt att lösa detta på?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Frågan har inte med SQL att göra - flyttas därför per omgående till lämpligare forum.

Mvh

GislavedMedlem sedan nov. 20041 740 inlägg
#3

Du kan köra php-koden med eval(), men jag tycker inte att det är någon bra lösning.

altruismMedlem sedan nov. 200664 inlägg
#4

Alltså när jag skriver ut tabellen? Något sånt här?

echo eval($contents[0][0]);

($contents[0][0]; är mitt sätt att få tag på tabellen)

Vad skulle vara en bättre lösning?

itpastornMedlem sedan feb. 2007278 inlägg
#5

sprintf

eval is evil!

altruismMedlem sedan nov. 200664 inlägg
#6

Jag har kollat in sprintf nu men förstår inte hur/var jag ska använda det...

PaceMedlem sedan juni 20019 024 inlägg
#7

Lagra aldrig kod i databasen. Databas är till för data, därav namnet.

Bygg ett abstrakt "mallsystem" i stället.

I stället för ...<a href='measuring.php?language=<?php echo $language;?>&pageId=cm600'>CM 600</a>..., lägg in <a href='measuring.php?language={{language}}&pageId=cm600'>CM 600</a>.

När du sedan hämtar datan, ersätt {{language}} med ditt värde för variabeln language.

altruismMedlem sedan nov. 200664 inlägg
#8

Okej, jag använda str_replace för att byta ut {{language}} är det rätt väg att gå eller börja använda sprintf på något sätt?

$language=$_GET['language'];
$content_to_print=str_replace("{{language}}",$language,$contents[0][0]);
echo $content_to_print;
itpastornMedlem sedan feb. 2007278 inlägg
#9

altruism skrev:

Jag har kollat in sprintf nu men förstår inte hur/var jag ska använda det...

Lagra bara atomära data i databasen. Din tabell har massor av upprepade rader (varav mycket kan försvinna med bättre hantering av CSS och javaskript, men det förtar inte principen.

sprintf() är ett sätt att sätta ihop det du hämtat från databasen till längre strängar. Du använder det med en mall.

124 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)