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

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Jaaan » 17 úno 2007 17:45

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.
Naposledy upravil(a) Jaaan dne 10 bře 2007 17:10, celkem upraveno 1 x.

Reklama
Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod Jaaan » 18 úno 2007 00:44

To opravdu nikdo neví jak na to????

Luboš
Tvůrce článků
Level 5
Level 5
Příspěvky: 2038
Registrován: květen 05
Pohlaví: Muž
Stav:
Offline

Příspěvekod Luboš » 18 úno 2007 19:28

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.
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod Jaaan » 22 úno 2007 23:21

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.

Luboš
Tvůrce článků
Level 5
Level 5
Příspěvky: 2038
Registrován: květen 05
Pohlaví: Muž
Stav:
Offline

Příspěvekod Luboš » 23 úno 2007 07:31

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.
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod Jaaan » 24 úno 2007 23:05

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");.

Luboš
Tvůrce článků
Level 5
Level 5
Příspěvky: 2038
Registrován: květen 05
Pohlaví: Muž
Stav:
Offline

Příspěvekod Luboš » 25 úno 2007 09:02

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.
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod Jaaan » 25 úno 2007 10:59

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.

Luboš
Tvůrce článků
Level 5
Level 5
Příspěvky: 2038
Registrován: květen 05
Pohlaví: Muž
Stav:
Offline

Příspěvekod Luboš » 25 úno 2007 11:45

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");
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod Jaaan » 25 úno 2007 20:29

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

Luboš
Tvůrce článků
Level 5
Level 5
Příspěvky: 2038
Registrován: květen 05
Pohlaví: Muž
Stav:
Offline

Příspěvekod Luboš » 26 úno 2007 10:53

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.
Potřebujete jinou pomoc při řešení problému ve Windows 10? Stáhněte si soubor Win10-finty.

Jaaan
Level 1
Level 1
Příspěvky: 92
Registrován: leden 06
Pohlaví: Nespecifikováno
Stav:
Offline

Vyřešeno

Příspěvekod Jaaan » 10 bře 2007 17:09

Díky už je to ok.


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti