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 ?
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.
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
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
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?
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.
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.