Avatar billede Morten Nybegynder
11. december 2005 - 19:35 Der er 34 kommentarer og
1 løsning

Tegn fra DB giver problemer ved visning

I mit DB udtræk få jeg fejl da mine DB-data indeholder \" og \'

Jeg skal formentlig bruge noget preg_replace - men har ingen ide om hvordan det virker.?
Avatar billede jakobdo Ekspert
11. december 2005 - 19:39 #1
Prøv: mysql_real_escape_string()

$sql = mysql_real_escape_string($dinGamleSQL);
mysql_query($sql);
Avatar billede Morten Nybegynder
11. december 2005 - 19:42 #2
jeg bruger MSSQL - ???
Avatar billede jakobdo Ekspert
11. december 2005 - 19:44 #3
Ahh, sorry, så hopper jeg fra igen!
Avatar billede johan.o Nybegynder
11. december 2005 - 20:54 #4
Kunne addslashes() hjælpe...?

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 21:02 #5
Øhhhhhh, måske men hvordan - du får lige lidt kode:

$data .= "<td class=\"list".$j."\" align=\"left\" onMouseover=\"ddrivetip('".$text."', '#ECE9D8', 200)\"; onMouseout=\"hideddrivetip()\">

$text er altså problemet da den både kan indeholde " og ' ???
Avatar billede johan.o Nybegynder
11. december 2005 - 21:10 #6
Okay, så hvis jeg forstår dig korrekt så ligger den korrekte tekst allerede i databasen og så løber du ind i problemer når du prøver at vise indholdet i ovenstående linje.

Prøv dette :

$data.="<td class='list".$j."' align='left' onMouseover=\"ddrivetip('".addslashes($text)."', '#ECE9D8', 200);\" onMouseout='hideddrivetip()'>";

Har ændret lidt på et par småting...

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 21:15 #7
Ja - du har ændret min dobbelt q til enkelt og det er da også smart for så slipper man for at \ dem - men er det ikke mere korrekt at bruge \" end ' ????????

Jeg prøver lige addslashes..
Avatar billede Morten Nybegynder
11. december 2005 - 21:18 #8
Det virker ikke - her er resultat fra Microsoft Script Editor:

<td class="list1" align="right" onMouseover="ddrivetip('Econoroll "beslag"','#ECE9D8', 200)"; onMouseout="hideddrivetip()">
Avatar billede johan.o Nybegynder
11. december 2005 - 21:26 #9
Nej,jeg tænkte det nok da jeg sad og kiggede på det jeg havde lavet :)

Ang. brug af ' og " mere korrekt kan man vel ikke sige...nemmere syntes jeg er et bedre ord :)

Jeg kigger lige lidt mere på det

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 21:28 #10
Okay - tak, synes bare jeg har set flere sige at det programmeringsmæssigt var mere korrekt - så jeg gør det så'n... ;O)

Ser frem til at få det til at virke... ;O) Kigger også selv videre...
Avatar billede johan.o Nybegynder
11. december 2005 - 21:38 #11
Prøv denne istedet :

$data.="<td class='list".$j."' align='left' onMouseover=\"ddrivetip('".htmlspecialchars($text, ENT_QUOTES)."', '#ECE9D8', 200);\" onMouseout='hideddrivetip()'>";

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 21:45 #12
Ja det hjalp men gave et nyt problem - følgende text brokker sig nu:

DEV's

Kan vi håndetere den?
Avatar billede johan.o Nybegynder
11. december 2005 - 21:47 #13
Aner det ikke :) hvad er det ?

Mvh. Johan
Avatar billede johan.o Nybegynder
11. december 2005 - 21:48 #14
Ah, du mener hvis der står "DEV's" eller ?
Avatar billede Morten Nybegynder
11. december 2005 - 21:48 #15
Undskyld - men når $text = DEV's så får jeg en script fejl ... altså nu er problemet '
Avatar billede Morten Nybegynder
11. december 2005 - 21:49 #16
MS Script Editor:

<td class="list1" align="left" onMouseover="ddrivetip('2 SPRING BREAK DEV&#039;s', '#ECE9D8', 200)";    onMouseout="hideddrivetip()">
Avatar billede johan.o Nybegynder
11. december 2005 - 21:52 #17
Hm, du får en script fejl siger du, så må du hellere vise scriptet.

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:01 #18
Ja men jeg får jo kun fejlen når data fra databasen indeholder ' eller "

