Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [MySQL Motore di Ricerca] due WHERE contemporaneamente

    ho la seguente query che genera errore

    Codice PHP:
    while (list(,$parola)=each($keys))
        {
            
    $parola trim($parola);
            if (
    $parola !=""$query.="materiale LIKE '%$parola%' OR descrizione LIKE '%$parola%' OR ";
        }
        
    $query .="0";
        
        
    $query "SELECT id,categoria,materiale,data,descrizione FROM materiali [B]WHERE categoria="$categoria"[/B]  WHERE ".$query
    insomma si tratta di un elementare motore di ricerca che prende le parole da un form e fa una ricerca. Per le parole nessun problema (la guida di html.it è molto dettagliata) ma quando cerco di mettere un filtro per la colonna categoria lo script si pianta!

    i filtri sono 4: "categoria1","categoria2","categoria3","*"

    l'ultimo (solo ad intuito) servirebbe per uscire dal filtro e fare la select su tutte le categorie
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  2. #2
    Togli il secondo where e metti un AND oppure un OR

  3. #3
    ci sono 2 errori; il primo è di concatenazione di stringhe, il secondo è invece di pura sintassi SQL, non puoi mettere 2 WHERE nella stessa query, ma metti più condizioni concatenate fra loro con OR o AND.

    prova così:

    codice:
    $where_clause = '';
    while (list(,$parola)=each($keys)) { 
      $parola = trim($parola); 
      if ($parola !="")
        $where_clause .= "materiale LIKE '%".$parola."%' OR descrizione LIKE '%".$parola."%' OR "; 
    } 
    $where_clause .= "1=1"; 
         
    $query = "SELECT id,categoria,materiale,data,descrizione FROM materiali WHERE categoria=".$categoria." AND (".$where_clause.")";
    spero non ci siano errori di sintassi anche nel mio perché l'ho scritto di botto

    comunque se ci sono problemi posta!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    si, ho inserito un AND ma cercando termini presenti in categoria2, pur selezionando termini presenti solo in categoria1, fa la lista dei termini in categoria1. Insomma la differenza tra categoria non funziona
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  5. #5
    [supersaibal]Originariamente inviato da 13manuel84
    ci sono 2 errori; il primo è di concatenazione di stringhe, il secondo è invece di pura sintassi SQL, non puoi mettere 2 WHERE nella stessa query, ma metti più condizioni concatenate fra loro con OR o AND.

    prova così:

    codice:
    $where_clause = '';
    while (list(,$parola)=each($keys)) { 
      $parola = trim($parola); 
      if ($parola !="")
        $where_clause .= "materiale LIKE '%".$parola."%' OR descrizione LIKE '%".$parola."%' OR "; 
    } 
    $where_clause .= "1=1"; 
         
    $query = "SELECT id,categoria,materiale,data,descrizione FROM materiali WHERE categoria=".$categoria." AND (".$where_clause.")";
    spero non ci siano errori di sintassi anche nel mio perché l'ho scritto di botto

    comunque se ci sono problemi posta! [/supersaibal]

    ad essere sincero non ci capisco un granchè. L'errore di codice SQL l'ho capito ma quello sulla concatenazione di stringhe no. . .cosa sbaglio?
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  6. #6
    tu hai scritto così:

    $query = "SELECT id,categoria,materiale,data,descrizione FROM materiali WHERE categoria="$categoria" WHERE ".$query;

    mentre invece per concatenare una stringa con variabili php devi scrivere così:
    $query = "SELECT id,categoria,materiale,data,descrizione FROM materiali WHERE categoria=".$categoria." WHERE ".$query;

    devi quindi usare il punto; avevi scritto giusta la concatenazione di $query, in fondo, ma avevi sbagliato quella di $categoria in mezzo...

    altro suggerimento, quando esegui la query, eseguila sempre aggiungendo la notazione dell'errore, così se c'è qualche errore SQL te lo stampa subito:

    codice:
    mysql_query($query)or die(mysql_error());
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  7. #7
    i problemi sono due (ma sempre i soliti!)

    Codice PHP:

    <?
        
    include ('config.inc.php');

        
    //connessione a MySQL
        
    $db mysql_connect($db_host,$db_user,$db_password);
        
    //verifica se la connessione è andata a buon fine
        
    if ($db==FALSE) die("Errore nella connessione a MySQL");
        
    //connessione al database specifico
        
    mysql_select_db($db_name,$db)
        or die(
    "Errore nella selezione del database");

        
    //prendo i dati dal form
        
    $categoria $_POST['categoria'];
        
    $chiave $_POST['chiave'];
        if(isset(
    $chiave)==FALSE OR $chiave==""$chiave="*";
        
        
    //divido la stringa chiave in parole e le inserisco nell'array keys
        
    $keys explode(" ",$chiave);
        
        
    //Creo la query
        
    $query"";
        
        
    reset($keys);
        
        while (list(,
    $parola)=each($keys))
        {
            
    $parola trim($parola);
            if (
    $parola !=""$query.="materiale LIKE '%$parola%' OR descrizione LIKE '%$parola%' OR ";
        }
        
    $query .="0";
        
        
    $query "SELECT id,categoria,materiale,data,descrizione FROM materiali WHERE categoria='".$categoria."' AND ".$query;
        
        
    //invio la query
        
    $result mysql_query($query,$db) or die(mysql_error());
        while (
    $row mysql_fetch_array($result))
        {
            echo (
    "<a href=\"view.php?id=$row[id]\">"." - $row[materiale]</a>
    "
    );
        }
        
                    
                
    ?>
    quando cerco una substring presente in celle di più categorie se ne frega del WHERE e tira fuori l'elenco di tutte le categorie!!!!

    e quindi (problema 2) non so se funziona il sistema per cercare in tutte le categorie
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  8. #8
    nessuno mi sa aiutare?
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  9. #9
    [supersaibal]Originariamente inviato da MicheleWT
    nessuno mi sa aiutare? [/supersaibal]
    Stampa la query che invii.. e vedrai da te la ragione. L'uso dell'OR puo' portare ad estrarre tutta la tabella.

    echo $query;

    non si puo' ricavare nulla di reale leggendo solo delle variabili, ma solo supposizioni.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    si ho capito il problema, ma come lo risolvo?
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

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.