Vyhladavanie

Programovacie jazyky, rady, poradňa...
siadak
Amateur
Amateur
Príspevky: 10
Registrovaný: 18 sep 2010, 12:43

Vyhladavanie

Príspevok od používateľa siadak »

Dobry den,
chcel by soms a spytat ci by mi tu niekto vedel pomoct s problemom ohladne vyhladavania... funguje vsetko ok akurat mam taky problem ze ked chcem vyhladat v mojej db slovo "ASPL-020-pi" nenajede ho ale ak zadam len "ASPL-" funguje to okey.. vedel by mi niekto s tym pomoct aby mi to vyhladavlo aj s tym cislom ? kde moze byt problem ? dakujem

Kód: Vybrať všetko

 <div id="rightPan">                 
  <div id="reviews">    <h2>Vyhľadávanie v databáze produktov</h2>
    <form  method="post">
      <table>
        <tr>
          <td align="left">Hľadaný reťazec: </td><Td>
            <input type="text" name="searchtext"> </td>
        </tr>
        <tr>  <td></td>
          <td align="left">
            <input type="submit"></td>
        </tr>
    </form>
    </table>
<?

if(isset($_POST["searchtext"]))
{
    $_POST["searchtext"]=ereg_replace(quotemeta("+|-|*|~|\"|\\|<|>|(|)"),"",$_POST["searchtext"]);
    if($_POST["searchtext"]=="")
        die("<b>Chyba pri vyhľadávaní:<br>Nebol zadaný žiaden reťazec, ktorý treba hľadať!</b>");
    else
    {
        $searchtext=explode(" ",$_POST["searchtext"]);
        $maximum=0;
        for($i=0;$i<count($searchtext);$i++)
        {
            $pocet=strlen($searchtext[$i]);
            $maximum=($maximum < $pocet ? $pocet : $maximum);
        }
        if($maximum<4)
            die("<b>Chyba pri vyhľadávaní:<br>Aspoň jedno slovo v reťazci musí byť dlhšie ako 4 znaky</b>");
    }
    $query="SELECT *,MATCH(name, info) AGAINST('".$_POST["searchtext"]."' IN BOOLEAN MODE) as produktID FROM web_shop_products
            WHERE MATCH(name, info) AGAINST('".$_POST["searchtext"]."' IN BOOLEAN MODE)";
    echo '
<h2>Výsledky vyhľadávania</h2>
<table width="100%">
</table>
<table width="100%" bgcolor="#e6e6e6">
<tr >
<td align="left" width="15%"><b><font color="#000000">Názov</font></b></td>
<td align="left" width="30%"><b><font color="#000000">Informácie</font></b></td>
</tr>
</table> ';
    $query.=" ORDER BY produktID DESC";
    $result=mysql_query($query);
    while($pole=mysql_fetch_array($result))
    {
$ergebnis = safe_query("SELECT * FROM " . PREFIX . "shop_categories WHERE catID='".$pole["cat"]."'");
$ds = mysql_fetch_array($ergebnis);
        echo '
<table width="100%">
<tr bgcolor="#FFFFFF">
<td align="left" width="15%"><b><a href=" index.php?site=shop&action=product&catID='.$pole["cat"].'&produktID='.$pole["produktID"].'&subcatID='.$ds["subcatID"].'">'.$pole["name"].'</a></b></td>
<td align="left" width="30%"><b><a href=" index.php?site=shop&action=product&catID='.$pole["cat"].'&produktID='.$pole["produktID"].'&subcatID='.$ds["subcatID"].'">'.$pole["info"].'</a></b></td>
</tr>
</table><table width="100%">
<tr>
<td width="100%"  style="border-bottom: 1px solid #869496;"></td>
</tr></table>
       ';
    }
}
    ?>   
  </div>
</div>
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Re: Vyhladavanie

Príspevok od používateľa caesar1987 »

necital som to cele ale ak sa nemylim tak toto

$_POST["searchtext"]=ereg_replace(quotemeta("+|-|*|~|\"|\\|<|>|(|)"),"",$_POST["searchtext"]);

ti prepise pomlcky na nic a teda ti to slovo s pomlckami uz nenajde, lebo bude z neho ASPL020pi.
siadak
Amateur
Amateur
Príspevky: 10
Registrovaný: 18 sep 2010, 12:43

Re: Vyhladavanie

Príspevok od používateľa siadak »

diky moc a est eejdna vec dalo by sa to spravit taka by mi to vyhladavalo z dvoch tabuliek ? teraz to mam robene len na jednu "web_shop_products" ?
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Re: Vyhladavanie

