Avatar billede zyxep Nybegynder
15. maj 2005 - 16:03 Der er 23 kommentarer og
1 løsning

eval() af text.. hjælp

hey..

jeg har en text som står i mysql jeg skal sende med mail();

og jeg har fundet ud af jeg skal lave eval(); på den..

jeg får en fejl når jeg laver eval på denne text

http://zyxep.net/text.phps

fejlen: Parse error: parse error, unexpected T_STRING in /hosting/www/zyxep.net/bnc/Bestilling.php(123) : eval()'d code on line 1

nogen som kan hjælp
jeg kan ikke se hvad fejlen er i den text før eval udføre den..
Avatar billede ksoren Nybegynder
15. maj 2005 - 16:09 #1
<?PHP
<html><head>...
?>

Det ligner for mig heller ikke gyldig php-kode
Avatar billede ksoren Nybegynder
15. maj 2005 - 16:14 #2
eval("?>".$text_to_evaluate);

--- din tekst:

<html><head>...
Produkt: <?php echo $produkt[0] ?><br>...
Avatar billede zyxep Nybegynder
15. maj 2005 - 16:14 #3
nu satte jeg kun

<?PHP
?>

ind for at kunne få den til phps.. så se bort fra dem
Avatar billede zyxep Nybegynder
15. maj 2005 - 16:16 #4
hmm det forstår jeg ikke helt ksoren
Avatar billede ksoren Nybegynder
15. maj 2005 - 16:25 #5
eval("?>".$text_to_evaluate);

?> fortæller at det som kommer efterfølgende ikke er php, men blot almindelig tekst

I din tekst:
Produkt: " . $produkt[0] . "<br>

Det vil blot blive fortolket som almindelig tekst. Så du skal angive start på phpkode:
Produkt: <?php echo $produkt[0] ?><br>
Avatar billede zyxep Nybegynder
15. maj 2005 - 16:28 #6
det kan jeg ikke helt forstå fordi jeg har denne text Ordrebekræftelse af ordre " . $ordrenr . " fra " . $_SESSION["indstillinger"]["firma_navn"] . " som os blir sat i eval() og den virker
Avatar billede barklund Nybegynder
15. maj 2005 - 16:33 #7
Det, som du eval'er, skal være et gyldigt php-script. Dit script er ikke gyldigt php-script, så det kan du ikke eval'e.

Ret det til noget med:

$text = "<html><head>... ";

Så kan det eval'es korrekt.

