Autor Zpráva
Majk89
Profil
Dobrý den,

Na stránkách chci vytvořit formulář pro přidávání jmen, ale nějaká jména nebude možné přidat (v databázi mysql mám tabulku se zakázanými jmény a je zde nastavené utf8_general_ci ). A chci docílit toho, že když uživatel zadá jméno, které je v databázi mezi zákázanými jmény, tak se vypíše chyba. Ale níže uvedený kód mi vypíše chybu pouze pokud je jméno naprosto identické se zakázaným jménem v databázi, ale pokud uživatel vyplní místo "Matěj Novák" "matěj Novák" nebo "Matěj Novak", tak už se chyba nevypíše.
Část kódu:
$sql = mysql_query("SELECT * FROM tabulka");

while($r = mysql_fetch_array($sql))
{
$id = $r['id'];
$blokovanaJmena= $r['BlokovanaJmena'];
if($jmeno == "$blokovanaJmena")
{
      $backlink="stranka.php?chyba=4";
      header ("Location: $backlink");
}
}

A proto bych Vás chtěl poprosit o radu, jak docílit toho, že se nebude brát ohled na velikost písmen a diakritiku. Myslel jsem si, že to vyřeší pouze nastavení kódování u zakázaných jmen v databázi na utf8_general_ci, ale to nepomohlo.


Předem díky za odpověď.
Matěj.
Kajman_
Profil *
Majk89:
Myslel jsem si, že to vyřeší pouze nastavení kódování u zakázaných jmen v databázi na utf8_general_ci, ale to nepomohlo.

To by mělo pomoci. Ale to nastavené porovnání se uplatňuje při porovnávání na straně mysql, neovlivní porovnání v php podmínce.

$sql = mysql_query("SELECT * FROM tabulka where BlokovanaJmena='".mysql_real_escape_string($jmeno)."'");
Majk89
Profil
Kajman:
Díky za odpověd, ale i když použiji
$sql = mysql_query("SELECT * FROM tabulka where BlokovanaJmena='".mysql_real_escape_string($jmeno)."'");
, místo
$sql = mysql_query("SELECT * FROM tabulka");
tak script stále nefunguje jak má a vypíše chybu jen u identických slov.
Tori
Profil
Když použijete dotaz od Kajmana, tak už není potřeba procházet výsledky a porovnávat je podruhé (a nespolehlivě) v PHP. Stačí zjistit, jestli dotaz něco našel (mysql_num_rows).
Majk89
Profil
Tori:
Díky za naťuknutí, v příkazech pro MySQL se moc nevyznám, ale zkusím si tedy najít, jak použít v cyklu místo podmínky if dotaz (mysql_num_rows) a snad to rozchodím.
Tori
Profil
Majk89:
Cyklus na to vůbec nepotřebujete.
Majk89
Profil
Ještě jednou děkuji, už script funguje jak má. Pokud by někdo řešil stejný problém, dole přikládám výsledný funkční kód.
$sql = mysql_query("SELECT * FROM tabulka where BlokovanaJmena='".mysql_real_escape_string($jmeno)."'");

while($r = mysql_fetch_array($sql))
{
$id = $r['id'];
$nalezeny = mysql_num_rows($sql);
if($nalezeny != "0")
{
      $backlink="stranka.php?chyba=4";
      header ("Location: $backlink");
}
}
Majk89
Profil
Tori:
Aha, takže cyklus while klidně můžu vymazat, v tom řešení, které jsem napsal v kódu výše?
Kajman_
Profil *
$sql = mysql_query("SELECT * FROM tabulka where BlokovanaJmena='".mysql_real_escape_string($jmeno)."'");
if($r = mysql_fetch_array($sql))
{
      header ("Location: stranka.php?chyba=4");
      exit;
}
Majk89
Profil
Kajman:
Díky, také to funguje a je to elegantnější řešení, než to moje.

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