Avatar billede dcheng Novice
31. januar 2004 - 03:20 Der er 7 kommentarer og
1 løsning

mediumtext problemer med \ og "

Hej jeg er helt ny i PHP så hvis forklar venligst sådan jeg kan forstå det..

Jeg har en MySQL database samt en hjemmeside hvor der findes en database over nogle ting... de ting bliver opdatere et par gang og det kan jeg også godt men jeg har et felt "beskrivelse" som gemmer sig i "mediumtext" i mysql databasen jeg har så det problem at for hvergang jeg gemmer så sker der det at alle de steder i min "beskrivele" hvor der er ' eller " de bliver alle til dette:

\" og \'

og jo flere gange jeg gemmer jo flere kommer der af \\\

Er det en del af MySQL eller en del af mit script? Jeg er ikke skriveren til scriptet så ved det ikke, men hvis det er scriptet hvad skal jeg så kigge efter..
Avatar billede Slettet bruger
31. januar 2004 - 03:50 #1
Jeg vil tro, at det skyldes, at scriptet laver addslashes på noget tekst, som PHP allerede automatisk har lavet addslashes på.
Avatar billede martin1000ben Nybegynder
31. januar 2004 - 12:51 #2
og hvis der bliver brugt addslashes - skal der også bruges stripslashes - (http://dk2.php.net/stripslashes)
Avatar billede dcheng Novice
31. januar 2004 - 13:11 #3
Detail PHP:
---start---
$Template->Define_File('body', 'movie_detail.tpl');

$Template->Assign(array(

'MOVIE_DISC'=> isset($Movie->movie_discription) ? $Movie->movie_discription : '',));

echo $Template->Parse_File('body');
---slut---

Funktioner PHP
---start---
function Create_DB_Var($Variable)
{
  return ((!isset($Variable)) or ($Variable == '')) ? 'NULL' : '"' . addslashes($Variable) . '"';
}
---slut---

Jeg fandt de her ting som vigtige ting for at kunne fixe det.
Kan jeg gøre sådan at den kun tilføjer en \ hvis der ikke er en der i forvejen? Altså så der altid kun vil komme en i databasen der er jo ingen grund til at fylde min DB op med \... Hvis jeg kan det hvordan få jeg så echo'et ud sådan at jeg ikke får den ene \
Avatar billede martin1000ben Nybegynder
31. januar 2004 - 13:27 #4
Jeg _MENER_ at mysql har en addslashes funktion som gør det automatisk (og selv piller slashes væk når det bliver trukket ud af databasen)

Men ellers så prøv at fjerne addslashes($Variable) så det bliver således:

return ((!isset($Variable)) or ($Variable == '')) ? 'NULL' : '"' . $Variable . '"';
Avatar billede Slettet bruger
31. januar 2004 - 14:44 #5
Lav en funktion således:

function minslash($tekst){
  if (!get_magic_quotes_gpc()) {
    return addslashes($tekst);
  } else {
    return $tekst;
  }
}

og lav alle steder, hvor der står addslashes( om til minslash(

Så vil koden virke uanset om PHP er sat til automatisk at lave addslashes eller ej.
Avatar billede Slettet bruger
31. januar 2004 - 14:46 #6
Hvis du bare fjerner addslashes, som martin1000ben foreslår, så vil du være sårbar overfor injection attacks, hvis du flytter koden over på en server, hvor PHP ikke laver addslashes automatisk.
Avatar billede dcheng Novice
31. januar 2004 - 15:31 #7
return ((!isset($Variable)) or ($Variable == '')) ? 'NULL' : '"' . $Variable . '"';

Virkede fint i mit tilfælde

Tak skal i have!

Det er rart med nogle eksperter :D
Avatar billede Slettet bruger
31. januar 2004 - 15:54 #8
Læste du, hvad jeg skrev? Jeg håber for dig, at det ikke kommer til at skulle bruges på en server opsat uden automatisk addslashes.

Jeg vil anbefale dig følgende artikel: http://www.eksperten.dk/artikler/59

Artiklen er godt nok skrevet udfra ASP og en Access-database, men den grundlæggende ide, er nøjagtig lige så gyldig uanset om man bruger PHP og MySQL eller en hvilkensomhelst anden kombination af sprog/database.
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