Nefunkcny kod na vkladanie dat do databazy

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

som si precital http://www.secit.sk/sk/content/sql-injection to sa dalo
a este na blackhole, ale tam som tomu moc nerozumel, pokial ide o formulare, kde sa zapisuju udaje do databazy,
momentalne mam problem ako zamedzit vlozeniu duplicitnych udajov napr. meno, heslo
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

jednoducho..
1) SELECTneš si hodnoty, jestli už tam nejsou
2) dáš unikátní klíče na sloupce v tabulce MySQL
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

Jednoducho??? :lol: To sa Ti povie, ked to vies, ale ako to ma presne vyzerat?
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

už jsem napsal nástřel..
neznám tvůj kod ani databázi tak nemůžu napsat přesně jak by to mohlo být ;)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

tu je kod:
<?php
$meno = $_POST['meno'];
$ulica = $_POST['ulica'];
$cislo = $_POST['cislo'];
$mesto = $_POST['mesto'];
$psc = $_POST['psc'];
$mail = $_POST['mail'];
$www = $_POST['www'];
$mobil = $_POST['mobil'];
$login = $_POST['login'];
$password = $_POST['password'];

$sql="INSERT INTO owners(meno, ulica, cislo, mesto, psc, mail, www, mobil, login, password) VALUES('$meno', '$ulica', '$cislo', '$mesto', '$psc', '$mail', '$www', '$mobil', '$login', '$password')";

$meno=MySQL_Real_Escape_String($meno);
$ulica=MySQL_Real_Escape_String($ulica);
$cislo=MySQL_Real_Escape_String($cislo);
$mesto=MySQL_Real_Escape_String($mesto);
$psc=MySQL_Real_Escape_String($psc);
$mail=MySQL_Real_Escape_String($mail);
$www=MySQL_Real_Escape_String($www);
$mobil=MySQL_Real_Escape_String($mobil);
$login=MySQL_Real_Escape_String($login);
$password=MySQL_Real_Escape_String($password);
$query=MySQL_Query($sql);

if($sql){
echo "Registrácia prebehla v poriadku. Teraz sa môžete <a href=\"../prihlasit.php\">prihlásiť</a><br>";
} else {
echo "Údaje sa nepodarilo vložit! Prosim skuste znova pozorne vyplnit formulra.<br><br>";
echo "MySQL chyba:<span style='color:red'>".MySQL_Error()."</span><br>";
echo "SQL dotaz:<b>".htmlSpecialChars($sql)."</b><br>";
}

mysql_close();
?>
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

eh?
to escapování proměnných až po odeslání do databáze je jaksi k ničemu :D
IF($sql) vždycky projde, musíš tam kontrolovat proměnnou $result

pošli ještě kde máš unikátní klíče v DB
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

Prečo?????? "to escapování proměnných až po odeslání do databáze je jaksi k ničemu"
Robil som to podla Teba.
A tato cast kodu ma vyzerat takto?

Kód: Vybrat vše

if($result){
echo "Registrácia prebehla v poriadku. Teraz sa môžete <a href=\"../prihlasit.php\">prihlásiť</a><br>";
} else {
echo "Údaje sa nepodarilo vložit! Prosim skuste znova pozorne vyplnit formulra.<br><br>";
echo "MySQL chyba:<span style='color:red'>".MySQL_Error()."</span><br>";
echo "SQL dotaz:<b>".htmlSpecialChars($sql)."</b><br>";
}


Žiadne kľúče tam nemam.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

podle mě? já ti posílám ukázky kodu, nepíšu ti, že to máš dát přes odeslání do databáze, to je snad jasné :D

jojo je to dobře

hoď unikátní indexy na jméno a prostě na všechno co chceš mít jedinečné ;)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

Toto som nepochopil "nepíšu ti, že to máš dát přes odeslání do databáze, to je snad jasné"
a kam to teda mam dat?
Pridal som si tie kluce na prihlasovacie udaje meno a heslo. Chybu mi vypisuje takto:
"Údaje sa nepodarilo vložit! Prosim skuste znova pozorne vyplnit formular.
Duplicate entry 'jako' for key 2" - Problem je v tom, ze by som to potreboval mat v slovencine,
a vypisalo mi konkretne len jeden aj ked som dal dva rovnake udaje a navyse mi priratavalo
ID aj ked udaje do tabulky neboli vlozene.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

