Autor Zpráva
Anonymní
Profil *
Zdravim, jak spravne napsat funkci pro escapovani promenne pri editaci do databaze?

$dotaz = "UPDATE text SET nazev='$nazev';
- tohle je klasicky

$dotaz = "UPDATE text SET nazev='preved($nazev)';
- takto nejak bych to potreboval

Dekuji
perun
Profil
$dotaz = "UPDATE text SET nazev='".mysql_real_escape_string($nazev)."'";
Anonymní
Profil *
Ale ja bych chtel zavolat tuto funkci

function preved($value,$connection) {
                if (get_magic_quotes_gpc() == 0) {
                    return mysqli_real_escape_string($connection,$value);
                }
                return $value;
}
Anonymní
Profil *
Nekde jsem videl tento zapis ukladani do databaze

$sql = "INSERT INTO `text`(`nazev`) VALUES (\"" . dbPut($nazev,$connection) . "\");


Co znamenaji ty lomitka na zacatku a konci?
Nox
Profil
stejně jako píše perun, jen vyměníš název funkce

v podstatě ale bereš ten problém špatně, protože ty nepíšeš jakoby funkci do update, ale ty prostě potřebuješ vložit do nějakého řetězce výsledek nějaké funkce,
což provedeš tak, že vezmeš levou část řetězce, dát operátor spojení (konkatenace) "." potom volání funkce potom zase "." a dál zbytek řetězce

------
ty umožňují přesněji specifikovat rozsah identifikátoru a odlišit ho... pokud budeš používat tyhle uvozovky (levý alt+96), tak můžeš mít třeba i mezeru v názvu sloupce/tabulky nebo mít název sloupce shodný s nějakým rezervovaným slovem:

insert into text neco (....
=> mysql najde "text", vezme ho jako název tabulky (která třeba ani není) a pak najde nějaké "neco" co nebude vědět co je a vyhodí chybu
insert into `text neco` (....
=> správně identifikuje celé "text neco" jako název tabulky
insert into insert
=> pod "insert" mysql chápe příkaz vložení, takže když ho dáš na místo tabulky, tak vyhodí chybu

každopádně spíš doporučuji normální název tabulky / sloupce a minimálně to nebudeš muset psát
Anonymní
Profil *
Takze tohle reseni vkladani do tabulky mam v poradku:

function preved($value,$connection) {
                if (get_magic_quotes_gpc() == 0) {
                    return mysqli_real_escape_string($connection,$value);
                }
                return $value;
}

$datum = preved(date("d.m.Y"),$connection);
$nadpis = preved($_POST['nadpis'],$connection);

$dotaz = "INSERT INTO `tabulka`(`datum`, `nadpis`) VALUES ('".$datum."','".$nadpis."')";
Nox
Profil
mělo by to bý dobře ... v tomto konkrétním případě tam ` psát nemusíš (ikdyž můžeš, nic nezkazíš, osobně se mi ale nechce :) )

když by to nefungovalo, tak předělej mysql_query("..."); na mysql_query("...") or echo mysql_error(); nebo místo echo dát die/exit

(zajímavé ... mysqli verze má převrácené argumenty...)

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: