Autor Zpráva
ra100
Profil *
Zdravím všetkých.
Už neakú dobu bojujem z nasledujúcim riadkom -
$sql_upravdb = 'update lb set nazov = '.$_SESSION['nazov'].'  where nazov = '.$uni;

Následne je
$sql_upravdb
použití v
$objekt = mysqli_query($db_spojenie,$sql_upravdb);

Premenná
$_SESSION['nazov']
a
$uni
maju uložené dáta z formulára.
Tie prichádzajú a po vyvolaní cez
echo
sa zobrazujú.
Keď zmením
$sql_upravdb = 'update lb set nazov = '.$_SESSION['nazov'].'  where nazov = '.$uni;

za písané
$sql_upravdb = 'update lb set nazov =  "xyz" where nazov = "zyx";

tak tiež funguje bez problémov...
Nechapem, prečo riadok -
$sql_upravdb = 'update lb set nazov = '.$_SESSION['nazov'].'  where nazov = '.$uni;

vobec neodosiela premenné a teda vobec nefunguje.
Už som vyskúšal všetky možné kombinácie - ", ', ;, a roznych zátvoriek a úvodzoviek.
Ďakujem za rady.
Tori
Profil
'update lb set nazov =  "xyz" where nazov = "zyx";
Takže musí být i:
'update lb set nazov = "'.$_SESSION['nazov'].'" where nazov = "'.$uni.'"';
A samozřejmě mysql_real_escape_string, pokud některý řetězec přišel z formuláře, resp. intval pro čísla.
Jinak mysql_error() by vám v tom předchozím zápise bez uvozovek mělo napsat něco jako "Error: Unknown column name 'xyz' near 'xyz where nazov...'".
byla, ale jen o vteřinku :)
DarkMeni
Profil
Zkoušel jsi přidat chcípnutí a vypsání syntaxní chyby v sql?
Myslim to jako takto:
echo "Kontrola proměnných:<br />\n";
echo "Proměnná z SESSION: ".$_SESSION['nazov']."<br />\n";
echo "Proměnná uni: ".$uni."<br />\n";
//Upravený dotaz:
mysql_query("UPDATE `lb` SET `nazov`='".$_SESSION['nazov']."' WHERE `nazov` = '".$uni) or die("Chyba: ".mysql_error());
echo "<br />\nDotaz proběhl nejspíš úspěšně (Protože skript nechcípnul)";

Jsi si jistý že si to do $_SESSION ukládal? (Není to náhodou v $_POST?).
-> To samí se dá zapsat i do proměnné a pak to dát do dotazu z proměnné ale takle mi to připadá úspornější.
Nebo ti to píše nějaké chyby ze strany PHP?
-> Ou, koukám že Tori byl(a) rychlejší.
ra100
Profil *
Tori:
Ďakujem.
tvoj kod -
'update lb set nazov = "'.$_SESSION['nazov'].'" where nazov = "'.$uni.'"';
je správny.
Už všetko funguje, ako ma )
ra100
Profil *
Tori:
...ešte dodám,že som použil
mysql_real_escape_string
týmto sposobom, dúfam, že je to správne, ináč to funguje -
$sql_upravdb =  'update lb set nazov = "'.mysql_real_escape_string($_SESSION['nazov']).'" where nazov = "'.$uni.'"';

kde
$_SESSION['nazov']).
príde z formulára pomocou
$_post['nazov']
.
Dúfam teda, že je to ošetrené dobre.
Eśte raz ďakujem.
Joker
Profil
ra100:
dúfam, že je to správne
Ano, ale co ještě proměnná $uni?

edit: Escapované by mělo být všechno co přijde zvenku (od uživatele).
ra100
Profil *
DarkMeni:
..hej, zlá sintaxia mi hádzala chyby.
V každom prípade aj tvoj kód funguje, takže ďakujem za cennú radu.
ra100
Profil *
Joker:
Ano, ale co ještě proměnná $uni?

$uni
je odosielaný priamo zo stránky z url formou
$_GET['$uni']
kde používa názov z databázy.
napr -
echo '<a href="?uni='.$riadok['nazov'],'">'.$riadok['nazov'],'</a>';
.
..aj to mam escapovat ?
ra100
Profil *
ra100:
..dodam že
$uni
vzniká takto
$uni = $_GET['uni']
, dúfam teda, že to nieje neaka nerozvažna bezpečnostná chyba.
Tori
Profil
ra100:
Jak se něco objeví v prohlížeči, tak se to dá upravit, formulářová pole, JavaScript proměnné a URL nejsnadnějc. Věřila bych akorát tomu, co je buď napevno ve skriptu (konstanty), nebo jsem to zrovna teď vytáhla z DB. Je to sice trochu paranoia, ale těch pár znaků navíc je nízká cena za větší bezpečnost.
ra100
Profil *
Tori:
...súhlas .
pcmanik
Profil
ra100:
Ked pouzivas mysqli, je trocha cudne volat "obycajnu" mysql funkciu nemyslis? A naviac, ked uz vyuzivas mysqli a zjavne na to nemas dovod, tak si nastuduj prepared statements.
ra100
Profil *
..ďalšia otázka -
v
$uni
funguje
mysql_real_escape_string($_GET['uni']);
a v
$_SESSION['nazov']
funguje
mysql_real_escape_string
a aj
mysqli_real_escape_string
...Je v tom neaký zásadný rozdiel?
V skripte totiž používam napr
mysqli_connect
a
mysqli_query
ra100
Profil *
pcmanik:
yoyo, to ma neminie.
pcmanik
Profil
ra100:
Myslim ze rozdiel je len to i, ale ked uz mysqli, tak mysqli vsade nie? A SESSION osetrovat asi nemusis, pokial tam nevkladas nebezpecne data od uzivatela.
Tori
Profil
ra100:
Je v tom neaký zásadný rozdiel?
Tak se koukněte do manuálu: mysqli_ má jako první parametr identifikátor DB spojení, u mysql_ je jako druhý a nepovinný. Kromě toho, tahle funkce se může používat až po mysql(i)_connect, protože bere v úvahu znakovou sadu, která je nastavená pro komunikaci s databází - a to bez existujícího DB spojení nezjistí.
ra100
Profil *
ok..
ďakujem vám za cenné rady )

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:

0