Autor Zpráva
BaTeCzKo
Profil
Na localhostu mám vlastní server, na kterém mi běží i MySQL - 5.0.21 server. Problem je, ze mi na te novejsi databazi nefunguje skript na vyhledavani nize. Na starsi MySQL 4+ mi funguje bez problemu. Kontroloval jsem i vystup funkce mysql_error(), ale zadnou chybu to nehlasilo. Nevite cim by to mohlo byt? Diky.


<?
include("../_connect.php");
$year=date("Y");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!-- Copyright (c) <? echo $year; ?>, BaTeCzKo | http://bateczko.profitux.cz/ -->
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="keywords" content="<? echo $st_keywords; ?>">
<meta name="description" content="<? echo $st_description; ?>">
<meta name="author" content="<? echo $st_author; ?>">
<link href="../style.css" type="text/css" rel="stylesheet">
<title><? echo $st_title; ?></title>
</head>

<body>

<div class="board">
<div class="board-padding">
<a href="../">&lt; zpět na hlavní stranu</a><br><br>
<h1>Vyhledávání</h1>
<hr size="1" color="#b2b2b2">

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="get">
<input type="text" name="hledej" size="40" maxlength="256" value="<? if(isset($_GET['hledej'])){echo addslashes($_GET['hledej']);} ?>">
<input type="submit" value="Hledej"><br>

<?
/* radio buttony */
if(isset($_GET['kde'])){
$kde=$_GET['kde'];
$kde=addslashes($kde);
switch($kde){
case "c":echo "články <input type='radio' name='kde' value='c' checked> sekce <input type='radio' name='kde' value='s'>";break;
case "s":echo "články <input type='radio' name='kde' value='c'> sekce <input type='radio' name='kde' value='s' checked>";break;
default:echo "články <input type='radio' name='kde' value='c' checked> sekce <input type='radio' name='kde' value='s'>";$kde="c";break;
}
}
else{
echo "články <input type='radio' name='kde' value='c' checked> sekce <input type='radio' name='kde' value='s'>";
$kde="c";
}
?>

</form>

<?
if(isset($_GET['hledej'])){

/* nacteni parametru hledej */
$hledej=$_GET['hledej'];
$hledej=addslashes($hledej);
$hledej=substr($hledej, 0, 256);
$trans=array("&"=>"&amp;", "<"=>"&lt;", ">"=>"&gt;");
$hledej=strtr($hledej, $trans);

/* pojmenovani oblasti vyhledavani */
switch($kde){
case "c":$target="článcích";break;
case "s":$target="sekcích";break;
}
echo "<h2>Výraz <i>$hledej</i> byl nalezen v těchto $target:</h2><br><div id='results'>";

/* vyhledani */
switch($kde){

case "c":
/* vytvoreni vyhledavaciho klice */
@mysql_query("ALTER TABLE articlecontent ADD FULLTEXT (code)");

/* vyhledani a vypis vysledku */
$sql = "SELECT id,perex,title FROM articlecontent WHERE MATCH (code) AGAINST (\"$hledej\")";
$results=@mysql_query($sql);

$naslo=0;
while($result=@mysql_fetch_array($results)){
if($naslo!=1){$naslo=1;}
echo "<a href='../?articleread=".$result['id']."'><b>".$result['title']."</b></ a><p>".$result['perex']."</p><hr size='1' color='#b2b2b2'>\n";
}

if($naslo==0){
echo "Na váš předmět vyhledávání - <i>$hledej</i> - nebyl nalezen žádný odkaz.";
}

/* zruseni vyhledavaciho klice */
@mysql_query("ALTER TABLE articlecontent DROP INDEX code");
break;

case "s":
/* vytvoreni vyhledavaciho klice */
@mysql_query("ALTER TABLE codecontent ADD FULLTEXT (code)");

/* vyhledani a vypis vysledku */
$sql = "SELECT id,home FROM codecontent WHERE MATCH (code) AGAINST (\"$hledej\")";
$results=@mysql_query($sql);

$naslo=0;
while($result=@mysql_fetch_array($results)){
if($naslo!=1){$naslo=1;}

$home=$result['home'];
$anchor=@mysql_query("SELECT anchor FROM menu WHERE id=$home");
$anchor=@mysql_fetch_array($anchor);
$anchor=$anchor['anchor'];

echo "<a href='../?str=".$result['id']."&amp;tp=1'><b>".$anchor."</b></a><hr size='1' color='#b2b2b2'>\n";
}

if($naslo==0){
echo "Na váš předmět vyhledávání - <i>$hledej</i> - nebyl nalezen žádný odkaz.";
}

/* zruseni vyhledavaciho klice */
@mysql_query("ALTER TABLE codecontent DROP INDEX code");
break;

}



echo "</div>";
}
?>

</div>
</div>

</body>
</html>

Peca
Profil
Co znamená nefunguje? Zkoušel jsi select zadat do PHPMyAdmina?
Typoval bych to na problém porovnáváním (velikost písmen, diakritika).
BaTeCzKo
Profil
phpMyAdmin mi hlasil chybu s uvozovkama. Tak jsem nahradil u vyhledavani uvozovky \" - '. Chybu uz to nehlasi, ale stejne to nefunguje.
WertriK
Profil
Mrkni do manuálu na syntax ALTER TABLE

ALTER TABLE articlecontent ADD FULLTEXT jmeno_indexu (sloupecStextem1, sloupecStextem2, ...)

Pokud hledáš chybu vymaž před dotazama ty @ a používej

mysql_query("bla bla") or die(mysql_error());


Zrovna dnes jsem dodělával hledání na jednom webu - taky na profituxu :)

Ještě drobná připomínka pokud používáš MATCH AGAINST jen v podmínce WHERE tak se FULLTEXT index dělat nemusí [nebo alespoň ne když to máš IN BOOLEAN MODE]
Toto téma je uzamčeno. Odpověď nelze zaslat.