chybu duplicate to hodí nečekaně při duplikaci..
na heslo nedávej unikát, to je blbost
jméno je celý jméno nebo jen první jméno?

escapování proměnných dej samozřejmě před vložení do db
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
fili
Level 1.5
Level 1.5
Příspěvky: 102
Registrován: 29 pro 2011 14:51

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od fili »

"chybu duplicate to hodí nečekaně při duplikaci.." - Ano to som chcel, ale cakane, aby som separoval ucty uzivatelov.
Len by som chcel, aby mi to nevypisovalo v AJ, ale v slovencine - Vami zadane meno uz pouziva iny uzivatel, prosim zvolte si ine.
S tym "if($result)" to vobec nefunguje, funguje to s "if($sql)"
A to escapovanie mam mat tu, alebo tesne pred $sql="INSERT INTO..." ?

<?php
$meno=MySQL_Real_Escape_String($meno);
$ulica=MySQL_Real_Escape_String($ulica);
$cislo=MySQL_Real_Escape_String($cislo);
$mesto=MySQL_Real_Escape_String($mesto);
$psc=MySQL_Real_Escape_String($psc);
$mail=MySQL_Real_Escape_String($mail);
$www=MySQL_Real_Escape_String($www);
$mobil=MySQL_Real_Escape_String($mobil);
$login=MySQL_Real_Escape_String($login);
$password=MySQL_Real_Escape_String($password);

$meno = $_POST['meno'];
$ulica = $_POST['ulica'];
$cislo = $_POST['cislo'];
$mesto = $_POST['mesto'];
$psc = $_POST['psc'];
$mail = $_POST['mail'];
$www = $_POST['www'];
$mobil = $_POST['mobil'];
$login = $_POST['login'];
$password = $_POST['password'];


$sql="INSERT INTO owners(meno, ulica, cislo, mesto, psc, mail, www, mobil, login, password) VALUES('$meno', '$ulica', '$cislo', '$mesto', '$psc', '$mail', '$www', '$mobil', '$login', '$password')";
$query=MySQL_Query($sql);

if($sql){
echo "Registrácia prebehla v poriadku. Teraz sa môžete <a href=\"../prihlasenie.php\">prihlásiť</a><br>";
} else {
echo "Údaje sa nepodarilo vložit! Prosim skuste znova pozorne vyplnit formular.<br><br>";
echo "<span style='color:red'>".MySQL_Error()."</span><br>";

}

mysql_close();
?>
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Nefunkcny kod na vkladanie dat do databazy

Příspěvek od CZechBoY »

s tebou to asi nepude jinak než ty kody měnit sám :(

PHP píše:<?php
$meno = $_POST['meno'];
$ulica = $_POST['ulica'];
$cislo = $_POST['cislo'];
$mesto = $_POST['mesto'];
$psc = $_POST['psc'];
$mail = $_POST['mail'];
$www = $_POST['www'];
$mobil = $_POST['mobil'];
$login = $_POST['login'];
$password = $_POST['password'];

$meno=MySQL_Real_Escape_String($meno);
$ulica=MySQL_Real_Escape_String($ulica);
$cislo=MySQL_Real_Escape_String($cislo);
$mesto=MySQL_Real_Escape_String($mesto);
$psc=MySQL_Real_Escape_String($psc);
$mail=MySQL_Real_Escape_String($mail);
$www=MySQL_Real_Escape_String($www);
$mobil=MySQL_Real_Escape_String($mobil);
$login=MySQL_Real_Escape_String($login);
$password=MySQL_Real_Escape_String($password);


$sql="INSERT INTO owners(meno, ulica, cislo, mesto, psc, mail, www, mobil, login, password) VALUES('$meno', '$ulica', '$cislo', '$mesto', '$psc', '$mail', '$www', '$mobil', '$login', '$password')";
$query=MySQL_Query($sql);

if($query){
echo "Registrácia prebehla v poriadku. Teraz sa môžete <a href=\"../prihlasenie.php\">prihlásiť</a><br>";
}
elseif(mysql_errno()==1062){
echo "Uživatelské jméno ".htmlentities(StripSlashes($meno))." je již používáno, zvolte prosím jiné<br>".mysql_error();
}
else {
echo "Údaje sa nepodarilo vložit! Prosim skuste znova pozorne vyplnit formular.<br><br>";
echo "<span style='color:red'>".MySQL_Error()."</span><br>";
}

mysql_close();
?>
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Odpovědět

Zpět na „Programování a tvorba webu“