| 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: 11 let
|
|||
0