Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208

    Differenziare select motore di ricerca "Inizia per", "contiene" e "finisce per"

    Salve a tutti,
    sto puntualizzando un piccolo motore di ricerca seguendo tra gli altri anche i criteri di ricerca classici che ho elencato in oggetto.

    un pò di codice:



    Questo è il codice che regola la select dei criteri tramite array e foreach
    Codice PHP:
    private $compare = array(
            
    "uguale a" => "=",
            
    "diverso da" => "NOT LIKE",
            
    "minore di" => "<",
            
    "maggiore di" => ">",
           
    "minore di o uguale a" => "<=",
            
    "maggiore di o uguale a" => ">=",
            
    "contiene" => 'LIKE',
            
    "inizia con" => "LIKE"
            
    );

    echo 
    "<select name=voce$var size=1>";

                
    //le varie option
                
    foreach ($compare as $num => $val) {
                    echo 
    "<option value=$val>$num</option>";
                }
                echo 
    "</select>"
    Questo è il controllo che eseguo nella classe, $this->voce è il campo da cercare, $this->comparazione1 è il criterio, $this->input è la stringa da cercare:
    Codice PHP:
    if (isset($_POST['input1'])) {
                if (
    $_POST['comparazione1'] == 'LIKE') {
                    
    $query .= " AND " $this->voce1 " " $this->comparazione1 " '$this->input1%'";                          } else{
                    
    $query .= " AND " $this->voce1 " " $this->comparazione1 " '$this->input1'";
                }  
          } 
    Il punto è che come si può notare dall'array, per "inizia per", "contiene" e "finisce per", la parola chiave nell'array da passare per comporre la query è sempre "LIKE", mentre la regexp da settare in realtà è diversa per ciascuno dei tre criteri è ben diversa.

    Vorrei capire: secondo voi come posso discernere l'input giusto avendo lo stesso value di riferimento nella SELECT?

    Grazie mille!

    P.S per chiarire, non ho ancora utilizzato il termine REGEXP nella query, ma è proprio la trasformazione che mi accingo a fare.
    Ultima modifica di Korenaar; 16-07-2014 a 12:07

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Con il codice che hai postato farei cosi

    Codice PHP:
    <?php 
    private $compare = array(
            
    "uguale a" => "=",
            
    "diverso da" => "NOT LIKE",
            
    "minore di" => "<",
            
    "maggiore di" => ">",
           
    "minore di o uguale a" => "<=",
            
    "maggiore di o uguale a" => ">=",
            
    "contiene" => 'LIKE',
            
    "inizia con" => "ILIKE"
        "finisce per" 
    => "FLIKE"
            
    );
    echo 
    "<select name=voce$var size=1>";
                
    //le varie option
                
    foreach ($compare as $num => $val) {
                    echo 
    "<option value=$val>$num</option>";
                }
                echo 
    "</select>";  
     
    ?>
     
     <?php 
     
    if (isset($_POST['input1'])) {
                if (
    $_POST['comparazione1'] == 'LIKE') {
                    
    $query .= " AND " $this->voce1 " " $this->comparazione1 " '%$this->input1%'";                          
          } else{
             if (
    $_POST['comparazione1'] == 'ILIKE') {
              
    $query .= " AND " $this->voce1 " " " LIKE " " '%$this->input1'"
            } else {
               if (
    $_POST['comparazione1'] == 'FLIKE') {
                
    $query .= " AND " $this->voce1 " " " LIKE "" '$this->input1%'"
              } else {          
                       
    $query .= " AND " $this->voce1 " " $this->comparazione1 " '$this->input1'";
             }
            }
                }  
          }  
     
    ?>
    Pero' se dovessi fare una cosa simile farei altimenti. Posso sbagliare, ma il tuo codice mi sembra vulnerabile alla sql injection.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Stanotte alle 2 in un momento di insonnia ho avuto la folgorazione, per curiosità ho aperto il forum e ho visto che mi avevi dato la stessa risposta. Ero mentalmente legato al valore dell'array, senza pensare che è semplicemente un valore di riferimento per la comparazione....certe volte mi perdo in un bicchier d'acqua.

    Ascolta a questo punto, riguardo la questione dell'sql injection ti do ragione, si usano le prepared statement per le query, ma non le ho assimilate ancora al punto da costruire dinamicamente query di questo tipo, tant'è che sto trasformando le varie query sparse a mano a mano che miglioro sotto questo aspetto. Per il momento a tuo parere mi basta passare gli input in mysqli_real_escape_string? e nel fare questo non vado ad inficiare i risultati delle select a db? trattandosi di un motore di ricerca, se questo accade mi sfalsa tutti i risultati.

    Grazie mille intanto!

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.