Så jeg skal bare af med dem eller escape dem...
Avatar billede Morten Nybegynder
11. december 2005 - 22:07 #19
Okay - med denne kan jeg fjerne dem og så er der ingen problemer men burde det ikke kunne lade sig gøre at escape dem - escaper man ikke i javascript med \ ??

$text = str_replace("\"","",$text);
$text = str_replace("'","",$text);
Avatar billede johan.o Nybegynder
11. december 2005 - 22:08 #20
Nå okay, jeg troede ikke bare du kunne fjerne dem så brug denne :

$text=str_replace("'", "", $text);
$text=str_replace("\"", "", $text);

eller

$text=preg_replace("/[\"\']/", "", $text);

Så er de ikke eksisterende i $text.

Mvh. Johan
Avatar billede johan.o Nybegynder
11. december 2005 - 22:09 #21
He he...ja netop sådan..
Avatar billede Morten Nybegynder
11. december 2005 - 22:12 #22
Men nu er jeg lige besværlig (sætter gerne point op) men de findes jo rent faktisk i DB så jeg ville jo gerne kunne vise dem - men hvordan?
Avatar billede johan.o Nybegynder
11. december 2005 - 22:12 #23
Aha, nu ser jeg den lille fejl.

; efter din onmouseover skal være imellem " og " ikke efter.
Avatar billede johan.o Nybegynder
11. december 2005 - 22:13 #24
I ref: 11/12-2005 21:38:46 kan du se jeg har flyttet den ind imellem " og ", men du har ikke rettet det i den linje du bruger.

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:16 #25
Kan du ikke lige skrive det hele rigtigt - så jeg ikke fedter rundt i det ... ;O)
Avatar billede johan.o Nybegynder
11. december 2005 - 22:18 #26
Dette burde gøre det :

$data.="<td class='list".$j."' align='left' onMouseover=\"ddrivetip('".htmlspecialchars($text, ENT_QUOTES)."', '#ECE9D8', 200);\" onMouseout='hideddrivetip()'>";

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:21 #27
</td><td class='list1' align='left' onMouseover="ddrivetip('2 SPRING BREAK DEV&#039;s', '#ECE9D8', 200);" onMouseout='hideddrivetip()'>

Den vil stadig ikke på dem med enkelt quot (DEV's) - men dobbelt quots klare ovenstående fint
Avatar billede johan.o Nybegynder
11. december 2005 - 22:24 #28
Nej, det er muligt men det er ikke her din fejl er så, da ovenstående er helt iorden html, så jeg tror at fejlen er i din javascript funktion ddrivetip() så lad os se den.

Mvh.Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:26 #29
Okay:

<div id="dhtmltooltip"></div>

<script type="text/javascript">

/***********************************************
* Cool DHTML tooltip script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

var offsetxpoint=-60 //Customize x offset of tooltip
var offsetypoint=20 //Customize y offset of tooltip
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thecolor, thewidth){
if (ns6||ie){
if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
tipobj.innerHTML=thetext
enabletip=true
return false
}
}

function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.x+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.y+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
else if (curX<leftedge)
tipobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight)
tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
else
tipobj.style.top=curY+offsetypoint+"px"
tipobj.style.visibility="visible"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor=''
tipobj.style.width=''
}
}

document.onmousemove=positiontip

</script>
Avatar billede johan.o Nybegynder
11. december 2005 - 22:32 #30
Arh, det spiller ikke lige for mig nu, du har ret der er noget råddent i funktionskaldet....think mode enabled :)

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:33 #31
;O) Jamen jeg venter gerne....!
Avatar billede johan.o Nybegynder
11. december 2005 - 22:40 #32
Okay, prøv denne :

$data.="<td class='list".$j."' align='left' onMouseover=\"ddrivetip('".htmlspecialchars(addslashes($text), ENT_QUOTES)."', '#ECE9D8', 200);\" onMouseout='hideddrivetip()'>";

Mvh. Johan
Avatar billede Morten Nybegynder
11. december 2005 - 22:46 #33
Tusind tak for hjælpen, det sidste forslag spiller 110% !!!!!!!!!!!!!!!!!!!!!

Smider du et svar...
Avatar billede johan.o Nybegynder
11. december 2005 - 22:48 #34
Puha, det var godt :) værsgo.
Avatar billede johan.o Nybegynder
11. december 2005 - 22:54 #35
Tak 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