Php-mysql, cudan problem

neka osnovna pretraga po parametru domain, sa nekim recima izbaci rezultat, sa drugima ne.
isti query, koji dobijem putem php-a kad zadam direktno u mysql daje trazene rezultate.

... $search = $_POST['search']; ... if (isset($search)) { $where = "where domain like '%$search%'"; } ... $query = "select * from domains $where order by domain;"; $rezultat = mysql_query($query); $row = mysql_fetch_array($rezultat); ... while($row=mysql_fetch_array($rezultat)) { ... echo "<td><a href='http://{$row['domain']}'>{$row['domain']}</a></td>" ... }
any ideas ?

Mozes li reci sa kojim rijecima radi a sa kojima ne? Primjer buga?

BTW ovdje imaš sigurnosni propust jer ulaz forme ubacuješ direktno u SQL upit bez escapinga.
http://www.php.net/mysql_real_escape_string
Osim toga ja bih stavio $where=""; na početak koda za svaki slučaj, da se ne bi kasnije pitao odakle neki bug.

[quote=Bo]neka osnovna pretraga po parametru domain, sa nekim recima izbaci rezultat, sa drugima ne.
isti query, koji dobijem putem php-a kad zadam direktno u mysql daje trazene rezultate.

... $search = $_POST['search']; ... if (isset($search)) { $where = "where domain like '%$search%'"; } ... $query = "select * from domains $where order by domain;"; $rezultat = mysql_query($query); $row = mysql_fetch_array($rezultat); ... while($row=mysql_fetch_array($rezultat)) { ... echo "<td><a href='http://{$row['domain']}'>{$row['domain']}</a></td>" ... }
any ideas ?[/quote]
ne kontam zasto imas dva puta mysql_fetch_array() funkciju:

$row = mysql_fetch_array($rezultat); ... while($row=mysql_fetch_array($rezultat)) {
drugo, isprintaj na ekranu $query pa vidi imal sta sumnjivo.

trece, za ovakve pretrage (osima ako nisu stvarno male i rijetke) najbolje da koristis full text search (pod uslovom da koristis MyISAM a ne InnoDB)

cetvrto, preporucujem da pod error_reporting u php.ini koristis E_ALL. E_NOTICE su dosadne ali korisne. navika koju steknes ce ti mislim dobro doci u php6
o cemu govorim?
za
$search = $_POST[‘search’];
ces dobiti notice “index “search” is not defined”… ili tako nekako
treba:
if (isset($_POST[‘search’]))
{
$seach = $_POST[‘search’];
}
else
{
$search = ‘’;
}

ili jednostavnije:
$search = isset($_POST[‘search’]) ? $_POST[‘search’] : “”;

u svakom slucaju ispisi $query na ekran a svaki primjer - moraces skontati nesto.

javi ako i dalje ne dira.

Afan je dao odgovor zašto nekada radi upit, a drugi put ne. Ako imaš samo jedan rezultat, ovaj prvi fetch ga “pojede” prije petlje :slight_smile:

S drugim savjetom se ne bih složio, naravno da treba koristiti InnoDB, a full text search je totalni overkill i nije predviđen za ovako jednostavne slučajeve (jedna kolona, sumnjam da ikada ima više od 30-tak znakova).

[quote=adis]Afan je dao odgovor zašto nekada radi upit, a drugi put ne. Ako imaš samo jedan rezultat, ovaj prvi fetch ga “pojede” prije petlje :slight_smile:

S drugim savjetom se ne bih složio, naravno da treba koristiti InnoDB, a full text search je totalni overkill i nije predviđen za ovako jednostavne slučajeve (jedna kolona, sumnjam da ikada ima više od 30-tak znakova).[/quote]
MyISAM ili InnoDB? SuSE ili Ubuntu? Linux ili Windows?
:smiley:

ja ne znam sa koliko rekorda se ovdje barata i koliki su rekordi. ako ima 10-tak hiljada rekorda sa opisima nekog filma, mislim da onda pretrazivanje sa LIKE nije bas najbolje rjesenje. sta vise mnogo toga moras uraditi sa php-jem (limitiranje trazene rijec na najmanje 3 karaktera, rijec pocinje, je dio ili zavrsava sa trazenom rijeci, pretrazivanje po “exact frase”,…)
full text search je puuuno brze i kvalitetnije.

no, opet, i to je do navike i licnih stavova.

ok, ispravicu sutra taj dio code-a,

primjer greske :

kucam epn, izbaci mi izmedju ostalog eddie.epn.ba, kucam eddie ne izbaci nista, echo-ujem string svaki put, i uvijek prodje kad ga unesem direct u mysql.

Mozes li nam dati full kod (bez ovih …) ?

if (isset($_POST['search'])) { $search = $_POST['search']; $where = "where domain like '%$search%'"; }
sa ovom ispravkom radi, tnx allot