Autor Zpráva
flux
Profil *
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
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
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 *
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 *
Co jsem se chtěl ještě zeptat, jde ještě nějak jinak vypisovat data z DB kromě while?
mimochodec
Profil
While z dataáze nic nevypisuje. O data si říká funkce mysql_query nebo mysqli_query.
Taps
Profil
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>';
}

?>
V případě, že klič je pouze numerická hodnota, tak se místo funkce real_escape_string použije funkce intval
<?
$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
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ě.

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