Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Motore di ricerca di stringhe in database

    Salve a tutti avrei bisogno di aggiungere ad un sito internet un motore di ricerca che mostrasse tutti i risultati di una stringa immessa dall' utente, cercando fra i record del database del sito. Il sito si occupa principalmente di musica quindi per capirci l' utente scrive nel campo di ricerca "nomeArtista" o "nomeTitolo" e questa fa una ricerca della stringa in tutte le tabelle del dabase.

    Ho cercato di cavarmela da solo scaricando questo script http://php.html.it/script/vedi/2187/search/ nella sezione apposita del sito ma non sono riuscito a far girare lo script apparentemente molto semplice.

    Ho modificato così il file "after_search.php" che troviamo all' interno del pacchetto ma continua a darmi l' errore
    E' necessario specificare la/le parola/parole da cercare
    .
    Codice PHP:
    <?php session_start(); if (isset($_SESSION['logged'])&& $_SESSION['logged']==1)     

    {
    $nulla=0;} else    {     header ("Location:login.php");     die();     }  

    $_SESSION['STRINGA']=$_POST['stringa'];  include("connessione.php"); 

    if(!
    $stringa or $stringa=="") { echo "<font face=\"arial\" size=\"2\">E' necessario specificare la/le 

    parola/parole da cercare
    <a href=\"javascript:history.back()\">indietro</a></font>"
    ; exit(); } 

    if(
    $ordine=="crescente") { $ord="ASC"; } elseif($ordine=="decrescente") { $ord="DESC"; } 

    $cn=mysql_connect($host,$uid,$pw); mysql_select_db($db,$cn); 

    $sql="SELECT musica.artista , musica.titolo , libri.autore , libri.titolo , prodotti_graffiti.marca , 

    prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome FROM musica , libri , 

    prodotti_graffiti , prodotti_djing WHERE musica.artista , musica.titolo , libri.autore , libri.titolo , 

    prodotti_graffiti.marca , prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome LIKE 

    '%
    $stringa%'";   

    if(
    $criterio=="esatta") { $sql.="testo LIKE '%$stringa%' ORDER BY id $ord"; } 

    elseif(
    $criterio=="almeno") { $lista_parole=explode(" ",$stringa); 

    for(
    $i=0;$i<count($lista_parole);$i++) { $str.="testo LIKE '%$lista_parole[$i]%' OR "; } 

    $str=substr($str,0,(strlen($str)-3)); $sql.=$str." ORDER BY id $ord"; } elseif($criterio=="tutte") { 

    $lista_parole=explode(" ",$stringa); for($i=0;$i<count($lista_parole);$i++) { $str.="testo LIKE 

    '%
    $lista_parole[$i]%' AND "; } $str=substr($str,0,(strlen($str)-4)); $sql.=$str." ORDER BY id $ord"; } 

    $query=mysql_db_query($db,$sql); $num=mysql_num_rows($query); ?> 

    <html> <head> <title>Esempio di motore di ricerca</title> </head> <body> <center> <font 

    face="arial" color="red">[b]Risultati della ricerca[/b]</font>

     

    <? if($num<1) { echo "<font face=\"arial\" size=\"2\">Nessun risultato trovato
    <a 

    href=\"javascript:history.back()\">indietro</a></font>"
    ; } 

    elseif(
    $num>=1) { echo "<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"silver\" 

    bordercolor=\"red\"><tr valign=\"top\"><td><font face=\"arial\" size=\"2\">[b]Data inserimento[b]

    </td><td><font face=\"arial\" size=\"2\">[b]Testo[/b]</td></tr>"


    while(
    $riga=mysql_fetch_array($query)) { echo "<tr><td><font face=\"arial\" size=\"2\">$riga[data]

    </td><td><font face=\"arial\" size=\"2\">"
    .nl2br($riga[testo])."</td></tr>"; } echo "</table>


    <font face=\"arial\" size=\"2\"><a href=\"javascript:history.back()\">indietro</a><font 

    face=\"arial\" size=\"2\">"
    ; } echo "

    <font face=\"arial\" size=\"2\">[b]Query SQL 

    generata:[/b]
    $sql</font>"mysql_close($cn); ?> </center> </body> </html>
    Se qualcuno mi da una mano mi farebbe risparmiare molto tempo !
    www.myspace.com/deejaydariuspisa

    http://lanozionedeltempo.wordpress.com/

  2. #2
    dandogli un'ochiata molto superficiale secondo me devi cambiare questo
    Codice PHP:
    $_SESSION['STRINGA']=$_POST['stringa']; 
    con questo:
    Codice PHP:
    $stringa=$_POST['stringa']; 

  3. #3
    Ho modificato il codice così
    Codice PHP:
    <?php

    $stringa
    =$_POST['stringa'];

    include(
    "connessione.php");

    if(!
    $stringa or $stringa=="")
    {
    echo 
    "<font face=\"arial\" size=\"2\">
    E' necessario specificare la/le parola/parole da cercare
    <a href=\"javascript:history.back()\">indietro</a></font>"
    ;
    exit();
    }
    if(
    $ordine=="crescente") { $ord="ASC"; }
    elseif(
    $ordine=="decrescente") { $ord="DESC"; }
    $cn=mysql_connect($host,$uid,$pw);
    mysql_select_db($db,$cn);
    $sql="SELECT musica.artista , musica.titolo , libri.autore , libri.titolo , prodotti_graffiti.marca , 

    prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome FROM musica , libri , 

    prodotti_graffiti , prodotti_djing WHERE "
    ;

    if(
    $criterio=="esatta")
    {
    $sql.="testo LIKE '%$stringa%' ORDER BY id $ord";
    }
    elseif(
    $criterio=="almeno")
    {
    $lista_parole=explode(" ",$stringa);
    for(
    $i=0;$i<count($lista_parole);$i++)
    {
    $str.="testo LIKE '%$lista_parole[$i]%' OR ";
    }
    $str=substr($str,0,(strlen($str)-3));
    $sql.=$str." ORDER BY id $ord";
    }
    elseif(
    $criterio=="tutte")
    {
    $lista_parole=explode(" ",$stringa);
    for(
    $i=0;$i<count($lista_parole);$i++)
    {
    $str.="testo LIKE '%$lista_parole[$i]%' AND ";
    }
    $str=substr($str,0,(strlen($str)-4));
    $sql.=$str." ORDER BY id $ord";
    }
    $query=mysql_db_query($db,$sql);
    $num=mysql_num_rows($query);
    ?>
    <html>
    <head>
    <title>Esempio di motore di ricerca</title>
    </head>
    <body>
    <center>
    <font face="arial" color="red">[b]Risultati della ricerca[/b]</font>


    <?
    if($num<1)
    {
    echo 
    "<font face=\"arial\" size=\"2\">Nessun risultato trovato
    <a href=\"javascript:history.back()\">indietro</a></font>"
    ;
    }
    elseif(
    $num>=1)
    {
    echo 
    "<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"silver\" bordercolor=\"red\"><tr valign=\"top\"><td><font face=\"arial\" size=\"2\">[b]Data inserimento[b]</td><td><font face=\"arial\" size=\"2\">[b]Testo[/b]</td></tr>";
    while(
    $riga=mysql_fetch_array($query))
    {
    echo 
    "<tr><td><font face=\"arial\" size=\"2\">$riga[data]</td><td><font face=\"arial\" size=\"2\">".nl2br($riga[testo])."</td></tr>";
    }
    echo 
    "</table>
    <font face=\"arial\" size=\"2\"><a href=\"javascript:history.back()\">indietro</a><font face=\"arial\" size=\"2\">"
    ;
    }
    echo 
    "

    <font face=\"arial\" size=\"2\">[b]Query SQL generata:[/b]
    $sql</font>";
    mysql_close($cn);
    ?>
    </center>
    </body>
    </html>
    e mi dice
    Nessun risultato trovato indietro Query SQL generata: SELECT musica.artista , musica.titolo , libri.autore , libri.titolo , prodotti_graffiti.marca , prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome FROM musica , libri , prodotti_graffiti , prodotti_djing WHERE
    che palle...
    www.myspace.com/deejaydariuspisa

    http://lanozionedeltempo.wordpress.com/

  4. #4
    scommento che il form è errato!

  5. #5
    Senti io ricontrollo comunque il form è uguale a quello preso dallo script originale preso da qua http://php.html.it/script/vedi/2187/search/ non so che dire... Oltre tutto cè un errore grossolano già nel file after_search.php... la inculde iniziale dovrebbe stare all' interno del PHP o sbaglio ?
    Ciao grazia della pazienza
    www.myspace.com/deejaydariuspisa

    http://lanozionedeltempo.wordpress.com/

  6. #6
    se vuoi il mio parere sullo script mi sembra pessimo...
    e cmq il corretto funzionamento di un motore di ricerca interno dipende strettamente da come sono inseriti i contenuti all'interno del db

  7. #7
    guarda ci rinuncio provo a fare una semplice select con le mie capacità...

    sono rimasto un pò deluso però, ti ripeto e l' avrai visto che quello script è stato preso qua da html.it ed è pieno di errori ! non so come la gente l'abbia potuto votare 4 stelline...

    a questo punto se non ti chiedo troppo mi potresti dare qualche suggerimento ?

    al solito tutto gira attorno a questa query.

    Codice PHP:
    $sql="SELECT musica.artista , musica.titolo , libri.autore , libri.titolo , prodotti_graffiti.marca ,  

     prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome FROM musica , libri ,   

    prodotti_graffiti , prodotti_djing WHERE musica.artista , musica.titolo , libri.autore , libri.titolo ,   

    prodotti_graffiti.marca , prodotti_graffiti.nome , prodotti_djing.marca , prodotti_djing.nome LIKE   

    '%
    $stringa%'"
    devo tirare fuori i match che contengono quella stringa immessa nella form.

    fra qualche tempo provo a postare un mio script.

    grazie per ora a presto.
    www.myspace.com/deejaydariuspisa

    http://lanozionedeltempo.wordpress.com/

  8. #8
    la query è errata stai selezionando dati da tabelle diverse senza unirle con nessun join/union

  9. #9
    hai ragione non c'avevo pensato a fare il join fra tabelle differenti magari riprovo a modificare la query nello script precedente...
    purtoppo sono ancora un principiante e non ho molta esperienza con siti dinamici.
    www.myspace.com/deejaydariuspisa

    http://lanozionedeltempo.wordpress.com/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.