Derudover skal alle quotes (altså ") escapes inden i teksten - for eksempel i din <link> - så de ikke blandes sammen med de andre quotes, der bruges til at indsætte php-script.

Dog er det ikke særlig pænt og det ville være meget pænere at holde det som en streng og indsætte placeholder som [PRODUCT1] og så bare lave en str_replace på teksten for at få de rigtige tekster ind. Det ville være meget mere logisk og vedligeholdelsesbart.

--
Morten Barklund
Avatar billede ksoren Nybegynder
15. maj 2005 - 16:37 #8
aha, nu kan jeg godt se du forsøger at lave det hele i en streng. Men så er du nok nødt til at omformatere teksten lidt.

<html><head>

er jo en streng, så der skal "" rundt om. Da der indgår " i teksten, skal disse escapes. Så prøv noget i denne stil

eval("\$eval = \"$buf\";");
echo $eval;

-- tekst:

<html><head><link href="http://zyxep.net/zyxep.css\" rel=\"stylesheet\" type=\"text/css\">...
Produkt: " . $produkt[0] . "<br>...
Avatar billede zyxep Nybegynder
15. maj 2005 - 16:42 #9
barklund..

når jeg trækker det ud blir det sat i et array som hedder $_SESSION["indstillinger"]["bestilling_message"]; hvor jeg så laver en $message = $_SESSION["indstillinger"]["bestilling_message"];
og så en eval("\$message = \"$message\";");
Avatar billede barklund Nybegynder
15. maj 2005 - 17:12 #10
Jeg vil nu stadig langt rekommandere at bruge placeholders og str_replace frem for denne tilgang. Det vil du blive meget mere glad for i længden!
Avatar billede zyxep Nybegynder
15. maj 2005 - 17:18 #11
hmm hvordan ville du lave det?

det skal være sådan så jeg kan lave en php fil hvor jeg har en form hvor jeg kan rette det info der
Avatar billede barklund Nybegynder
15. maj 2005 - 17:44 #12
At du i din config fil (eller hvor din tekst nu står henne) skriver noget med:

$besked = <<< EOF
<html><head><link href="http://zyxep.net/zyxep.css" rel="stylesheet" type="text/css"></head><body background="http://zyxep.net/images/bg.jpg" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">Tak for Deres ordre.<br>
Deres ordre vil blive effektueret/leveret så snart vi har registreret Deres indbetaling.<br>
<br>
Produkt: [produktnavn]<br>
Pris: [produktpris]<br>
Ident: [brugernavn]<br>
Email: [email]<br>
Ordrenummer: [ordrenr]<br>
Shell: [shell]<br>
IRC server: [server]<br>
Password: [password]<br>
IP: [ip]<br>
<br>
Vi beder dig hurtigst mugligt overføre beløbet til.<br>
<br>
[bank]<br>
Reg. nr: [reg]<br>
Konto. nr: [konto]<br>
<br>
Du bedes venligst angive ordrenummer når pengene indbetales, da vi ellers ingen mulighed har for at vide hvem der har indbetalt pengene.<br>
<br>
M.v.h.<br>
<br>
[firmanavn]<br>
[firmaemail]<br>
[firmahp]
</body>
</html>
EOF;

Så kan du - når du skal bruge den - indsætte de manglende variabler som:

$replaces = array(
    "[produktnavn]" => "Fuji",
    "[produktpris]" => 42,
    ...
);
$ny_besked = str_replace(array_keys($replaces), array_values($replaces), $besked);

Det ser måske umiddelbart lidt omstændigt ud, men det er meget mere overskueligt og brugervenligt (for dig og eventuelle kommende programmører) i længden.

--
Morten Barklund
Avatar billede zyxep Nybegynder
15. maj 2005 - 17:50 #13
nu vil jeg jo gerne have det via mysql så jeg hvad texten er generalt.. men det ser smart ud med det der [firmanavn] osv :P
Avatar billede zyxep Nybegynder
15. maj 2005 - 18:17 #14
og forresten barklund.. hvis jeg skal lave det på den måde skal jeg ændre hele mit system.. og det tager lang tid at rette og så teste os
Avatar billede barklund Nybegynder
15. maj 2005 - 18:47 #15
Det er rigtigt :)

Skal du bare lige løse dit problem her og nu skal du "nok" bare escape alle dine " inden i din tekst - altså dem, der ikke bruges til at indsætte php. For eksempel i din <link> og tilsvarende steder.

Men jeg vil stadig rekommandere at lave det om :)

--
Morten Barklund
Avatar billede zyxep Nybegynder
15. maj 2005 - 18:51 #16
barklund.

jeg ordner det her lige nu og så når det her system er færdigt..

går jeg igang med en mega update af det ..

fordi så vil jeg lave det med classes når jeg har lært det :P og så det du har der ;) hvis ikk jeg har glemt. det
Avatar billede barklund Nybegynder
15. maj 2005 - 18:57 #17
Kan du så få det til at virke ved at escape dine quotes? Altså rette nogle af " til \"?
Avatar billede zyxep Nybegynder
15. maj 2005 - 18:59 #18
hvad skal jeg rette? det jeg sådan set har søgt :P
Avatar billede barklund Nybegynder
15. maj 2005 - 19:22 #19
Nu har jeg sagt det fire gange? Skal jeg virkelig gøre det for dig? Læs lige mine kommentarer igennem... :)
Avatar billede zyxep Nybegynder
15. maj 2005 - 20:33 #20
barklund

nu ser filen sådan her ud http://zyxep.net/text.phps

prøv at bestil en ting hos http://zyxep.net/bnc/Bestilling.php og kig "message" så finder du min fejl
Avatar billede barklund Nybegynder
15. maj 2005 - 20:41 #21
Du skulle jo ikke nødvendigvis slette alle quotes, men når nu du har, så skal du lige indkapsle array-tilgang i to niveauer i krøllede parenteser - altså:

{$_SESSION["indstillinger"]["bank_navn"]} <br>

Og ligeledes skal du gøre i de linjer, hvor du har en streng som indeks - eller fjerne quotes. Altså vælge én af følgende metoder:

Ident: {$_POST["username"]} <br>
Ident: $_POST[username] <br>

--
Morten Barklund
Avatar billede zyxep Nybegynder
15. maj 2005 - 20:56 #22
så virker den barklund :P

svar?? :S eller skal jeg bare beholde pointsne :P
Avatar billede barklund Nybegynder
15. maj 2005 - 21:37 #23
Finfin :)
Avatar billede barklund Nybegynder
15. maj 2005 - 21:42 #24
Tark for points...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester