Jag håller på med ett modulsystem till min nya hemsida http://www.engineering-quality.com. Tanken är att jag ska kunna skriva ett antal modultexter som sedan kan laddas in i huvud"artiklarna". På det sättet kan jag ändra gemensamma beskrivningar i ett dokument. Funktionen eval i PHP http://fi.php.net/eval gör det du vill, men tänk dock på att detta är ett stort säkerhetshål om det används fel, alltså med data som kommer från användarna. Hej, Hur använde du eval()? Visa kod. Jag har tyvärr inte kvar koden, men ungefär såhär: Jag garanterar att du använt eval felaktigt, på basen av vad du skrev senast. Jag försökte lösa det på detta sätt, men inte heller det fungerar. Osäker på hur eval används egentligen. Har tittat på php.net och w3schools, men blir inte klokare av det tyvärr. Detta är min tolkning: eval($sträng_med_php_kod); Förstår inte riktigt vad du vill göra. Det ser ut som du försöker ge en variabel det värde variabeln redan innehåller, alternativt skapa en variabel med ett visst namn och ge den sitt eget namn som värde. Jag försöker skriva ut $moduler[$key] som innehåller text ifrån ett fält i databasen. I det fältet vill jag lagra php-kod (som ska kunna köras när den hämtats in) för att kunna infoga den texten i redan inhämtade databastexter. Hur du testat det jag skrev? Hej, Jag testade och det ville inte. Har inte använt eval tidigare. Hittade ett uppmuntrande citat nu :) "Novice programmers have suggested that evil() would be a more appropriate name for the function." 1) Kan du ge ett exempel på vad $str innehåller? 1) Det kan se ut såhär: (Notera att $term egentligen inte ingår i moduleloaderscript.php som står ovan - jag klippte in den dit) Det lilla jag hann se från eval får mig att tro att det ska vara något i stil med: Eval kommer _köra_ din php-kod, och _skriva ut_ rubb och stubb till klienten (webbläsaren.) Inte till din variabel. Php är trots allt php. Tackar för allt engagemang. Jag ska testa lite senare (ska på semester nu ett tag). Anledningen till att jag skriver så mycket kod på en gång var att jag hade en färdig lösning för det jag ville få ut, med det lilla kruxet att min php-kod i databasen inte kördes.Lagra php-script i databas som sedan körs när de hämtas in - hur?
Just nu är kolumnen i formatet TEXT och hämtas utan real escape string m.m. Dock körs inte php-scripten. (Alla är skrivna som <?php ......scriptgrejer ... ?> i databasen).
Anledningen till varför jag måste lagra dem i databasen är på grund av att mitt nuvarande menysystem som skapas automatiskt från hur databasen ser ut.
Jag kör:
Win Server2003 32 bit
Mysql
Apache
I de versioner som var de senaste för 4 månader sedan.
Några tips?Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
Jag testade eval, men det fungerade inte ändå tyvärr. Kan det handla om databasens utformning kanske? Jag kommer inte att ha användarinput på sidan och all administration sker via phpmyadmin.
/RichardSv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
<?php
eval("\$moduler[$key] = \"$moduler[$key]\";");
echo $moduler[$key];
?>
$moduler[$key] innehåller texten från databasen och är satt sen tidigare. Till det ska jag tillägga att allt fungerar om jag bara fyller i det på hemsidan utan att ladda ur databasen,
Jag har aldrig använt eval innan jag skulle fixa detta, så kanske har använt det galet.Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Läs manualen, där ser du exempel på hur den används.Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
<?php
if (in_array($term, $modultitlar)) {
$key = array_search('$term', $modultitlar);
$str = '$moduler[$key]';
eval("\$str = \"$str\";");
echo $str;
}
unset($term, $key, $str);
?>
Men det fungerar inte när man hämtar det ur databasen.Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
kommer köra php-koden i strängen som du skickade som argument. Det är iaf så jag tolkar dokumentationen på php.net
(Obs, jag kan inte php, så jag ger inga garantier)Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
Så här ser koden ut:
---Moduleloaderengine---
<?php
$hamtamoduler = "SELECT ...(censur)...";
$sparademoduler = mysql_query($hamtamoduler) or die(mysql_error());
$moduler = array();
$modultitlar = array();
$z = 0 ;
while($modulrader = mysql_fetch_assoc($sparademoduler)){
$moduler[$z] = $modulrader['moduler'];
$modultitlar[$z] = $modulrader['modultitlar'];
$z++;
}
for($ev = 0 ; $ev < sizeof($moduler) ; $ev++){
}
?>
-------
---Moduleloaderinput---
<?php
$term = 'Testmodul 1';
if (in_array($term, $modultitlar)) {
$key = array_search('$term', $modultitlar);
echo $str;
echo $str2;
}
unset($term, $key, $str, $str2);
?>
------
Dessa 2 scripts är i 3 separata filer just nu, men har klippt ihop dem lite. Hoppas inget knasigt hände.
Blev det klarare nu? Allt som Eval är tänkt att göra är att se till så det sista scriptet körs.Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
Tydligen så returnerar den NULL om inte return används :S.
Försökte lägga in det på detta sätt, men det fungerade inte heller:
---Moduleloaderinput---
<?php
$term = 'Testmodul 1';
if (in_array($term, $modultitlar)) {
$key = array_search('$term', $modultitlar);
echo $str;
echo $str2;
$streval=eval('return ("' .$str.'");');
echo $streval;
}
unset($term, $key, $str, $str2);
?> Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
2) Kan du ge ett exempel på vad du förväntar dig att $streval ska innehålla efter anropet till eval($str)?Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
EXEMPEL:
Vanlig text...
<?php
$term = 'term'; //Specificerar vilken modul som ska läsas in från databasen
include('Moduleloaderinput.php'); //All kod för att hämta ut innehållet från databasen
?>
Vanlig text...
SLUT PÅ EXEMPEL
2)
Vanlig text...
Modulinnehåll i form av vanlig text som hämtats från databasen på platsen som motsvarar värdet på $term
Vanlig text...
Notera att allt i 1) står skrivet i en databaspost.Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
eval('?>' . $str);
Alltså att du först måste stänga av php-parsingen.
Sen kan jag inte förstå hur man kan försöka med jättesträngar först utan att testa sig fram och se till att man är helst säker på en funktion fungerar, men det är bara jag det...Sv: Lagra php-script i databas som sedan körs när de hämtas in - hur?
Vad du vill göra är att "fånga" det som skrivs ut i en variabel, och ett lämpligt sätt att göra så på är med följande funktioner:
http://se.php.net/manual/en/function.ob-start.php
http://se.php.net/manual/en/function.ob-get-contents.php
http://se.php.net/manual/en/function.ob-end-clean.php
Sedan använder du dem ungefär såhär:
ob_start();
eval($str);
$streval = ob_get_contents();
ob_end_clean();Sv:Lagra php-script i databas som sedan körs när de hämtas in - hur?
Mvh
Richard