Pozdrav, čuo sam od prijatelja da na ovom forumu postoji par ljudi koji rade programiranje u php-u... ;D
Naime imam jedan problem:
Pravio sam neku pretragu u php-u, pretražuje se samo mysql baza. Problem je u tome što recimo u bazi je upisano: Holodoc, a korisnik unese da traži: holodoc. Rezultat je nema pronađenih stvari.
Ja sam u cilju rešenja problema napravio jedan konvertor, takav da šta god ste uneli vrši pretvaranje u velika slova:
npr uneli ste: markogm izlaz je MARKOGM, ustvari pošto konvertor pretvara i u ćirilicu izlaz je: МАРКОГМ
Mislio sam da ono što korisnik unese pretvorim u velika slova i uporedim sa nekim poljem iz baze čiji je sadržaj pretvoren u velika slova, međutim ne znam kako da napišem upit koji će primenom ove moje finkcije da pretvori sadržaj nekog polja iz baze u velika slova.
Ovo je moj upit koji mi odrađuje posao, dok se sve lepo kuca.
SELECT arhiva.*, list.* FROM list LEFT JOIN arhiva ON list.InvertarniBroj = arhiva.arhivaid WHERE arhiva.VrstaGradje LIKE '%9%' AND arhiva.Autor LIKE '%МАКСО%'
arhiva.Autor je polje u bazi čiji sadržaj treba konvertovati u velika slova.
Pozdrav
Nisam siguran da li sam te dobro razumeo, ali mislim da problem mozes da resis pomocu f-je UPPER(string). Pogledaj na: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_upper (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_upper)
Pozz :)
Pa zar smo toliko postali popularni :D
Elem da ne dužim mnogo...
"Eeeeeevooo rešeeeeenja" (Copyright by Radovan III)
Ajde prvo kod pa kasnije objašnjenje :)
<?php
//podešavanje internog enkodinga PHP-a
mb_internal_encoding("utf-8");
//podešavanje enkodinga za headere (ponekad treba zbog formi)
mb_http_output("utf-8");
//termin koji se pretražuje, poslat GET ili POST formom
$q = $_REQUEST['q'];
//ovde ide eventualno kod koji pretvara latinicu u ćirilicu inače se očekuje ćirilica kao ulaz
$konekcija = mysql_connect("localhost",KORISNIK, LOZINKA);
//ovo je obavezna stavka jer inače ne možemo da kontrolišemo kakve sve konverzije mogu da se dese u toku upita
mysql_query("set names utf8", $konekcija) or die(mysql_error());
//i kolacija i kolacija....
mysql_query("set collation_connection=utf8_unicode_ci", $konekcija) or die(mysql_error());
//biramo bazu
mysql_select_db("arhiva");
$sql = "SELECT arhiva.*, list.*
FROM list LEFT JOIN arhiva ON list.InvertarniBroj = arhiva.arhivaid
WHERE arhiva.VrstaGradje LIKE '%9%' AND arhiva.Autor LIKE '%МАКСО%' AND UCASE(Autor) LIKE '%".mb_strtoupper($q)."%'";
$rezultat = mysql_query($sql, $konekcija) or die(mysql_error());;
if(mysql_num_rows($rezultat)){
echo "Rezultati pretrage:<br />";
while($zapis = mysql_fetch_assoc($rezultat)){
echo "{$zapis['id']}\t {$zapis['Autor']}<br />";
}
} else
die("Žao nam je ali traženi autor ne postoji u bazi podataka!");
?>
Par bitnih stavki objašnjenih kroz kod :)
Ko prvo ova dva reda
mb_internal_encoding("utf-8");
mb_http_output("utf-8");
na početku su jako bitna kad radiš sa karakterima koji ne spadaju u engleski alfabet. Sa njima podešavaš koji enkoding će se koristiti za mb_ funkcije. Ovde mislim pre svega na mb_strtoupper bez koga bi dobio neki krš od karaketra u SQL stringu.
Sledeće dve linije se brinu o tome da komunikacija sa bazom uvek bude vođena preko utf8 karakter seta da se ne bi očitavalo đubre usled neusaglašenih enkodinga mysql servera i php-a.
mysql_query("set names utf8", $konekcija) or die(mysql_error());
mysql_query("set collation_connection=utf8_unicode_ci", $konekcija) or die(mysql_error());
Kako radi SQL izraz. Pored svega onoga što si ti naveo u svom upitu još je na kraju dodat uslov
UCASE(Autor) LIKE '%".mb_strtoupper($q)."%'
Cela stvar je u tome da se iz svih rezultata u bazi sada prikazuju samo oni zapisi koji kada se prebace komplet u velika slova sadrže string koji se pretražuje.
Usput... Nisi radio bilo šta sa podacima kod čitanja iz baze tako da sada možeš bez problema da ih koristiš za ispis ;)
@markogm
E ne verujem :) Ceo dan stoji ovaj post i opet odgovorim odmah posle tebe :P
Sta ces, hajduk sam pravi. Kadar stici, uteci i na strasnom mestu postojati 8)
Hvala čim budem testirao ovo javljam dal sam ga naterao da radi...
Zaboravih da završim ovu temu.
Hvala @holodoc i @marko_gm, ovo @holodoc - ovo rešenje mi odradjuje posao.
Pozdrav
Citat: maxogm 30.04.2008, 13:14
Zaboravih da završim ovu temu.
Hvala @holodoc i @marko_gm, ovo @holodoc - ovo rešenje mi odradjuje posao.
Pozdrav
Nema problema :friends: Oko honorara ćemo se već dogovoriti <:-P
Necete da me prevarite, koliki je moj deo? <:-P <:-P <:-P