Avatar billede sollie Nybegynder
12. oktober 2009 - 20:33 Der er 7 kommentarer og
1 løsning

Konverter $_SERVER variabler til indsættelse i en MySQL Database

Jeg er igang med at lære mig selv PHP da jeg vil lave et website på en linux boks med en database.

Jeg vil føre log over besøgende på mit website, men i øjeblikket har jeg problemer med at indsætte nogle af variablerne i min log tabel.
De fleste variabler jeg gemmer henter jeg ud fra $_SERVER delen i PHP, som er de fleste, hvis ikke alle, som jeg kunne finde frem til. Bare for at nævne det så kontrollere jeg om de er sat med isset og om de indeholder noget eller om det bare er en tom tekst streng. Hvis det er skrives det i SQL strengen at den variable er null og databasen er sat op til at modtage NULL værdier.

Hvis variablerne i $_SERVER har en værdi så overføre jeg dem til en midlertidig variable, til lige den del kontrolleret, som jeg så indsætter efterfølgende i SQL strengen når den skal udføres.
Et eksemple på en SQL streng som jeg kan skrive er: "INSERT INTO 'website'.'websitelog'(value1, value2, value3) VALUES(NULL, '$value2', '$value3');"

Jeg har prøvet at udføre den, men den fejler hver gang at jeg bruger de værdier jeg henter ud i stedet for at bruge nogle test værdier, som 123 eller abcd, eller andet som kan være i en tekst streng. Jeg har også prøvet at få selve SQL sætningen skrevet i browseren og som jeg kan se så indeholder en eller flere af $_SERVER variablerne elementer som kunne betyde at sætningen bliver ændret i en forstand som gør at MySQL serveren ser den anderledes end hensigten, som gør at indsættelsen fejler.

Jeg har prøvet at sige at variablerne køres igennem funktionen addslaches, uden held.

Det jeg gerne vil vide her er om jeg kan tage variablerne og køre igennem en anden funktion eller give de midlertidige variable navne et andet/ekstre symbol. Efter min viden f.eks. skulle det i f.eks. java være muligt at en variable som en String kunne gemmes  som private String @variable, og så lægge den direkte ind i MySQL tekst strengen og det kunne så gøre at en bruger som skulle gemme ting eller udføre en anden database handling ikke vil kunne indføre uhensigtmæssig SQL kode.

Kan PHP noget ligende eller andet hvor at jeg kan undgå sådanne problemer?

P.S. Undskyld den evt. uoverskuelige tekst.
Avatar billede Slettet bruger
12. oktober 2009 - 21:14 #1
Prøv at escape den streng du sætter ind i databasen med:
mysql_real_escape_string($streng, $dblink)
Avatar billede sollie Nybegynder
12. oktober 2009 - 22:39 #2
Kan du komme med et eksempel på hvordan det f.eks. kunne se ud?
Jeg har gjort nogle forsøg med nogle eksempler jeg fandt via google, men jeg tror at jeg gør det forkert.
Avatar billede bente_fiber Nybegynder
13. oktober 2009 - 06:20 #3
Sådan her

mysql_escape_string($_SERVER['HVA-DU-NU-VIL-GEMME']);

Hvis du vil gemme hele $_SERVER variablen, kan du serialize den.

Eksempel:
serialize($_SERVER);

- Simon
http://www.mybabe.dk
Avatar billede sollie Nybegynder
13. oktober 2009 - 10:58 #4
Tak for hjælpen.
Nu kan jeg få den til at indsætte informationerne.
Hvis du ligger et svar så du kan få dine points. :-)
Avatar billede Slettet bruger
13. oktober 2009 - 21:35 #5
Svar her, hvis det altså var mig du mente.
Avatar billede Slettet bruger
13. oktober 2009 - 21:36 #6
Hov, og en sidste ting, brug mysql_real_escape_string i stedet for mysql_escape_string. Den er sikrere.
Avatar billede sollie Nybegynder
14. oktober 2009 - 12:36 #7
Det skal jeg gøre.
Jeg fandt på nettet at den første nævnte bliver fjernet i en senere version af PHP.
Undskyld den lange vente tid.
Avatar billede Slettet bruger
14. oktober 2009 - 17:07 #8
Godt du fik det til at virke.
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