Avatar billede supernewbie Nybegynder
15. juni 2003 - 15:48 Der er 23 kommentarer og
1 løsning

Hvad er fejlen i denne replace

Her er koden:

<? session_start();
include("inc/tjek_login.php");

$result = mysql_query("SELECT * FROM cs_users WHERE(navn='$navn') ORDER BY id DESC") or die(mysql_error());
        $row = mysql_fetch_array($result) or die(mysql_error());

if (strlen(trim($answer)) < 1) {
    print "Du kan ikke poste tomme svar...";
} else {


$indlag = $row[indlag] + 1;

mysql_query("UPDATE cs_users set indlag = '$indlag' WHERE(navn='$navn')");

$dato = date("dmYHis");

$str = $answer;

$str = str_replace("&", "&amp;", $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    $str = str_replace("  ", "&nbsp; ", $str);
    $str = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $str);
    $str = str_replace("\r", "", $str);
    $str = str_replace("\n", "<br>", $str);
    $str = str_Replace(":)","<img src='smiley/icon_smile.gif'>",$str);
    $str = str_Replace(":D","<img src='smiley/icon_smile_big.gif'>",$str);
    $str = str_Replace("8D","<img src='smiley/icon_smile_cool.gif'>",$str);
    $str = str_Replace(":I","<img src='smiley/icon_smile_blush.gif'>",$str);
    $str = str_Replace(":P","<img src='smiley\icon_smile_tongue.gif'>",$str);
    $str = str_Replace("}:)","<img src='smiley/icon_smile_evil.gif'>",$str);
    $str = str_Replace(";)","<img src='smiley/icon_smile_wink.gif'>",$str);
    $str = str_Replace("B)","<img src='smiley/icon_smile_blackeye.gif'>",$str);
    $str = str_Replace(":o)","<img src='smiley/icon_smile_clown.gif'>",$str);
    $str = str_Replace("8","<img src='smiley/icon_smile_8ball.gif'>",$str);
    $str = str_Replace(":(","<img src='smiley/icon_smile_sad.gif'>",$str);
    $str = str_Replace("8)","<img src='smiley/icon_smile_shy.gif'>",$str);
    $str = str_Replace(":O","<img src='smiley/icon_smile_shock.gif'>",$str);
    $str = str_Replace(":(!","<img src='smiley/icon_smile_angry.gif'>",$str);
    $str = str_Replace("xx(","<img src='smiley/icon_smile_dead.gif'>",$str);
    $str = str_Replace("|)","<img src='smiley/icon_smile_sleepy.gif'>",$str);
    $str = str_Replace(":X","<img src='smiley/icon_smile_kisses.gif'>",$str);
    $str = str_Replace("^","<img src='smiley/icon_smile_approve.gif'>",$str);
    $str = str_Replace(":X","<img src='smiley/icon_smile_dissapprove.gif'>",$str);
    $str = str_Replace("?","<img src='smiley/icon_smile_question.gif'>",$str);
   
$pattern = '/(\[b\])((.|\n)*?)(\[\/b\])/';
    $pattern2 = '/(\[i\])((.|\n)*?)(\[\/i\])/';
    $replace = '<b>\\2</b>';
    $replace2 = '<i>\\2</i>';
    $str = preg_replace($pattern, $replace, $str);
    $str = preg_replace($pattern2, $replace2, $str);
    $str = str_replace("","",$str);
    $str = str_replace("
","",$str);
    $str = str_replace("","",$str);
    $str = str_replace("
","",$str);



mysql_query("INSERT INTO cs_forum_answer (answer,topic,dato,user) VALUES('$str','$id','$dato','$row[id]')") or die(mysql_error());


echo "$row[navn]";



echo "<p> $str";

} ?>


Her er fejlen:

You have an error in your SQL syntax near 'smiley/icon_smile.gif'>','3','15062003155110','1')' at line 1
Avatar billede myplacedk Nybegynder
15. juni 2003 - 15:51 #1
addslashes...
Avatar billede supernewbie Nybegynder
15. juni 2003 - 15:52 #2
Ret det lige for mig ?
Avatar billede fangel Nybegynder
15. juni 2003 - 15:52 #3
meget simpelt:

fordi din variabel er omkrenset af 'er, samme teng som der bruges i <img> tagene...

derfor, ændre ' i <img> til \" eller indsæt en

$str = addslashes($str); før det kommer i databasen, og en stripslashes($str); når de skal vises igen

Morten
Avatar billede myplacedk Nybegynder
15. juni 2003 - 15:53 #4
...er) VALUES('".addslashes($str)."','$id','$d...
Avatar billede myplacedk Nybegynder
15. juni 2003 - 15:54 #5
Nej, ikke stripslashes... Den skal man slet ikke bruge til andet end nødsituationer.
Avatar billede supernewbie Nybegynder
15. juni 2003 - 15:54 #6
mysql_query("INSERT INTO cs_forum_answer (answer,topic,dato,user) VALUES('".addslashes($str)."','$id','$dato','$row[id]')") or die(mysql_error());

sådan ?
Avatar billede supernewbie Nybegynder
15. juni 2003 - 15:55 #7
Tak det virker..

Vil du lige forklare hvad det gør ??
Avatar billede fangel Nybegynder
15. juni 2003 - 15:57 #8
tilføjer en \ (ignorer næste tegn) foran alle tegn der kunne være skadelige (' og ")

myplacedk => jo, lad os sige du skriver "jeg har det ik' så godt" og laver addslashes() på den, så når du udskriver den igen får du "jeg har det ik\' så godt"
jo ikke det den skulle ;)

Morten;
Avatar billede schaefner Juniormester
15. juni 2003 - 15:57 #9
Du kan også vente med at bruge din replace til når du skal udskrive teksten.
Avatar billede myplacedk Nybegynder
15. juni 2003 - 15:58 #10
Hvis SQL'en fx. ser sådan her ud:
...er) VALUES('<img src='/img.png' alt=''>','$id','$d...
Så har serveren god grund til at blive forvirret. Det er ikke til at se hvor noget starter eller slutter, og når der bare skal være sådan et tegn.

Med addslashes bliver det til:
...er) VALUES('<img src=\'/img.png\' alt=\'\'>','$id','$d...

Backslash betyder her: Det næste tegn plejer at betyde noget speciel, men her skal tegnet bare bruges som det er.
Avatar billede schaefner Juniormester
15. juni 2003 - 15:58 #11
Iøvrigt fylder :) også mindre i databasen end <img src='smiley/icon_smile.gif'>
Avatar billede supernewbie Nybegynder
15. juni 2003 - 15:59 #12
dea_pg
Avatar billede myplacedk Nybegynder
15. juni 2003 - 15:59 #13
dea_pg > Hvis det er nødvendigt at køre stripslashes på noget du har hentet fra databasen, så er der noget galt!
Jeg gider ikke diskutere det endnu engang, det står mange steder på eksperten, usenet, det står i manualerne...
Avatar billede supernewbie Nybegynder
15. juni 2003 - 16:00 #14
schaefner -> hvis der er 20 svar på et forum spg. og alle bruger en del smillies er ddet langsomt at skulle replace alle sammen.. :)
Self. kan man lave manks. 5 svar per side og sådanne..
Avatar billede schaefner Juniormester
15. juni 2003 - 16:04 #15
supernewbie >> Tror nu nok det vil være hurtigere end at gemme en masse html i databasen.
Avatar billede fangel Nybegynder
15. juni 2003 - 16:07 #16
myplacedk => jeg havde en kode hvor det blev nødvendigt, men da du ikke gidder diskutere det, gidder jeg heller ik'...