Príspevok od používateľa caesar1987 »

ak su v oboch stlpce name a info tak takto

Kód: Vybrať všetko

$query="SELECT *,MATCH(name, info) AGAINST('".$_POST["searchtext"]."' IN BOOLEAN MODE) as produktID FROM web_shop_products,INA_TABULKA
            WHERE MATCH(name, info) AGAINST('".$_POST["searchtext"]."' IN BOOLEAN MODE)";
malo by to fungovat, INA_TABULKA nahrad menom druhej tabulky

co sa tyka toho

$_POST["searchtext"]=ereg_replace(quotemeta("+|-|*|~|\"|\\|<|>|(|)"),"",$_POST["searchtext"]);
vyhodil si to cele alebo len tu pomlcku? lebo ak cee tak este treba osetrit vstup
siadak
Amateur
Amateur
Príspevky: 10
Registrovaný: 18 sep 2010, 12:43

Re: Vyhladavanie

Príspevok od používateľa siadak »

niektore produkty mivyhlda a niektore nie a pritom su v tej db nechapem

co sa tyka tej pomlcky tka som len ju od tade zmazal
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Re: Vyhladavanie

Príspevok od používateľa caesar1987 »

vies sem dat strukturu tych dvoch tabuliek?
siadak
Amateur
Amateur
Príspevky: 10
Registrovaný: 18 sep 2010, 12:43

Re: Vyhladavanie

Príspevok od používateľa siadak »

problem s tymi dvoma tabulkami uz nemam ale problem je ten ze produkt ASPL-020-pi mi najde ale produkt FER-005-00 uz nie..


Kód: Vybrať všetko

