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

    Aiuto su motore di ricerca interno

    buongiorno e buona domenica.
    sto realizzando un piccolo motore di ricerca interno con la possibilità di ricercare in più campi:
    -titolo
    -testo
    -sezione
    -categoria

    ho creato un piccolo form:
    Codice PHP:
        <form name="articoli" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
            <table>
                <tr>
                    <td>[b]Cerca in:[/b]</td>
                    <td></td>
                </tr>
                <tr>
                    <td>Titoli:</td>
                    <td><input type="checkbox" name="titolo" value="ON" /></td>
                </tr>
                <tr>
                    <td>Testo:</td>
                    <td><input type="checkbox" name="testo" value="ON" /></td>
                </tr>
                <tr>
                    <td> Sezioni:</td>
                    <td><input type="checkbox" name="sezione" value="ON" /></td>
                </tr>
                <tr>
                    <td>Categorie:</td>
                    <td><input type="checkbox" name="categoria" value="ON" /></td>
                </tr>
                <tr>
                    <td>
                        <input type="text" name="cerca" value="" size="50" />
                    </td>
                    <td>
                        <input type="submit" value="Cerca" name="btn_cerca" />
                    </td>
                </tr>
            </table>
        </form>
    poi farei un funzione di ricerca del genere:
    Codice PHP:
    function cercaArticolo($var) {
        global 
    $config;
        try {
            
    $result $config->getPdo()->query("SELECT........
                WHERE articoli.pubblicato = 1
                AND (articoli.articolo_titolo LIKE '%" 
    $var "%' OR articoli.articolo_testo LIKE '%" $var "%' OR sezioni.sezione_nome LIKE '%" $var "%' 
                OR categorie.categoria_nome LIKE '%" 
    $var "%') ORDER BY articolo_data DESC");
            return 
    $result;
        } catch (
    Exception $e) {
            die(
    $e->getMessage());
        }

    a parte il fatto che nn so se sto sulla strada giusta, ma in caso come potrei dirgli di attivare solo i LIKE corrispondenti alle checkbox selzionate??

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    La query va piu che bene, per i vari campi se aggiungerli oppure non controlli il rispettivo valore nall'array $_POST se è settato aggiungi il relativo LIKE.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    eccomi, scusa il ritardo.
    nn ho capito bene una cosa.
    io devo controllare se la checkbox è ceccata.
    se è ceccata attivare il relativo LIKE.
    quindi nella pagina:
    Codice PHP:
        <?php
        
    if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_cerca'])) {
            if (isset(
    $_POST['titolo'])) {

            }
            if (isset(
    $_POST['testo'])) {

            }
            if (isset(
    $_POST['sezione'])) {

            }
            if (isset(
    $_POST['categoria'])) {

            }
            foreach (
    cercaArticolo($_POST['text']) as $art) {
                echo 
    '<div class="art_home">';
                echo 
    '<p class="sezione">[b]' $art['sezione'] . '[/b]</p>';
                if (
    $art['articolo_img'] != NULL) {
                    echo 
    '

    [img]' 
    $art['articolo_img'] . '[/img]</p>';
                } else {
                    echo 
    '

    [img]img_testata/logo.png[/img]</p>'
    ;
                }
                echo 
    '

    [b]' 
    $art['articolo_titolo'] . '[/b]</p>';
                echo 
    troncaTesto($art['articolo_testo']);
                echo 
    '</div>';
            }
        }
        
    ?>
    se sono ceccati cosa passo alla funzione per dirgli di aggiungere il relativo LIKE??

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    fai una cosa del genere :
    codice:
    <?php
    
    $query = "SELECT * FROM tab_articolo";
    
    $where = array();
    if(isset($_POST['titolo'])){
    	$where[] = "articoli.articolo_titolo LIKE '%" . $var . "%'";	
    }
    
    if(isset($_POST['testo'])){
    	$where[] = "articoli.articolo_testo LIKE '%" . $var . "%'";	
    }
    
    if(count($where) > 0){
    	if(isset($_POST['allwords']))
    		$s = ") AND (";
    	else
    		$s = ") OR (";
    	$query .= " WHERE (".implode($s,$where).")";
    }
    echo $query;
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    il problema però è che la query la faccio in una funzione, nn direttamente nella pagina.
    nella pagina richiamo solo quella funzione.
    quindi, oltre al valore della textbox, cosa gli posso passare alla funzione per attivare gli altri LIKE?
    Codice PHP:
    function cercaArticolo($var) {
        global 
    $config;
        
    $cmd "SELECT articoli.articolo_id, articoli.autore_FK, articoli.sezione_FK, articoli.categoria_FK, articolo_titolo, autori.autore_nome AS autore, 
                articolo_testo, articolo_data, sezioni.sezione_id, sezioni.sezione_nome AS sezione, categorie.categoria_id, categorie.categoria_nome AS categoria, tags
                FROM articoli
                INNER JOIN autori ON articoli.autore_FK = autori.autore_id
                INNER JOIN sezioni ON articoli.sezione_FK = sezioni.sezione_id
                INNER JOIN categorie ON articoli.categoria_FK = categorie.categoria_id
                WHERE articoli.pubblicato = 1
                AND (articoli.articolo_titolo LIKE '%" 
    $var "%' OR articoli.articolo_testo LIKE '%" $var "%' OR sezioni.sezione_nome LIKE '%" $var "%' 
                OR categorie.categoria_nome LIKE '%" 
    $var "%') ORDER BY articolo_data DESC";
        echo 
    "SQL: " $cmd;
        try {
            
    $result $config->getPdo()->query($cmd);
            return 
    $result;
        } catch (
    Exception $e) {
            die(
    $e->getMessage());
        }


  6. #6
    Una delle migliori pillole che ho letto su questo argomento: pillola
    Ma non usa l'operatore LIKE.
    Se sei all'inizio forse conviene usare "like", ma dai uno sguardo alla pillola, non è difficile da capire e applicare. (E' molto più efficace questo tipo di ricerca spiegato nella pillola).

  7. #7
    si conosco full-text, ma il problema è che sezione e categoria sono delle FK, quindi valori numerici.
    da quanto ne so nn posso metterli come indici FULLTEXT.
    cmq il link mi è utile anche per il LIKE.
    provo a prendere spunto da la.
    grazie.

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.