Stránka 1 z 1

Jak na nerozlišování písmen PHP a MySQL (vyřešeno)  Vyřešeno

Napsal: 17 úno 2007 17:45
od Jaaan
Ahoj, potřeboval byhc poradit jak mohu zařídit při vypisování dat z DB přes PHP, aby pokud si nechám vypsat záznam v DB podle určitého slova např. fotbal, tak aby se z DB vypsalo vše co se jmenuje fotbal, ale i Fotbal s velkým F. Prostě jak docílit toho, aby nebylo rozlišováno zadané slovo z formuláře na velká a malá písmena. Díky za všechny nápady a rady.

Napsal: 18 úno 2007 00:44
od Jaaan
To opravdu nikdo neví jak na to????

Napsal: 18 úno 2007 19:28
od Luboš
Příklad:
Proměnná s hledaným textem je např. $vstup, proměnná s právě nalezeným textem je např. $nasel.
Pak můžeš psát:

if (strtoupper($nasel) == strtoupper($vstup))
{
// sem napíšeš příkazy pro možnost, že texty se shodují
}

Princip je převedení obou řetězců, třzn. zadaného i hledaného, na velká písmena (můžeš pochopitelně třeba na malá - funkce strtolower() ). Tím dostaneš to, co jsi zadal v úvodu.

Napsal: 22 úno 2007 23:21
od Jaaan
No tak jsem tu tvou radu prozkoumal, ale to bohužel nevyřeší tu situaci, kterou jsem popisoval. Tou tvojí radou mám zadanou proměnnou změnit na všechna velká písme a vyhledanou také a pak porovnat. To by bylo super. Jenomže zadanou proměnnou, když změním na velká písmena, tak v databázi text např. pouze s prvním velkým písmenem a tudíž mi to nic nenalezne a tak ani nemohu nalezenou proměnnou změnit také na velká písmena a porovnat. Tím jsem opět tam, kde jsem byl. Potřebuji, aby hledanou proměnnou, kterou někdo zadá do formuláře např. malými písmeny fotbal, tak aby našel v databázi i slovo, které není v databázi zadáno malými písmeny, ale je třeba s prvním písmenem velkým Fotbal. Prostě bych potřeboval nějakou radu jak vyhledat zadanou proměnnou ve formuláři v databázi bez rozlišování velkých a malých písmen. I přesto, že v databázi je slovo s prvním písmenem velkým a někdo ho zadá se všemi malými, tak aby mi to toto slovo nalezlo v databázi a mohl jsem ho použít dále. Předem díky za všechny další rady. Opravdu si s tím nemohu nějak poradit.

Napsal: 23 úno 2007 07:31
od Luboš
Mám dojem, že jsi tuto funkci nepochopil. Příklad:

- V databázi máš v hledané položce uloženou např. hodnotu Jaaan
- Do hledacího pole zadáš, že potřebuješ vyhledat hodnotu jaaan
- Výše uvedená funkce načte obě (!) hodnoty do paměti, obě změní na velká písmena a porovná, takže vlastně dojde k porovnání hodnot JAAAN a JAAAN. V tomto případě ti vypíše shodu. Původní hodnoty v zadávacím poli i v databázi se přitom samozřejmě nemění. Toto je princip všech vyhledávačů, takže nechápu, proč zrovna tobě to nefunguje. Napadá mě ještě jeden doplněk: před porovnáním odstraň z hodnoty položky vedoucí a koncové mezery a až poté proveď to porovnání (můžeš to samozřejmě uvést přímo do toho vzorce, co jsem ti poslal).
- Tuto funkci používám ve všech svých programech (a že jich je) a můžu ti potvrdit, že opravdu funguje.

Napsal: 24 úno 2007 23:05
od Jaaan
Nevím, ale asi jsem tedy natvrdlej. Píšeš, že funkce načte obě hodnoty i tu zadanou co potřebuji vyhledat a i tu, která je v databázi. Což však nechápu a nejde mi to, jelikož zadanou hodnotu načte, ale hodnotu, kterou hledá v databázi nenačte žádnou, protože hledá hodnotu zadanou jaaan, ale já mám v databázi Jaaan. Takže změnu hodnoty zadané jaaan na velká písmena provést může, ale tu co je v databázi změnit nemůže, protože jí ani nenajde. Je tam Jaaan. To je ten můj problém. Tak jí ani neporovná. Není nějaký příkaz pro to, aby nerozlišoval při hledání velká a malá písmena? Myslím něco jako když potřebuji nastavit kódování @mysql_query ("SET NAMES CP1250");.

