Autor | Zpráva | ||
---|---|---|---|
flux Profil * |
#1 · Zasláno: 12. 9. 2015, 21:34:38
Zdravím, chtěl bych někoho z vás poprosit mám tenhle generátor náhodných znaků :D Vygenerove čísla budu porovnávat v údajích v DB.
chtěl bych se zeptat že když se bude $data['klic'] == $key tak aby se tenhle klíč přeskočil a zapsal se klíč nově vygenerovaný. Tj. nesměl by se vygenerovat klíč který už v DB je. Číste teoreticky vim jak bych to mohl udělat ale nevim jak to mam zakomponovat do tý funkce :D function klic($d) { $znak = "123456789"; $vstp = ""; $pocet = strlen($znak); for ($i=0;$i<$d;$i++) { $vstp .= $znak[mt_rand(0,$pocet - 1)]; } return $vstp; } $key = klic(25); |
||
lionel messi Profil |
#2 · Zasláno: 12. 9. 2015, 21:50:11
flux:
Po skončení cyklu zadáš do db dotaz SELECT * FROM tabulka WHERE klic = $vstp a potom podmienkou overíš, či kľúč už existuje:
$sql = "SELECT * FROM tabulka WHERE klic = $vstp"; $query = mysqli_query($link, $query); //prípadne zodpovedajúca mysql_* funkcia či akákoľvek iná db knižnica if (mysqli_num_rows($query)) { //identický kľúč existuje v db } else { //všetko je v poriadku } |
||
Alphard Profil |
#3 · Zasláno: 12. 9. 2015, 21:59:09
Doplním, že pro tuto úlohu se hodí jinak mezi začátečníky nepřílíš známý
do while .
do { $key = generate(); } while (existsInDb($key)) |
||
flux Profil * |
#4 · Zasláno: 12. 9. 2015, 21:59:12
K čemu tam je proměnná $link?
|
||
lionel messi Profil |
flux:
„K čemu tam je proměnná $link?“ Je to povinný parameter funkcie mysqli_query (odkaz na spojenie k db), nechcel som použiť zastaralé MySQL, inak samozrejme takto: $query = mysql_query($query); //prípadne zodpovedajúca mysql_* funkcia či akákoľvek iná db knižnica if (mysql_num_rows($query)) { //kolízia } else { //ok } |
||
flux Profil * |
#6 · Zasláno: 12. 9. 2015, 22:09:11
Co jsem se chtěl ještě zeptat, jde ještě nějak jinak vypisovat data z DB kromě while?
|
||
mimochodec Profil |
#7 · Zasláno: 12. 9. 2015, 22:41:33
While z dataáze nic nevypisuje. O data si říká funkce mysql_query nebo mysqli_query.
|
||
Taps Profil |
#8 · Zasláno: 13. 9. 2015, 10:33:18 · Upravil/a: Moderátor (editace znemožněna) 13. 9. 2015, 16:16:45
flux:
„Co jsem se chtěl ještě zeptat, jde ještě nějak jinak vypisovat data z DB kromě while?“ Samotný while neslouží pro výpis dat, tak jak již zmínil mimochodec. Níže uvádím ukázku toho jak provést výpis dat pomocí funkce fetch_assoc. <? $vstp = 'můj klíč'; $result = $mysqli->query("SELECT * FROM tabulka WHERE klic = '".$mysqli->real_escape_string($vstp)."'"); while($row = $result->fetch_assoc()){ echo $row['id'].'<br>'; } ?> <? $result = $mysqli->query("SELECT * FROM tabulka WHERE klic = ".intval($vstp)); ?> Moderátor Alphard: Doplnil jsem do kódu zapomenuté apostrofy, ať tady nezůstávají příklady, které se tváří jako zabezpečené, ale zabezpečené nejsou.
|
||
juriad Profil |
#9 · Zasláno: 13. 9. 2015, 11:54:55
Taps:
Pokud je klic textové povahy (varchar, char, date, datetime, time), pak má být hodnota v $vstp uvedena v uvozovkách či apostrofech. Pokud je to číslo, je metoda real_escape_string použita nevhodně.
|
||
Časová prodleva: 9 let
|
0