Problem med eval()

This is a discussion on Problem med eval() within the Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php) forum.

Re: Problem med eval()

Postby David Konrad on Sat Nov 22, 2008 2:22 am

Martin Larsen wrote:
> David Konrad wrote:
>
>> Det handler ganske enkelt om, at er indlejret i HTML,
>> gemt i en streng i en database, hvor eval() så kaldes. Løsningen er
>> ikke de ting du foreslår, men slet og ret at kalde en funktion inde
>> fra eval()-koden, der genererer de link med korrekte qoutes, som
>> ikke er mulige fra eval()-koden, der selv er qoutet (det er derfor
>> problemet opstår) ala
>
> Drejer det sig om at den oprindelige html/php kode bliver quoted før
> indsættelsen i databasen og ikke bliver unquoted tilbage til præcis
> samme tilstand som før? (Så der derved kommer syntaxfejl når den
> evalueres)

Ja! Lige netop!

Delphi-koden, hvis det overhovedet kan give mening - f.eks gem en statisk
side (sådan set blot en side)

procedure TFR_StaticPageText.btn_staticpage_saveClick(Sender: TObject);
var SQL: string;
T: string;
begin
T:=MM_HTML.Lines.Text;
T:=stringReplace(T,#39,'"',[rfReplaceAll]);

SQL:='update static_page_content set '+
'page_title='+encodeSQLText(ED_Title.text)+','+
'page_meta_description='+encodeSQLText(MM_Desc.Lines.Text)+','+
'page_meta_keywords='+encodeSQLText(MM_Keywords.Lines.Text)+','+
'page_breadcrumb='+encodeSQLText(ED_Bread.Text)+','+
'page_is_php='+inttostr(CB_Type.ItemIndex)+','+
'page_html='+encodePHPText(T)+' '+
'where page_id='+inttostr(FPageID)+' and
language_id='+inttostr(FLanguage);

D.OSCI.ExecSQL(SQL);

ED_Title.Modified:=false;
ED_Bread.Modified:=false;
MM_Keywords.Modified:=false;
MM_Desc.Modified:=false;
MM_HTML.Modified:=false;

updateButtons;
end;

simple "oversættelsesfunktioner"

function encodePHPText(text:string):string;
var count:integer;
begin
result:='';
for count:=1 to length(text) do begin
if text[count]='Æ' then result:=result+'Æ'
else if text[count]='æ' then result:=result+'æ'
else if text[count]='Ø' then result:=result+'Ø'
else if text[count]='ø' then result:=result+'ø'
else if text[count]='Å' then result:=result+'Å'
else if text[count]='å' then result:=result+'å'
else if text[count]='²' then result:=result+'²'
else if text[count]='è' then result:=result+'è'
else if text[count]='é' then result:=result+'é'
else result:=result+text[count];
end;
result:=quotedstr(result);
end;

så når siden så hentes via MySQL i PHP, er den qoutet med ' - og det går
naturligvis galt :-)

jeg håbede så, der var en qoutestr eller ækvialent i PHP - men det havde jo
alligevel været noget rod.

Nå, problemet er løst, og nu ved jeg hvordan jeg tackler den slags med eval
fremover.

> http://de3.php.net/manual/en/function.base64-encode.php
>
> Jeg havde et lignende problem med umulige blandinger af forskellige
> quotes som jeg løste én gang for alle på den måde.

Det er faktisk ret smart, den mulighed kendte jeg ikke. Den skal jeg have i
baghovedet i fremtiden. Tak for det!

mvh


David Konrad
 
Posts: 13
Joined: Thu Nov 13, 2008 2:45 pm

Re: Problem med eval()

Postby Martin Larsen on Tue Nov 25, 2008 1:21 pm

David Konrad wrote:
>
> Delphi-koden, hvis det overhovedet kan give mening

Jo da. Når jeg ikke lige koder i PHP, er det i Delphi. Optool
(http://www.kreacom.dk/optool) er et forholdsvis "berømt"
postcardware-program skrevet i Delphi med kol/mck så det derved kun
fylder ca. 100 k eller deromkring :-)


> D.OSCI.ExecSQL(SQL);

Bare nysgerrig. Hvilke databasekomponent bruger du?

Hilsen
Martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Problem med eval()

Postby David Konrad on Wed Nov 26, 2008 6:26 am

