Autor | Zpráva | ||
---|---|---|---|
honya84 Profil * |
Ahoj.
Jsem úplný začátečník v php a upravuji jeden skript pro vyhledávání dat z databáze. Mám dva skripty, jeden pro vstup dat do formuláře s rolovací nabídkou výběru atributu pro vyhledání vstupního řetězce (input.php) a druhý pro výstup záznamů z databáze, které se shodují (output.php). Domnívám se, že problém je v podmínce mysql_query ( WHERE...LIKE) patrně je špatná syntaxe(?) Prosím o shlédnutí a doporučení úpravy. Díky Kódy: input. php <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Vyhledávání</title> </head> <body bgcolor="#ffffff"> <h2>Vyhledávání</h2> <form name="search" method="post" action="studentsearch-exec.php"> Hledej výraz: <input type="text" name="find" /> podle <Select NAME="field"> <Option VALUE="zkr">Zkratka</option> <Option VALUE="naz">Název</option> <Option VALUE="sku">Skupina</option> </Select> <input type="submit" name="search" value="Hledej" /> </form> </body> </html> output.php <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>Výsledky vyhledávání</title> </head> <body bgcolor="#ffffff"> <?php echo "<h2>Výsledky vyhledávání:</h2>"; $find = $_POST['find']; //If they did not enter a search term we give them an error if ($find == "") { echo "<p>Zapomněl jsi napsat vyhledáváný výraz."; exit; } // Otherwise we connect to our Database mysql_connect("localhost", "root", "") or die(mysql_error()); mysql_select_db("honza") or die(mysql_error()); // We perform a bit of filtering $find = strtoupper($find); $find = strip_tags($find); $find = trim ($find); //Now we search for our search term, in the field the user specified $data = mysql_query("SELECT * FROM aa_pruvodce WHERE upper($field) LIKE'%$find%'"); echo "<table border='1'>"; echo "<tr><th>Název</th> <th>Zkratka</th> <th>Skupina</th> <th>Popisuje</th> <th>Druh</th> <th>Poskytovatel</th> <th>Dostupnost</th></tr>"; ///And we display the results while($result = mysql_fetch_array( $data )) { // Print out the contents of each row into a table echo "<tr><td>"; echo $result['NAZEV']; echo "</td><td>"; echo $result['ZKRATKA']; echo "</td><td>"; echo $result['SKUPINA']; echo "</td><td>"; echo $result['POPISUJE']; echo "</td><td>"; echo $result['DRUH']; echo "</td><td>"; echo $result['POSKYTOVATEL']; echo "</td><td>"; echo $result['DOSTUPNOST']; echo "</td></tr>"; } //This counts the number or results - and if there wasn't any it gives them a little message explaining that $anymatches=mysql_num_rows($data); if ($anymatches == 0) { echo "Tento řetězec nebyl nalezen.<br><br>"; } //And we remind them what they searched for { echo "<b>Hledaným heslem bylo:</b> " .$find; } ?> </body> </html> |
||
Keeehi Profil |
#2 · Zasláno: 16. 2. 2010, 10:45:13 · Upravil/a: Keeehi
Na řádku 20 ti chybí heslo, možná jsi ho jen tady vymazal.
Toto by snad mělo fungovat switch ($field) { case 'zkr': $kde='zkratka' break; case 'naz': $kde='nazev' break; case 'sku': $kde='skupina' break; default: $kde='nazev' break; } $data = mysql_query("SELECT * FROM aa_pruvodce WHERE $kde LIKE'%$find%'"); Příště, až vám nebude SQL dotaz fungovat, tak si ho zkuste vypsat. V tomto případě byste asi zjistil, že vyhledáváte ve sloupci, který ani neexistuje. |
||
AM_ Profil |
#3 · Zasláno: 16. 2. 2010, 11:48:04
za LIKE bych dal mezeru, nevím, jestli nedělá problém, že '%$find%' je nalepené hned na to.
Nejlepší je při ladění toto: //nekam na zacatek aplikace placni toto: DEFINE('DEBUG', true); //a az aplikaci publikujes, zmen to na false //dotaz: $data = mysql_query($q="SELECT $nejake $promenne FROM blablabla"); if (DEBUG){ echo "Dotaz: $q<br>Chyba:".mysql_error(); } To debug můžeš vynechat a po odladění echo smazat ručně, ovšem ono se na to rádo zapomíná a návštěvníka pak vyděsí podivný kód, případně hackerovi může poskytnout nežádoucí informace. |
||
Časová prodleva: 4 dny
|
|||
RadimR Profil * |
#4 · Zasláno: 20. 2. 2010, 20:57:49
zdravim, pozivam jednoduchy skript pro vyhledavani, ale mam nekde chybu. Skript me vypise u nalezeneho zaznamu jen polozky aaa bbb ccc. Polozky ddd a eee se v nalezenem zaznamu nezobrazi, ale jde podle nich vyhledavat.
Kde mam chybu??? <? $db="mydata"; $tb="pokus"; $spojeni = mysql_connect("localhost","user","pass"); mysql_select_db($db, $spojeni); $result=mysql_query("SELECT aaa, bbb, ccc, ddd, eee FROM `$tb`"); //tento kód vypíše názvy sloupců: echo ("<table border=\"2\" bordercolor=\"green\"><tr>"); for($i=0;$i<mysql_num_fields($result); $i++){ echo("<td style=\"font-weight: bold\">".mysql_field_name($result, $i)."</td>"); } echo("</tr>"); //tento kód vypíše odpovídající položky: $hledat = "hledaneslovo"; $vysledek1 = mysql_query("SELECT aaa, bbb, ccc, ddd, eee FROM `$db`.`$tb` WHERE `aaa` LIKE '%".$hledat."%' OR `bbb` LIKE '%".$hledat."%' OR `ccc` LIKE '%".$hledat."%' OR `ddd` LIKE '%".$hledat."%' OR `eee` LIKE '%".$hledat."%'"); while ($zaznam2 = mysql_fetch_array($vysledek1) ): echo ("<tr><td>".$zaznam2["aaa"]."</td>"); echo ("<td>".$zaznam2["bbb"]."</td>"); echo ("<td>".$zaznam2["ccc"]."</td>"); echo ("<td>".$zaznam2["ddd>"]."</td>"); echo ("<td>".$zaznam2["eee>"]."</td></tr>"); endwhile; echo("</table>"); ?> |
||
Časová prodleva: 14 let
|
0