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

    ricerca su database con LIKE

    Salve,
    ho cercato un argomento simile a questo che sto per postare, ma non sono riuscito a trovare niente.
    Quindi, devo fare una ricerca su un database. Dovrebbe funzionare così: ho i tutti i risultati della ricerca, e in altro l'input text per la ricerca. Quando si scrive dentro questo input, carica la funzione cerca() che si ricollega ad uno script php che effettua la ricerca sul database in base alle informazioni inserite nel campo. La ricerca dovrebbe funzionare con parole simili al contenuto dei record nel database, se ad esempio inserisco ca, mi deve dare come risultato tutti i record che hanno nel campo articolo le lettere ca.
    il mio codice è questo:
    Codice PHP:
    $cerca $_GET['cerca'];
      if(!(
    $cerca)){
        
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto` ORDER BY `prodotto`.`nome` ASC LIMIT 0, 30 ';
      }else{
        echo 
    "Risultati trovati: ";
        
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto`  WHERE `prodotto`.`articolo` LIKE `% '.$cerca .'%` ';
      } 
    Questa funziona solo in parte, infatti se nella casella cerca non c'è niente, mi fa vedere tutti i record presenti nel database, altrimenti se c'è scritto qualcosa, mi da solo l'echo Risultati trovati: e nessun risultato sotto. Qualcuno può aiutarmi?
    Grazie, ciao!

  2. #2
    Codice PHP:
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto`  WHERE `prodotto`.`articolo` LIKE `% '.$cerca .'%` '
    " LIKE `% '.$cerca .'%` ';"
    c'è uno spazio tra % e '.

    qualsiasi stringa tu vada a ricercava diventa: "% stringa%" e quindi ti da come risultati tutti i record che contengono si la stringa, ma precededuta da uno spazio.

    Poi ti consiglierei di eliminare tutti i ` nelle query e di utilizzare le " per contenere la seconda query.
    Il risultato finale non dovrebbe cambiarti ma almeno hai (secondo me) un codice molto più pulito e più a prova di errore.

    Codice PHP:
    $cerca $_GET['cerca'];
      if(!(
    $cerca)){
        
    $q 'SELECT img, articolo, nome, collezione, descrizione FROM prodotto ORDER BY nome ASC LIMIT 0, 30 ';
      }else{
        echo 
    "Risultati trovati: ";
        
    $q "SELECT img, articolo, nome, collezione, descrizione FROM prodotto  WHERE articolo LIKE '%" .$cerca ."%' ";
      } 
    Edit:
    Ed invece no, l'uso di ` che hai fatto nel like è errato.
    Hai una gestione di errori sull'esecuzione della query?
    Se si dovresti trovarti un errore a video sull'uso dei `.
    Questo carattere (almeno sul mio ) mi da errore in quanto è "riservato" per i nomi delle colonne e non come identificatore di stringhe.

  3. #3
    Quando si verifica l'evento e viene caricato lo script (cioè quando riempio il campo cerca) come errore mi esce questo:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/gestione4A/cerca.php on line 21

    posto tutto il codice così è più chiaro:

    Codice PHP:
    <?php
      $host 
    = **;
      
    $user = **;
      
    $password = **;
      
    $database = **;

      
    $connessione=mysql_connect($host,$user,$password);
      
    mysql_select_db($database);

      
    $cerca $_GET['cerca'];
      if(!(
    $cerca)){
        
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto` ORDER BY `prodotto`.`nome` ASC LIMIT 0, 30 ';
      }else{
        echo 
    "Risultati trovati: ";
        
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto`  WHERE `prodotto`.`articolo` LIKE `%'.$cerca.'%` ';
      }

      
    $recset mysql_query($q);

      echo 
    "<table id='elenco' cellspacing='0px' cellpadding='5px'>";
      while(
    $tr mysql_fetch_array($recset)){
        echo 
    "<tr><td style='width:120px; border-bottom:0px solid #000'>[img]"$tr[[/img]</td>";
        echo "
    <td  style='width:200px; border-bottom:0px solid #000'><class='tit'>Collezione: [/b]<b style='color:red'>", $tr['collezione'], "[/b]
    ";
        echo "
    <class='tit'>Art.: [/b]<b style='color:#99004D'>", $tr['articolo'], "[/b]
    ";
        echo "
    <class='tit'>Nome: [/b]<b style='color:#009900'>", $tr['nome'], "[/b]</td>";
        echo "
    <td class='tit'>Strappo - [url='#']17mm[/url] [url='#']22mm[/url] [url='#']32mm[/url]
    Corda - [url='#']17mm[/url] [url='#']22mm[/url] [url='#']32mm[/url]
    Pacchetto - [url='#']17mm[/url] [url='#']22mm[/url] [url='#']32mm[/url]</td></tr>";
      }
      echo "
    </table>";
      mysql_close(
    $connessione);
    ?>
    se non sbaglio l'errore sta sulla query, cioè non è scritta bene....

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Poi ti consiglierei di eliminare tutti i ` nelle query e di utilizzare le " per contenere la seconda query.
    Puoi elaborare?
    Non conosco alcuna controindicazione nell'usare i backticks (`), anche se in questo particolare esempio non sono necessari.

    C'è invece una differenza fra usare gli apici e le virgolette in PHP (la stringa tra apici viene processata più velocemente rispetto a quella fra virgolette). Quindi direi di usare gli apici e usare le virgolette dopo LIKE.

    Codice PHP:
    $q 'SELECT img, articolo, nome, collezione, descrizione FROM prodotto  WHERE articolo LIKE "%' .$cerca .'%" '

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    @peppeocchi:

    Questa riga è sbagliata

    Codice PHP:
    $q 'SELECT `img`, `articolo`, `nome`, `collezione`, `descrizione` FROM `prodotto`  WHERE `prodotto`.`articolo` LIKE `%'.$cerca.'%` '
    Perchè attorno alla parola da cercare metti dei `, invece dovresti mettere degli apici o delle virgolette, come ti abbiamo detto sopra.

    Comunque quando ricevi un errore del genere un:

    Codice PHP:
    echo mysql_error(); 
    può aiutare.

  6. #6
    Grande!! Funzione! Mille grazie!
    Il fatto è che ho studiato mysql 5 anni fa, e ho ripreso solo da qualche giorno a metterci mano. Infatti userò molto spesso questo forum, almeno per ora!!
    Grazie ancora!

  7. #7
    Originariamente inviato da nICO80
    Puoi elaborare?
    Non conosco alcuna controindicazione nell'usare i backticks (`), anche se in questo particolare esempio non sono necessari.
    si esatto, non ci sono controindicazioni particolari.

    Ma ad un "principiante" (soprattutto all'inizio) ho sempre consigliato di togliere di mezzo tutto ciò che è superfluo e che può portarlo in errore/crearli confusione.

    Capita spesso infatti che nelle query vengano mescolati apici e backticks pensando che siano la medesima cosa e non riuscire più a capire dove sta l'errrore.

    Questo sempre secondo il mio parere.



    Originariamente inviato da nICO80
    C'è invece una differenza fra usare gli apici e le virgolette in PHP (la stringa tra apici viene processata più velocemente rispetto a quella fra virgolette). Quindi direi di usare gli apici e usare le virgolette dopo LIKE.

    Codice PHP:
    $q 'SELECT img, articolo, nome, collezione, descrizione FROM prodotto  WHERE articolo LIKE "%' .$cerca .'%" '
    Si certo, le " sono processate più lentamente rispetto agli '.

    Gli avevo suggerito l'uso degli " per ovviare all'uso di \' all'interno della query (sul momento non m'era venuto in mente di poter utilizzare le " come delimitatore di testo all'interno della query delimitata da ')

    Ad esempio poteva pure optare per la seguente forma per scrivere la query:
    Codice PHP:
    $q "SELECT img, articolo, nome, collezione, descrizione FROM prodotto  WHERE articolo LIKE '%$cerca%' "
    Infatti nei testi delimitati da " vengono risolte anche le variabili ivi contenute.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    si esatto, non ci sono controindicazioni particolari. Ma ad un "principiante" (soprattutto all'inizio) ho sempre consigliato di togliere di mezzo tutto ciò che è superfluo e che può portarlo in errore/crearli confusione. Capita spesso infatti che nelle query vengano mescolati apici e backticks pensando che siano la medesima cosa e non riuscire più a capire dove sta l'errrore.
    Ah, OK! Pensavo ci fosse qualche oscuro motivo che mi sfuggiva!!!

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.