Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problema complesso

  1. #1

    Problema complesso

    Salve ho un problema complesso da affrontare:
    file "search.php":
    <form name "cerca1" method="post" action="result.php">
    <input TYPE="hidden" NAME="submitted" VALUE="base"><input TYPE="hidden" NAME="submitted" VALUE="base">
    <table width="100%">
    <tr>
    <input TYPE="radio" NAME="criterio" VALUE="autore">
    AUTORE
    </tr>
    <tr>
    <input TYPE="radio" CHECKED NAME="criterio" VALUE="titolo">
    TITOLO
    </tr>
    <tr>
    <input TYPE="radio" NAME="criterio" VALUE="editore">
    EDITORE
    </tr>
    <tr>
    <input TYPE="radio" NAME="criterio" VALUE="anno">
    ANNO
    </tr>
    <tr>
    <input TYPE="TEXT" onfocus="this.value='';" SIZE="42" NAME="chiave" value="inserisci una o due parole chiave"><input TYPE="submit" ACTION="result.php" VALUE="cerca" METHOD="get" NAME="search">
    </tr>
    </table>
    </form>

    e file "result.php":
    $stringa = "<table border=\"1\"><tr><td valign=\"top\" style=\"color:red\">N</td><td valign=\"top\" style=\"color:red\">AUTORE</td><td valign=\"top\" style=\"color:red\">TITOLO</td><td valign=\"top\" align=\"center\" style=\"color:red\">ANNO</td><td valign=\"top\" align=\"center\" style=\"color:red\"></td><td valign=\"top\" align=\"center\" style=\"color:red\"></td></tr>";
    $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");
    $sql="SELECT * FROM articoli WHERE ";
    $where="";
    // elimina gli spazi prima e dopo la parola cercata
    $str=strip_tags(trim($_POST['chiave']));
    // fine
    // evidenzia la parola cercata
    $search = explode(" ", trim($_POST['chiave']));
    for ($i=0; $i<count($search); $i++)
    $search[$i] = "/(".trim($search[$i]).")/i";
    // fine
    // esplode le parole cercate mettendole in un array
    $words=explode(" ",$str);
    // fine
    while (list($key,$value) = each($words)) {
    $words[$key] = "{$_POST['criterio']} LIKE '%". $words[$key] ."%'";
    }
    $where = implode(" AND ", $words);
    $result = mysql_query($sql.$where, $db);
    // conteggia i risultati
    $num_righe=mysql_num_rows($result);
    echo"Ricerca per: {$_POST['criterio']}
    ";
    echo"Chiave di ricerca: $chiave
    ";
    echo"Risultati: $num_righe

    ";
    // fine
    $i = 0;
    while ($row=mysql_fetch_array($result))
    {
    $i++;
    $stringa .= "<tr><td valign=\"top\">$row[N]</td><td valign=\"top\">$row[AUTORE]</td><td valign=\"top\">$row[TITOLO]</td><td valign=\"top\"align=\"center\">$row[ANNO]</td><td valign=\"top\"align=\"center\"><a href=\"view.php?N=$row[N]\" title=\"Dettagli\" class=\"link_libro\"><img border=0 width=45 height=25 src=\"icona dettagli.gif\"></a></td><td valign=\"top\"align=\"center\"><a href=\"indexposta.php?N=$row[N]\" title=\"Acquista\"><img border=0 width=35 height=25 src=\"icona order.gif\"></a></td>";
    // rimpiazza la parola cercata con la stessa parola ma evidenziata
    foreach ($search as $k) {
    if (strlen(ereg_replace("/\((.*)\)/","\\1", $k)) > 3) {$stringa = preg_replace($k,"<span style='color:yellow'>\\1</span>",$stringa);}}
    // fine


    vorrei che quando un utente cerca un parola chiave selezionando come criterio di scelta il campo "titolo", il motore cercasse anche in un ulteriore campo denominato "descrizione".-
    E' possibile ??
    Ringrazio
    Pier Mario

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    una query del genere non è sufficiente?

    select * from articoli where titolo like '%testo%' or descrizione like '%testo%';

  3. #3
    Sarebbe sufficiente se lo script fosse molto più semplice....

  4. #4
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Visto cosi' non sembra difficile. Io di solito faccio cosi':
    Prima di eseguire la query compongo i pezzi con elle variabili del tipo:
    Codice PHP:
    if($_POST['ricerca']== "titolo"){
    $where "where titolo = '$parola_chiave'";

    Poi la metto nella query:
    Codice PHP:
    $select "SELECT * FROM tabella".$where;
    ..... 
    Fai dei controlli prima e componi i pezzi della query.

  5. #5
    Lo farei ma mi hanno dato una mano nel creare l'intero script, da solo non sarei mai stato in grado, lo ammetto.-

  6. #6
    scusate...ma scomporre in stringhe la query non crea problemi di lettura ad un estraneo? Io trovo molto più semplice lasciare sempre le query come mysql comanda e sostituendo solo le parti che necessitano input da pagina.

    SELECT * FROM $table WHERE codice='$code'

    mica

    $criterio="WHERE codice='$code'
    SELECT * FROM $table $criterio

    se no rischi che se formi la query in punti diversi della pagina non ti ci ritrovi più...e poi c'è una regola d'oro da ricordarsi anche quando cerchiamo di fare codici complessi perchè abbiamo bisogno di uno specifico risultato complesso...dobbiamo sempre semplificare al massimo. remember!


  7. #7
    Riconosco sia semplice procedere inserendo un'altra riga del tipo:
    <input TYPE="radio" NAME="criterio" VALUE="condizioni">
    ma voglio evitarla in quanto desidero che qualora un utente cerca nel campo "titolo" vengano cercato contemporaneamente nel campo "condizioni".-

  8. #8
    Qualche idea ?

  9. #9

  10. #10
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Potresti usare uno switch in questo modo a seconda delle condizioni(non so com'e' impostato lo strumento di ricerca):

    Penso tu abbia un valore da selezionare e quindi determina dove cercare(titolo, nome, data ect..).
    Prova cosi' se ti e' comodo:
    Codice PHP:
    switch($condizione_ricerca){
    case 
    'nome':
    $select "select * from tabelle where nome='$parolaChiave'";
    break;
    case 
    'titolo':
    $select "select * from tabella where titolo='$parolaChiave' or condizioni='$parolaChiave'";
    break;
    default:
    $select...';

    http://it.php.net/manual/it/control-...res.switch.php

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 © 2025 vBulletin Solutions, Inc. All rights reserved.