Morten
Avatar billede supernewbie Nybegynder
15. juni 2003 - 16:07 #17
tjaaa måske :D
Avatar billede myplacedk Nybegynder
15. juni 2003 - 16:13 #18
dea_pg > Så er der fejl i koden, eller den passer ikke til serverens opsætning.
Avatar billede fangel Nybegynder
15. juni 2003 - 16:21 #19
(heller ikke min server, så det kan godt ske... forband'ede web'oteller)
Avatar billede myplacedk Nybegynder
15. juni 2003 - 16:28 #20
Forband'ede php-'odere der ikke kan lave koden så det kan køre på den server det bliver skrevet til...
Avatar billede myplacedk Nybegynder
15. juni 2003 - 16:28 #21
;-)
Avatar billede fangel Nybegynder
15. juni 2003 - 16:30 #22
såså, jeg laver faktisk meget pæn kode... min egen server står fx til register_globals = off, af samme grund ;)

Morten
Avatar billede myplacedk Nybegynder
16. juni 2003 - 09:13 #23
dea_pg >
Nu har jeg skrevet en artikel om stripslashes() jeg (og andre) kan henvise til, når stripslashes() bliver brugt, når den ikke skal. :)

Du må meget gerne læse den igennem og sige til, hvis der noget du synes der burde ændres:
http://myplace.dk/articles/stripslashes/
Avatar billede fangel Nybegynder
16. juni 2003 - 12:46 #24
OK, du har nok ret, det er nok serveren så om sat ordentligt op, får scriptet virker fint på min egen server uden stripslashes!

Morten
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