Autor Zpráva
Senky
Profil
Zdravím.
Mám menší problém s ošetrením textu, pretože 3 funkcie mi ničili text, a ďalšie už nepoznám, tak by som sa chcel poradiť.
Skúšal som pred zápisom do databázy tieto funkcie:
stripslashes
mysql_real_escape_string
htmlentities

Avšak každá urobila s textom niečo nežiadané, napríklad skazila diakritiku alebo odobrala časti textu.
Pozná niekto aj nejaké iné funkcie na ošetrenie textu pred vstupom do databázy, ktorá ale nechá text textom?
Ďakujem...
Nox
Profil
mysql_real_escape_string ... jsem si celkem jistý, že ty chyby jsou způsobené něčím jiným
Senky
Profil
Neviem prečo, ale keď použijem iba funkciu mysql_real_escape_string, neuloží mi to vôbec do databázy...
Joker
Profil
Senky
Jak vypadá výsledný (už zpracovaný-připravený) SQL dotaz, který se posílá do databáze?
Senky
Profil
mysql_query("INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."',".time().")") or die(mysql_error());

No a celé to vyzerá takto:
// pripojenie k databáze
$user = mysql_real_escape_string($user);
$note1= mysql_real_escape_string($note1);
$note2= mysql_real_escape_string($note2);
$note3= mysql_real_escape_string($note3);
$note4= mysql_real_escape_string($note4);
mysql_query("INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."',".time().")") or die(mysql_error());
Joker
Profil
Senky
No a jak vypadá už sestavený dotaz?

Udělejte to takhle:
$sql = "INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."',".time().")";
mysql_query($sql) or die(mysql_error());

...a nechte si vypsat $sql

Jinak obecně se mi osvědčilo si SQL dotaz sestavit do nějaké meziproměnné... právě proto, že v případě chyby si jde nechat dotaz vypsat.
Joker
Profil
Poznámka: Hodnota time() nejspíš nemá být v uvozovkách.
Senky
Profil
Nie, v tom chyba nie je. Ak to zamením za
sql = "INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."','time()')";

tak je to o tom istom
A ak tam úvodzovky nedám:
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 '))' at line 1
Nox
Profil
Joker
Nezáleží to na tom, jestli je to php nebo mysql funkce? doposud tam měl php a v tom případě to měl dobře

Senky
Máš tam apostrofy kolem timu místo uvozovek...a pokud to má být MySQL funkce time, tak asi naopak tam neměj ani jedno

Nepouštěj ten dotaz, ale napiš nám, co se uloží do té proměnné sql,... echo $sql..
TomášK
Profil
Joker psal, že hodnota funkce má být v uvozovkách, nikoliv samotná funkce - myslel to imho takto:
sql = "INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."','".time()."')";

přes mysql funkci by to mohlo jít
sql = "INSERT INTO notes VALUES ('','".$user."','".$note1."','".$note2."','".$note3."','".$note4."', NOW())";

nebo možná ještě lépe nadefinovat pro ten sloupec DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP a pak ho vynechat při vkládání,
aby se vyplnil automaticky.
Senky
Profil
No jasné, už to mám. Ďakujem Nox. Problém bol v tom, že som najprv vykonal mysql_real_escape_string a až potom sa pripojil k databáze. Ďakujem ešte raz...
Nox
Profil
TomášK
psal "hodnota time() nejspíš nemá", tak bych řekl že nemá :) (a ať tím myslel apostrof nebo uvozovky tak nevim proč to řekl když Senky to tak beztak neměl :) )

především MySQL konvertuje bez problémů řetězce na čísla (select '5'+'3'), takže nezáleží na tom moc...leda pokud je třeba uživatelský vstup, tak pokud tam bude zadán řetězec, tak dotaz skončí chybou (bez apost.) a ne jen warningem, což pak už asi záleží na kontextu co je lepší, ale možná že i to první...takže imho pro čísla bez a pro řetězce s

Senky
No, nakonec si to vyřešil sám ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: