webForumDet fria alternativet

lagra phpkod i databasen.

PHP

8 svar · 504 visningar · startad av altruism

Medlem sedan nov. 200664 inlägg
Frågan#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å?

Medlem sedan juni 200032 967 inlägg
#2

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

Mvh

Medlem 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.

Medlem 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?

Medlem sedan feb. 2007278 inlägg
#5

sprintf

eval is evil!

Medlem sedan nov. 200664 inlägg
#6

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

Medlem 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.

Medlem 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;
Medlem 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.

480 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
352 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)