Autor | Zpráva | ||
---|---|---|---|
Verona Profil * |
#1 · Zasláno: 5. 11. 2017, 12:27:40
Ahoj,
mám napsanou funkci, před kterou volám connection : $jmeno_db = ""; $heslo_db = ""; $server_db = ""; $spojeni_db = mysqli_connect($server_db, $jmeno_db, $heslo_db); header ("Content-Type: text/html; charset=UTF-8"); function sqlInj($hodnota) { $hodnota=strip_tags($hodnota); $hodnota=str_replace("'", "'", $hodnota); //nahrada jednoduchych uvozovek za zkratku $hodnota=str_replace('"', """, $hodnota); //nahrada dvojtych uvozovek za zkratku $hodnota=addslashes($hodnota); //prida zpetna lomitka pred dvojte uvozovky $hodnota=mysqli_real_escape_string($spojeni_db, $hodnota); //escapuje speciální znaky řetězce unescaped_string, s ohledem na kódování spojení, a to tak, že výsledek můžete bezpečně použít v SQL příkazu s funkci mysql_query() return $hodnota; } $login=sqlInj($_POST['login']); /* nick zadaný ve formuláři pro přihlašování */ Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\wamp64\www\papi\config\fce.inc.php Vím co chyba znamená ale není mi jasné proč tam je, když do funkce mysqli_real_escape_string() předávám jak spojení, tak řetězec? Děkuji za vysvětlení |
||
T-fon Profil |
#2 · Zasláno: 5. 11. 2017, 12:47:53
Ta funkce proměnnou $spojeni_db nevidí.
|
||
Verona Profil * |
Jak to že jí nevidí, když jí před voláním funkce incuduji?
A když funkci zapíši starším zápisem tak to hodí tyty chyby: function sqlInj($hodnota) { $hodnota=strip_tags($hodnota); $hodnota=str_replace("'", "'", $hodnota); //nahrada jednoduchych uvozovek za zkratku $hodnota=str_replace('"', """, $hodnota); //nahrada dvojtych uvozovek za zkratku $hodnota=addslashes($hodnota); //prida zpetna lomitka pred dvojte uvozovky $hodnota=mysql_real_escape_string($hodnota); //escapuje speciální znaky řetězce unescaped_string, s ohledem na kódování spojení, a to tak, že výsledek můžete bezpečně použít v SQL příkazu s funkci mysql_query() return $hodnota; } Warning: mysql_real_escape_string(): Access denied for user ''@'localhost' (using password: NO) Warning: mysql_real_escape_string(): A link to the server could not be established |
||
T-fon Profil |
#4 · Zasláno: 5. 11. 2017, 14:05:08
Musíte tu proměnnou předat:
$login=sqlInj($spojeni_db, $_POST['login']); function sqlInj($spojeni, $hodnota) { ... $hodnota=mysqli_real_escape_string($spojeni, $hodnota); |
||
Tomášeek Profil |
Verona:
Základ PHP a viditelnost proměnných. Vnější proměnné nejsou vidět uvnitř funkce, pokud jí nejsou předány parametrem a naopak, proměnné z vnitřku funkce nejsou viditelné okolnímu kódu. Upozorním, že všechny úpravy před uložením do databáze jsou zbytečné a výrazně doporučuji je neprovádět - vyjma právě escape_string . Ukládej je včetně HTML, nikdy nevíš, kdy ho budeš později potřebovat (pokud to jsou třeba nějaké komentáře, můžeš v budoucnu dohledat, kdo se snažil propašovat HTML a jaké, zda škodlivé, spamové, jakékoliv). strip_tags a eventuálně htmlspecialchars (místo náhrady uvozovek za entity a addslashes) použij až při výpisu.
|
||
WordpressKokos Profil |
#6 · Zasláno: 5. 11. 2017, 22:06:46
Tomášeek Zajímavý názor
|
||
Verona Profil * |
Děkuji všem za rady a když mám funkci ve funkci, kde mám již upravenou tu první funkci sqlInj, která samostatně funguje, myslela jsem že bude fungovat i zde, ale není tomu tak, a je opět chyba:
Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in Musím tedy to spojení rovněž přidat do té nadřazené funkce? function ident($ident, $db, $stid) { $ident=sqlInj($spojeni_db, $ident); $prevodni_tabulka = Array( 'ä'=>'a', 'Ä'=>'A', --- -- -- Aha tak vidím že ano, zkusila jsem toto a funguje, je to správně: function ident($spojeni, $ident, $db, $stid) { $ident=sqlInj($spojeni, $ident); $prevodni_tabulka = Array( |
||
M4n Profil * |
#8 · Zasláno: 7. 11. 2017, 22:11:46
Doporučil bych ti (včas) opustit globální funkce a přejít rovnou k objektům, protože to, oč se tady snažíš zanořováním funkcí, řeší právě objekty.
|
||
Časová prodleva: 6 let
|
0