Martin Larsen wrote:
> David Konrad wrote:
>>
>> Delphi-koden, hvis det overhovedet kan give mening
>
> Jo da. Når jeg ikke lige koder i PHP, er det i Delphi. Optool
> (http://www.kreacom.dk/optool) er et forholdsvis "berømt"
> postcardware-program skrevet i Delphi med kol/mck så det derved kun
> fylder ca. 100 k eller deromkring :-)

Det kendte jeg ikke :-) Har blot alle browsere "parat" nede i taskbaren.

Delphi er så dejligt, uanset hvad man kan finde på, kan man gribe fat i
Delphi og lave det i et snuptag. Jeg byggede websitet op sideløbende med et
Delphi-administrationsprogram, fordi det ganske enkelt er nemmere at smække
det sammen i Delphi, end det er at konstruere både webshop/hjemmeside-system
OG web-baseret administration på samme tid. Det *kan* godt være temmelig
tidskrævende at skulle vedligeholde et webbaseret system løbende, ift
ændringer i relationer og database-struktur, men jeg var nødt til have et
system - manuel administration er umulig med pt 103 indbyrdes forbundne
relationstabeller. Jeg er så begyndt i det små, med webbaseret
administration, f.eks ifb nyhedsbrev osv, men intet slår da
Delphi-programmet, hvor man kan styre mange sites på samme tid, i et
hierakisk træ, og endda køre på både lokal eller remote webhoteller direkte,
dvs på en live-webshop. Jeg synes selv det er et utroligt stærkt system.

Det er trist man ikke rigtig sådan professionelt kan få arbejde længere som
Delphi-udvikler.

>> D.OSCI.ExecSQL(SQL);
>
> Bare nysgerrig. Hvilke databasekomponent bruger du?

Forstår godt du spørger!! For det var virkelig en krævende proces, at få en
ordentlig, stabil MySQL-tilgang. Jeg begyndte selv at udvikle et
MySQL-databasekomponent, men det var rimelig problematisk, og selvom det
lykkedes til dels, var der for mange exceptions OG alverdens undtagelser ift
de forskellige MySQL-versioner - jeg havde ikke tid til det, og selvom det
jo var morsomt, skulle jeg blot bruge noget der fungerede. Jeg prøvede så en
masse forskellige "åbne" SQL-komponenter af, som jeg så wrappede til MySQL
og kørte dataset frem og tilbage mellem "native" datasets, og testede de
MySQL-komponenter der findes - brugte lang tid et komponent (husker ærlig
talt ikke hvilken, har været SAMTLIGE MySQL-komponenter igennem, med
statsgaranti, ingen virker særlig godt) som jeg fejlrettede og fik til at
fungere. Men, så kom der en update af zeoslib, som rent faktisk virkede, og
den har jeg brugt siden. http://sourceforge.net/projects/zeoslib

Der *er* fejl i det mv, det fungerer dog, og jeg kører database-laget
fuldkommen separeret fra den øvrige kode. Denne OSCI er en (meget stor)
wrapper-klasse der indeholder alt ift den aktuelle webshop-connection, f.eks
instantierer database-tabeller i klasser mm, som properties ala

property Languages: TLanguageList read FLanguageList;

f.eks de statiske sider, som jeg havde problemer med, ift evail()

property StaticPages: TStaticPages read FStaticPages write FStaticPages;

og denne enorme "container" bruges så i cirka 80 forme eller frames, der
udgør administrationen af websitet på et logisk, idiot-sikkert niveau.

Wrapperen er i øvrigt en konsekvens af, at jeg prøvede så mange
database-komponent løsninger af, samtidig med at jeg jo udviklede systemet,
og det har virkelig været helt i uheld, for med bagvedliggende
exceptionhandling, transaktionsstyring mv, er det totalt idiot-sikkert og
fungerer så godt som hvis jeg kørte på en local paradox eller oracle.

Nå, det var en lang smøre. Det er ikke hver dag, hvis nogen sinde, jeg får
lejlighed til at udbrede mig om Delphi-administrationsystemet :-)

mvh


David Konrad
 
Posts: 13
Joined: Thu Nov 13, 2008 2:45 pm

Previous

Return to Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php)

Who is online

Users browsing this forum: No registered users and 0 guests

cron