Napsal: 25 úno 2007 09:02
od Luboš
Mám dojem, že tuto funkci skutečně nechápeš, i když jsem ti psal, že původní hodnota v databázi se samozřejmě nemění! Uděláš nejlépe, když sem hodíš část skriptu, pomocí kterého ten výběr provádíš. Možná tam máš chybu. Podívám se na to.

Napsal: 25 úno 2007 10:59
od Jaaan
Tak tady posílám část skriptu :
Na stránce index.php mám tento formulář :
<FORM method="post" action="najdi.php">
<font color="#000000" size="2">Vyhledávání</font><br>
<input type="text" name="slovo" size="14">
<input type=submit value="Hledej">
</form>
Ta jde na stránku najdi.php :
Header("Location: index.php?page=vyhledej&nalezeno=$slovo");
Ta jde na stránku vyhledej.php :
@mysql_Connect($computer, $user, $password) or die("Nepodařilo se připojit k databázi.");
@mysql_query ("SET NAMES CP1250");
@$vysledek = mysql($baze, "SELECT * FROM $tabulka where nazev LIKE '%$nalezeno%' ORDER BY datum DESC");
if(!$vysledek) die("Chyba");
A pak už pouze zpracuje nalezená data a vypíše je na stránku.

Mrkni na to prosím a napiš mi kam bych měl dát ten tvůj skript nebo kde dělám chybu, abych s tím mohl nějak pohnout. Nějak to pořád nechápu. Díky.

Napsal: 25 úno 2007 11:45
od Luboš
Já bych v scriptu index.php ponechal:

<FORM method="post" action="najdi.php">
<font color="#000000" size="2">Vyhledávání</font><br>
<input type="text" name="slovo" size="14">
<input type=submit value="Hledej">
</form>


script najdi.php bych odstranil a v vyhledej.php bych dal:

$slovo = strtoupper($slovo);

a pak následující řádek bych upravil takto:

@$vysledek = mysql($baze, "SELECT * FROM $tabulka where nazev LIKE UPPER('%$nalezeno%') ORDER BY datum DESC");

Napsal: 25 úno 2007 20:29
od Jaaan
Tak jsem to otestoval, ale nefunguje to. Odstanil jsem najdi.php. To však znamená, že si asi myslel i odstranit najdi.php i z formuláře a teď nevím co si zamýšlel zam tedy dát. Pokud vyhledej.php, tak to jsem zkusil, jenomže tím sice $slovo může změnit na velká písmena, ale ve vyhledej.php je proměnná v databázi, kterou má hledat $nalezeno, což nikde není definováno. Pokud bych tam tedy měl dát $slovo, tak to jsem zkoušel, ale bohužel to nic nenalezlo. Také jsem zkoušel do formuláře dát vyhledej.php?nalezeno=$slovo, aby tedy byly definovány obě proměnné a provedl to dle tvých rad, ale také to nic nenalezlo. Já myslím, že když mu zadám ve výpisu z databáze, aby hledal slovo převedené na všechna písmena velká, tak proto nic nenajde, jelikož v databázi mám data s první písmenem velkým a ostatní malá. Tak teď tedy opravdu nevím jak na to. Prosím mrknul bys na to ještě jednou a upravil to tedy dle tvého, aby to chodilo?Díky

Napsal: 26 úno 2007 10:53
od Luboš
Jaaan píše:... tak proto nic nenajde, jelikož v databázi mám data s první písmenem velkým a ostatní malá....


To se mi snad jenom zdá!!! Vždyť ti už poněkolikáté vysvětluji, že výše uvedený postup změní všechna písmenka obou proměnných v paměti a pak je porovná. Když chcš vyhledat slovo jAaaN ve všech kombinacích malých a velkých písmen a v databázi máš Jaaan, a použiješ výše uvedený postup, tak se ti v paměti provede porovnání JAAAN (ze zadané hodnoty jAaaN) a JAAAN (z uložené hodnoty Jaaan) a výsledkem je shoda nalezených řetězců. Co je na tom proboha nepochopitelného?!

A k těm scriptům: popisoval jsem ti pouze způsob zadání a vyhledání hledaného textu, konkrétní úpravy vazby proměnných mezi scripty si provedeš sám (myslel jsem si to aspoň). Pokud v PHP začínáš a nejsou ti jasné vazby v předávání parametrů mezi scripty, tak to řekni (napiš) a pak ti pošlu můj návrh obou scriptů. Jináč se z tohoto kruhu asi nedostaneme.

Vyřešeno

Napsal: 10 bře 2007 17:09
od Jaaan
Díky už je to ok.