Visualizzazione risultati 1 fino 7 di 7

Discussione: Programmazione motore di ricerca con segnalazione di errore

  1. #1
    L'avatar di RpgWorld
    RpgWorld non è connesso Utente giovane
    Data registrazione
    28-04-2003
    Messaggi
    74

    Predefinito Programmazione motore di ricerca con segnalazione di errore

    Seguendo un tutorial su html.it stavo creando un piccolo motore di ricerca per le guide che inserisco nel mio sito.

    Questo tutorial però non diceva come creare i classici "messaggi di errore" in caso di chiave di ricerca non inserita oppure in caso di risultato "vuoto"

    Il codice base della pagina dei risultati del motere di ricerca è il seguente:

    Codice PHP:
    <?
    include("../top_foot.inc.php");
    include(
    "../config.inc.php");
    top();

    $db = mysql_connect($db_host, $db_user, $db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $keys = explode (",", $chiave);

    $query = "";
    reset ($keys);
    while (list(,
    $parola) = each ($keys))
    {
    $parola = trim($parola);
    if (
    $parola != "")
    $query .= "titolo LIKE '%$parola%' OR sintesi LIKE '%$parola%' OR indice_1 LIKE '%$parola%' OR testo_1 LIKE '%$parola%' OR indice_2 LIKE '%$parola%' OR testo_2 LIKE '%$parola%' OR indice_3 LIKE '%$parola%' OR testo_3 LIKE '%$parola%' OR indice_4 LIKE '%$parola%' OR testo_4 LIKE '%$parola%' OR indice_5 LIKE '%$parola%' OR testo_5 LIKE '%$parola%' OR indice_6 LIKE '%$parola%' OR testo_6 LIKE '%$parola%' OR indice_7 LIKE '%$parola%' OR testo_7 LIKE '%$parola%' OR ";
    }
    $query .= "0";

    $query = "SELECT id, titolo, data, sintesi FROM tutorials WHERE " . $query;

    $result = mysql_query($query, $db);

    echo
    "<dl>";

    while (
    $row = mysql_fetch_array($result))
    {
    echo
    "<dt>";
    echo
    "<a class=\"normal\" href=\"view.php?id=$row[id]\"><img src=\"../grafica/ico/gioco_up.png\" title=\"Fai clic sul Link per visionare il tutorial.\" /> $row[titolo]</a> ..::";
    echo
    date("j/n/y", $row[data]);
    echo
    "::.. ";
    echo
    "</dt>";
    echo
    "<dd>";
    echo
    "$row[sintesi]";
    echo
    "</dd>";
    }

    echo
    "</dl>";

    echo
    "<a href=\"index.php\" class=\"normal\" title=\"Controlla nuovamente la lista tutorials. Forse sono presenti altre guide sullo stesso tema.\"><img src=\"../grafica/ico/risposta.png\" title=\"Controlla la lista completa dei tutorials per vedere se c'è qualche documento inerente alla tematica trattata.\" />..:: Torna all'indice tutorials </a> <a href=\"search.php\" class=\"normal\" title=\"Usa il motore di ricerca per trovare altre guide che discutono la stessa tematica.\"><img src=\"../grafica/ico/cerca.png\" title=\"Usa il motore di ricerca tutorials.\" />..:: Cerca tutorials</a><br>";
    foot()
    ?>
    Il primo controllo per verificare che l'utente abbia effettivamente scritto qualcosa nel campo del form prima di avviare la ricerca l'ho scritto come segue:

    Codice PHP:
    if ($chiave == "") {
    echo
    "<h1>Chiave di ricerca non inserita</h1>";
    echo
    "<p><img src=\"../grafica/ico/vietato.png\" title=\"Errore di inserimento dati.\" />Non hai inserito nessuna parola nel campo di ricerca. Il motore non può sviluppare alcun risultato.</p>";
    echo
    "<dl>";
    echo
    "<dt>Consigli Per Migliorare La Ricerca:</dt>";
    echo
    "<dd>Per cercare più parole senza restringere troppo il campo usate la virgola tra una parola e l'altra Es.(switch,Label) se non usate la virgola il motore di ricerca mostrerà soltanto i tutorials in cui entrambe le parole sono presenti.</dd>";
    echo
    "</dl>";
    }
    e l'ho inserito sotto la stringa "$keys = explode (",", $chiave);" della pagina di base, e per fortuna funziona perfettamente.

    Ora il problema e nell'inviare il messaggio di errore nel caso la parola chiave inserita non porti a nessun risultato. La mia bozza per questo controllo è il codice sottostante.

    Codice PHP:
    if ($row == "") {
    echo
    "<h1>Nessun risultato trovato</h1>";
    echo
    "<p><img src=\"../grafica/ico/vietato.png\" title=\"Parola chiave non presente.\" />Il motore non ha individuato nessun risultato per la chiave di ricerca: \"$chiave\" inserita.</p>";
    echo
    "<dl>";
    echo
    "<dt>Consigli Per Migliorare La Ricerca:</dt>";
    echo
    "<dd>Per cercare più parole senza restringere troppo il campo usate la virgola tra una parola e l'altra Es.(switch,Label) se non usate la virgola il motore di ricerca mostrerà soltanto i tutorials in cui entrambe le parole sono presenti.</dd>";
    echo
    "</dl>";
    }
    Che è stato inserito proprio sotto la funzione wile {} purtroppo però non funziona...O meglio appare in continuazione sia che ci siano risultati sia che non ci siano e sia se non vene inserito nessuna chiave di ricerca...Non so proprio come risolvere il problema

  2. #2
    Guest

    Predefinito

    come soluzione potresti fare un conteggio delle "righe" trovate
    dopodichè basta controllare che il valore sia maggiore di 0

    inserisci queste righe dopo aver effettuato la query

    $tot = mysql_num_rows();

    if ($tot>0)
    {
    //stampa risultati..
    }
    else
    {
    print "errore 0 ris";
    }



    ciao e scusa per risp rapida!

  3. #3
    L'avatar di RpgWorld
    RpgWorld non è connesso Utente giovane
    Data registrazione
    28-04-2003
    Messaggi
    74

    Predefinito errorino

    Grazie mille per le risposte ^_^

    allora una versione beta di questo motore la si può vedere all'indirizzo:

    http://rpgworld.altervista.org/tutorials/search.php

    Però è la versione priva di qualsiasi messaggio di errore.

    Ho provato ad utilizzare il tuo codice texilee ma ricevo uno strano messaggio di errore:

    Warning: Wrong parameter count for mysql_num_rows() in c:\easyphp\www\rpgworld\tutorials\result.php on line 40

    ho provato anche a scrivere mysql_num_rows($query, $db) senza nemmeno sapere precisamente cosa facevo in tutta sincerita ma l'errore continua ad apparire.

    Non saprei proprio :?????:

  4. #4
    L'avatar di RpgWorld
    RpgWorld non è connesso Utente giovane
    Data registrazione
    28-04-2003
    Messaggi
    74

    Predefinito grande ho capito il mio errore

    Wow missione compiuta...Come sempre sbagliavo io

    praticamente dovevo scrivere mysql_num_rows($result) e a questo punto la variabile $TOT mi assumeva il numero di risultati trovati visto che nella riga prima avevo scritto $result = mysql_query($query, $db);

    Ora il codice del motore è il seguente:

    Codice PHP:
    <?
    include("../top_foot.inc.php");
    include(
    "../config.inc.php");
    top();

    $db = mysql_connect($db_host, $db_user, $db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $keys = explode (",", $chiave);

    if (
    $chiave == "") {
    echo
    "<h1>Chiave di ricerca non inserita</h1>";
    echo
    "<p><img src=\"../grafica/ico/vietato.png\" title=\"Errore di inserimento dati.\" />Non hai inserito nessuna parola nel campo di ricerca. Il motore non può sviluppare alcun risultato.</p>";
    echo
    "<dl>";
    echo
    "<dt>Consigli Per Migliorare La Ricerca:</dt>";
    echo
    "<dd>Per cercare più parole senza restringere troppo il campo usate la virgola tra una parola e l'altra Es.(switch,Label) se non usate la virgola il motore di ricerca mostrerà soltanto i tutorials in cui entrambe le parole sono presenti.</dd>";
    echo
    "</dl>";
    }

    $query = "";
    reset ($keys);
    while (list(,
    $parola) = each ($keys))
    {
    $parola = trim($parola);
    if (
    $parola != "")
    $query .= "titolo LIKE '%$parola%' OR sintesi LIKE '%$parola%' OR indice_1 LIKE '%$parola%' OR testo_1 LIKE '%$parola%' OR indice_2 LIKE '%$parola%' OR testo_2 LIKE '%$parola%' OR indice_3 LIKE '%$parola%' OR testo_3 LIKE '%$parola%' OR indice_4 LIKE '%$parola%' OR testo_4 LIKE '%$parola%' OR indice_5 LIKE '%$parola%' OR testo_5 LIKE '%$parola%' OR indice_6 LIKE '%$parola%' OR testo_6 LIKE '%$parola%' OR indice_7 LIKE '%$parola%' OR testo_7 LIKE '%$parola%' OR ";
    }
    $query .= "0";

    $query = "SELECT id, titolo, data, sintesi FROM tutorials WHERE " . $query;

    $result = mysql_query($query, $db);

    $tot = mysql_num_rows($result);

    if (
    $tot > 0) {

    echo
    "<dl>";

    while (
    $row = mysql_fetch_array($result))
    {

    echo
    "<dt>";
    echo
    "<a class=\"normal\" href=\"view.php?id=$row[id]\"><img src=\"../grafica/ico/gioco_up.png\" title=\"Fai clic sul Link per visionare il tutorial.\" /> $row[titolo]</a> ..::";
    echo
    date("j/n/y", $row[data]);
    echo
    "::.. ";
    echo
    "</dt>";
    echo
    "<dd>";
    echo
    "$row[sintesi]";
    echo
    "</dd>";

    }
    }
    else {
    echo
    "<h1>Nessun risultato trovato</h1>";
    echo
    "<p><img src=\"../grafica/ico/vietato.png\" title=\"Parola chiave non presente.\" />Il motore non ha individuato nessun risultato per la chiave di ricerca: \"$chiave\" inserita.</p>";
    echo
    "<dl>";
    echo
    "<dt>Consigli Per Migliorare La Ricerca:</dt>";
    echo
    "<dd>Per cercare più parole senza restringere troppo il campo usate la virgola tra una parola e l'altra Es.(switch,Label) se non usate la virgola il motore di ricerca mostrerà soltanto i tutorials in cui entrambe le parole sono presenti.</dd>";
    echo
    "</dl>";
    }

    echo
    "</dl>";

    echo
    "<a href=\"index.php\" class=\"normal\" title=\"Controlla nuovamente la lista tutorials. Forse sono presenti altre guide sullo stesso tema.\"><img src=\"../grafica/ico/risposta.png\" title=\"Controlla la lista completa dei tutorials per vedere se c'è qualche documento inerente alla tematica trattata.\" />..:: Torna all'indice tutorials </a> <a href=\"search.php\" class=\"normal\" title=\"Usa il motore di ricerca per trovare altre guide che discutono la stessa tematica.\"><img src=\"../grafica/ico/cerca.png\" title=\"Usa il motore di ricerca tutorials.\" />..:: Cerca tutorials</a><br>";
    foot()
    ?>
    Raga grazie mille ancora

  5. #5
    L'avatar di RpgWorld
    RpgWorld non è connesso Utente giovane
    Data registrazione
    28-04-2003
    Messaggi
    74

    Predefinito certo che te lo passo ^_^''

    Ciao wider lo script l'ho realizzato seguento per filo e per segno una guida di Francesco Bonetto su freephp.it se non hanno cambiato i link la guida la trovi a questo indirizzo http://freephp.html.it/guide/print_lezione.asp?id=151

    Io ho fatto alcune piccole modifiche per adattare lo script alle mie esigenze (avevo bisogno di una impaginazione più tecnica).

    Lo script come l'ho modificato io (intendo i codici sorgenti senza la grafica) lo trovi qui:

    http://rpgworld.altervista.org/tutorials.zip

    aahh prima che me ne dimentichi...Se lo vuoi provare devi eliminare da ogni pag dello script la voce:

    <? include ("access_control.inc"); ?>

    E' un'altra modifica che ho fatto per restringere l'area amministrativa dello script.

    Ahh poi ricorda che devi creare altri DUE file e metterli nella Home Directory
    top_foot.inc.php
    config.inc.php

    Nel primo file ho creato due FUNCTION dove semplicemente metto la parte alta e bassa del sito.

    Il secondo va scritto come segue:

    <?
    //Configurazione RpgWorld Guide e Articoli

    // parametri del database
    $db_host = "";
    $db_user = "";
    $db_password = "";
    $db_name = "";

    //password per inserimento articoli
    $password = "";

    //Path Assoluta del nostro sito
    $path = "http://127.0.0.1/";
    ?>

    Cmq per vedere come funziona poi dare un'occhiata al mio sito...Sempre lo stesso script con alcune modifiche lo reciclato per creare lo script dedicato all'inserimento e alla visione delle recensioni dei giochi.

    Ciao ^_^

  6. #6
    Guest

    Predefinito

    sono contento per te!! ciao!

  7. #7
    L'avatar di RpgWorld
    RpgWorld non è connesso Utente giovane
    Data registrazione
    28-04-2003
    Messaggi
    74

    Predefinito Motore di ricerca per PPA Web Gallery

    Non so se ha qualcuno può tornare utile ma partendo dallo script precedentemente creato ho realizzato un piccolo motore di ricerca studiato appositamente per lo script

    PPA_Web_Gallery http://ppa.baiz.org/ L'autore è lo stesso che ha creato "e107"

    Il motore è ancora in versione beta ma può essere provato al seguente link: http://rpgworld.altervista.org/ppa/search.php

    Se qualcuno vuole posso postare lo script e una piccola guida per spiegare come "fonderlo" con il PPA (bisogna modificare qualche file e il layout selezionato per lo script).

    Cmq non vi finirò mai di ringrazare dell'aiuto :grin: era una vita che volevo mettere dei motori di ricerca decenti nel mio sito!!
    Ultima modifica di RpgWorld : 29-01-2005 alle ore 01.08.10

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •