| 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: 16 let
|
|||
0