Autor Zpráva
Brouzdalek
Profil
Vytvořil jsem script, který vyhledává požadované záznamy z databáze MySQL. Problém ovšem nastane, když zadám hledat např. "5g", apod. - zkrátka nějakou kombinaci čísel a písmen. Poté je hlášena chyba:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in......

Správně by se mělo zadat pouze číslo od 1 do 30. Ale pokud vytvořím podmínku "if" s rozmezím, tak to stejně stále hlásí stejnou chybu. Myslím, že problém je v příkazu MySQL_Fetch_Array, který nezíská žádný výsledek dotazu (popř. v nesprávném formátu). Poradí mi někdo, jak ošetřit tuto chybu ?

Předem všem děkuji !!


<?
if ($hledat !="" && $hledat !=0) {
echo "<table border="0" align="center" cellpadding="5px">";
echo "<tr height="50px">
<td id="zahlavi" width="40px">ID</td>
<td id="zahlavi" width="160px">Příjmení</td>
<td id="zahlavi" width="150px">Jméno</td>
<td id="zahlavi" width="75px">Test 1<br />20.3.2007</td>
<td id="zahlavi" width="75px">Test 2<br />27.3.2007</td>
</tr> ";
$spojeni = mysql_connect ("localhost", "root", "root");
$databaze = MySQL_select_DB ("test");
mysql_query("SET NAMES 'cp1250';"); // kódování MySQL !! - nebo 'latin2' nebo 'utf8'
$vyber = "SELECT * FROM studenti WHERE ID LIKE $hledat";
$provedeni = MySQL_Query($vyber);
$radek = MySQL_Fetch_Array($provedeni);
$pocet = MySQL_Num_Rows($provedeni);
echo "<tr height="30px">
<td id="ID">".$radek["ID"]."</td>
<td id="prijmeni">".$radek["prijmeni"]."</td>
<td id="jmeno">".$radek["jmeno"]."</td>
<td id="test1">".$radek["zn1"]."</td>
<td id="test2">".$radek["zn2"]."</td>
</tr> ";
echo "</table>";
if ($pocet ==0)
echo "<div id="dole">Nebyl vybrán žádný záznam z databáze !</div>";
elseif ($pocet ==1)
echo "<div id="dole">Byl vybrán <b>1</b> záznam z databáze !</div>";
elseif ($pocet >1)
echo "<div id="dole">Bylo vybráno <b>$pocet</b> záznamů z databáze !</div>";
}
else {
echo "<div id="bottom">Byla zadána špatná kritéria !</div>";
}
?>
bukaj
Profil
chyba je v dotazu na databázi u toho like by měly být %:
...

$vyber = "SELECT * FROM studenti WHERE ID LIKE %$hledat%";
...
DJ Miky
Profil
$provedeni = MySQL_Query($vyber);

nahraď za:

if($provedeni = MySQL_Query($vyber)) {
// zbytek kódu, mysql_fetch_array atd.
}
DJ Miky
Profil
bukaj
Kdyžtak:
$vyber = "SELECT * FROM studenti WHERE ID LIKE "%".$hledat."%"";

Ale pokud je ID celočíselné, bylo by lepší přímo:
$vyber = "SELECT * FROM studenti WHERE ID=".$hledat;


+ ještě nezapomeň na ošetření SQL injection:
... mysql_real_escape_string($hledat) ...
bukaj
Profil
DJ Miky
kdyžtak:
$vyber = "SELECT * FROM studenti WHERE ID LIKE \"%".$hledat."%\"";
Brouzdalek
Profil
Děkuji všem za rady !!!

Osvědčilo se mi:

$provedeni = MySQL_Query($vyber);

nahraď za:

if($provedeni = MySQL_Query($vyber)) {
// zbytek kódu, mysql_fetch_array atd.
}



od DJ Miky ! Díky moc !

Funguje ;-))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: