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 * |
#2 · Zasláno: 10. 11. 2011, 16:01:28
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 |
#3 · Zasláno: 10. 11. 2011, 18:41:05
Kajman:
Díky za odpověd, ale i když použiji $sql = mysql_query("SELECT * FROM tabulka where BlokovanaJmena='".mysql_real_escape_string($jmeno)."'"); $sql = mysql_query("SELECT * FROM tabulka"); |
||
Tori Profil |
#4 · Zasláno: 10. 11. 2011, 18:49:19
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 |
#5 · Zasláno: 10. 11. 2011, 18:55:01
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 |
#6 · Zasláno: 10. 11. 2011, 19:02:37
Majk89:
Cyklus na to vůbec nepotřebujete. |
||
Majk89 Profil |
#7 · Zasláno: 10. 11. 2011, 19:02:43
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 |
#8 · Zasláno: 10. 11. 2011, 19:04:27
Tori:
Aha, takže cyklus while klidně můžu vymazat, v tom řešení, které jsem napsal v kódu výše? |
||
Kajman_ Profil * |
#9 · Zasláno: 10. 11. 2011, 19:27:37
$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 |
#10 · Zasláno: 10. 11. 2011, 19:53:21
Kajman:
Díky, také to funguje a je to elegantnější řešení, než to moje. |
||
Časová prodleva: 14 let
|
0