Avatar billede jammerlab Nybegynder
18. november 2003 - 18:51 Der er 8 kommentarer og
1 løsning

Mysql INSERT

har denne query:

mysql_query("insert into botling_stats (nick,ident,tid,text) values ('$nick','$ident','$tid','$raw')")or die (mysql_error());

Det er en PHP bot til IRC jeg kører... men når folk bruger diverse tegn så crasher den.

You have an error in your SQL syntax.  Check the manual that corresponds to your
MySQL server version for the right syntax to use near ''ikke* :\')' at line 1

det var fordi en skrev: ikke* :\

Jeg vil gerne vide en metode så jeg er sikker på ingen besked what so ever can få MySQL query'en til at fucke. Jeg skal naturlig vis kunne hente beskeden ud af mysql'en igen så den ligner sig selv :)

Har brugt $raw = htmlentities($raw); men det er åbenbart ikke nok.
Avatar billede sn0wflake Nybegynder
18. november 2003 - 18:54 #1
Min egen hackede udgave i PHP er:

return str_replace("& ","&amp; ",str_replace("&amp;","&",str_replace("&quot;","\"",str_replace("&gt;",">",str_replace("&lt;","<",htmlentities($strTEMP))))));
Avatar billede jammerlab Nybegynder
18. november 2003 - 18:55 #2
Såvidt jeg husker så er det det htmlentities($raw); gør :)
Avatar billede sn0wflake Nybegynder
18. november 2003 - 18:56 #3
...pointen er at jeg har erstattet omkodet de tegn der generede mig <:)
Avatar billede jammerlab Nybegynder
18. november 2003 - 19:08 #4
Ja I know... men jeg regnede bare med at htmlentities sådan set fjernede de fleste af de tegn og lavede dem om... istedet for jeg skal lave en str_replace på alle de tegne der nu er :/
Avatar billede sn0wflake Nybegynder
18. november 2003 - 19:15 #5
Man er nødsaget til at tweake htmlentities lidt :) Men der er en dybere mening med det hele - zzzzuuuuuuuunnnnnggggg
Avatar billede jammerlab Nybegynder
18. november 2003 - 19:20 #6
Er der ikke en string som bare fjerne alle mulige skod tegn ? :)
Avatar billede jammerlab Nybegynder
18. november 2003 - 19:21 #7
htmlspecialchars
'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'
Avatar billede sukos Juniormester
19. november 2003 - 01:01 #8
Jeg bruger:

Til input i DB:

function toData($var){
return "'" . addslashes($var) . "'";
}

mysql_query("insert into botling_stats (nick,ident,tid,text) values (". toData($nick) .",". toData($ident) .",". toData($tid) .",". toData($raw) .")")or die (mysql_error());

og ved output til browser:

function toHtml($var){
return htmlentities(stripslashes($var));
}


f.eks. $vis = mysql_fetch_array($sql);
echo toHtml($vis["nick"]) ." ". toHtml($vis["text"]);
Avatar billede jammerlab Nybegynder
19. november 2003 - 12:58 #9
Hov glemte at lukke jeg brugte sn0wflake's forslag simpelthen at bruge str_replace på alle de tegn der nu skulle fjernes...
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