CREATE TABLE IF NOT EXISTS `web_shop_products` (
  `produktID` int(11) NOT NULL auto_increment,
  `cat` varchar(255) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  `info` varchar(255) NOT NULL default '',
  `rozmery` varchar(255) NOT NULL default '',
  `vaha` varchar(255) NOT NULL default '',
  `balikov` varchar(255) NOT NULL default '',
  `pic` varchar(255) NOT NULL default '',
  `priloha1` varchar(255) NOT NULL default '',
  `priloha2` varchar(255) NOT NULL default '',
  `extension` varchar(255) NOT NULL default '',
  `extension1` varchar(255) NOT NULL default '',
  `extension2` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`produktID`),
  FULLTEXT KEY `search` (`name`,`info`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=388 ;

--
-- Sťahujem dáta pre tabuľku `web_shop_products`
--

INSERT INTO `web_shop_products` (`produktID`, `cat`, `name`, `info`, `rozmery`, `vaha`, `balikov`, `pic`, `priloha1`, `priloha2`, `extension`, `extension1`, `extension2`) VALUES
(1, '1', 'ASPL-020-pi', 'Stôl 150 písací', '1500x700x760', '36,2', '1', 'image_1.jpg', 'priloha1_1.jpg', 'priloha2_1.pdf', 'jpg', 'jpg', 'pdf'),
(2, '3', 'AS-001-00', 'Skriòa otvor.policová - 4 pol.', '572x336x1751 ', '26.7', '1', 'image_2.jpg', 'priloha1_2.pdf', '', 'jpg', 'pdf', ''),
(3, '3', 'AS-002-00', 'Skriòa dole dvierka', '572x336x1751', '30.9', '1', 'image_3.jpg', 'priloha1_3.pdf', '', 'jpg', 'pdf', ''),
(4, '3', 'AS-003-00', 'Skriòa dole dvierka, hore dvierka', '572x336x1751 ', '35,6', '1', 'image_4.jpg', 'priloha1_4.pdf', '', 'jpg', 'pdf', ''),
(5, '3', 'AS-004-00', 'Skriòa dole dv., hore sklo', '572x336x1751 ', '34,7', '1', 'image_5.jpg', 'priloha1_5.pdf', '', 'jpg', 'pdf', ''),
(6, '1', 'ASPL-020-za', 'Stôl 150 zasadací', '1500x700x760 ', '36,8', '1', 'image_6.jpg', 'priloha1_6.pdf', '', 'jpg', 'pdf', ''),
(9, '5', 'JS-002-00', 'jedálensky stôl', '890*700*750', '', '', 'image_9.jpg', 'priloha1_9.pdf', '', 'jpg', 'pdf', ''),
(11, '5', 'JS-003-00', 'jedálensky stôl', '800*800*750', '', '', 'image_11.jpg', 'priloha1_11.pdf', '', 'jpg', 'pdf', ''),
(12, '5', 'JS-004-00', 'jedálensky stôl', '1600*800*750', '', '', 'image_12.jpg', 'priloha1_12.pdf', '', 'jpg', 'pdf', ''),
(13, '5', 'JS-005-00', 'jedálensky stôl', '1200*900*750', '', '', 'image_13.jpg', 'priloha1_13.pdf', '', 'jpg', 'pdf', ''),
(14, '5', 'JS-006-00', 'jedálensky stôl', '900*900*750', '', '', 'image_14.jpg', 'priloha1_14.jpg', '', 'jpg', 'jpg', ''),
(15, '8', 'FER-005-00', 'PC stolík FERDO 5', '1532*700*948/760', '85,8', '2', 'image_15.jpg', 'priloha1_15.jpg', '', 'jpg', 'jpg', ''),
(16, '1', 'ASPL-021-pi', 'Stôl 120 písací', '1200x700x760', '33', '1', 'image_16.jpg', 'priloha1_16.pdf', '', 'jpg', 'pdf', ''),
(17, '1', 'ASPL-021-za', 'Stôl 120 zasadací', '1200x700x760 ', '31,2', '1', 'image_17.jpg', 'priloha1_17.pdf', '', 'jpg', 'pdf', ''),
(18, '1', 'ASPL-022-za', 'Stôl s oblúkom zasadací', '1500x700x760', '34,5', '1', 'image_18.jpg', 'priloha1_18.pdf', '', 'jpg', 'pdf', ''),
(19, '1', 'ASPL-023-pi', 'Stôl 70 písací', '700x700x760', '23,3', '1', 'image_19.jpg', 'priloha1_19.pdf', '', 'jpg', 'pdf', ''),
(20, '1', 'ASPL-023-v0', 'Stôl 70 s výsuvom na klávesnicu', '700x700x760 ', '26,1', '1', 'image_20.jpg', '', '', 'jpg', '', ''),
(21, '1', 'ASPL-024-00', 'Stôl rohový oblúkový', '700x700x760 ', '18,4', '1', 'image_21.jpg', 'priloha1_21.pdf', '', 'jpg', 'pdf', ''),
(22, '1', 'ASPL-028-00', 'Prídavný pult', '1200x280x350 ', '13,2', '1', 'image_22.jpg', 'priloha1_22.pdf', '', 'jpg', 'pdf', '');

a php kod.. uz som ho orezal co najviac to slo aneviem prist na chybu :D +

Kód: Vybrať všetko

 
<div id="rightPan">                    
  <div id="reviews">    <h2>Vyhľadávanie v databáze produktov</h2>    
    <form  name="nahrat"   enctype="multipart/form-data" method="post">      
      <table>        
        <tr>          
          <td align="left">Hľadaný reťazec: </td><Td>            
            <input type="text" name="searchtext"> </td>        
        </tr>          
        <tr>  <td></td>          
          <td align="left">            
            <input type="submit" name="nahrat"></td>        
        </tr>    
    </form>    
    </table>                   
<?
if(isset($_POST["nahrat"]))
{
    if($_POST["searchtext"]=="")
        die("<b>Chyba pri vyhľadávaní:<br>Nebol zadaný žiaden reťazec, ktorý treba hľadať!</b>");
    $query="    SELECT *, MATCH(name, info) AGAINST ('".$_POST["searchtext"]."') FROM web_shop_products WHERE MATCH(name, info) AGAINST ('".$_POST["searchtext"]."' IN BOOLEAN MODE)  ";
    $result=mysql_query($query);   
    echo ' 
   <table width="100%">
   <tr>
   <td align="left"><h2>Výsledky vyhľadávania '.$_POST["searchtext"].'</h2></td>
    </tr></table>
<table width="100%" bgcolor="#e6e6e6">
<tr > 
<td align="left" width="15%"><b><font color="#000000">Názov</font></b></td>
<td align="left" width="30%"><b><font color="#000000">Informácie</font></b></td>
</tr>
</table> ';
    while($pole=mysql_fetch_array($result))
    {
        echo '
<table width="100%">
<tr bgcolor="#FFFFFF">
<td align="left" width="15%"><b>'.$pole["name"].'</b></td>
<td align="left" width="30%"><b>'.$pole["info"].'</b></td>
</tr>
</table><table width="100%">
<tr>
<td width="100%"  style="border-bottom: 1px solid #869496;"></td>
</tr></table>
       ';
    }
}
        ?>      
  </div>
</div>
Napísať odpoveď