Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118

    Query per ricerca nel database

    Salve a tutti.

    Ho un form che effettua una ricerca degli immobili nel database, ma ho una problematica.
    Posto lo script per essere piu chiaro:

    ...
    $prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
    $prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;
    if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
    }
    if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= " AND prezzo BETWEEN {$prezzoA} AND {$prezzoDA}";
    } else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= " AND prezzo >= {$prezzoDA}";
    } else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= " AND prezzo <= {$prezzoA}";
    }
    ...

    Ho i campi nel form "prezzoDA" e "prezzoA" che l'utente che effettua la ricerca inserisce.
    Il problema è che se inserisce la cifra con il puntino separatore delle migliaia (es. 150.000) la ricerca non funziona correttamente, mentre se inserisce la cifra per intero (es. 150000) funziona correttamente.

    La mia domanda è:
    Come ovviare a questo?
    Avevo pensato a fare un menu a tendina per il prezzo:

    da 0 a 100.000
    da 100.000 a 200.000

    ma non ho idea di come agire sullo script.
    grazie per eventuali risposte.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao gahan,
    potresti provare ad usare la str_replace
    sulla variabile $prezzo prima di eseguire la query:

    $prezzoDA = str_replace(".","",$prezzoDA);
    $prezzoA = str_replace(".","",$prezzoA);

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118
    Ciao arkus,
    grazie per aver risposto, ma purtroppo anche inserendo le righe di codice da te proproste, la ricerca non funziona correttamente.

    Qualche altra idea?

    Grazie.

  4. #4
    Prova a cambiare str_replace con eregi_replace.

    Così dovrebbe funzionare

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118
    Originariamente inviato da gahan
    Ciao arkus,
    grazie per aver risposto, ma purtroppo anche inserendo le righe di codice da te proproste, la ricerca non funziona correttamente.

    Qualche altra idea?

    Grazie.
    Grazie per aver risposto, ma purtroppo ancora niente.

    Nel momento in cui vado a fare la ricerca dal form apposito, se inserisco i prezzi

    da 150.000 a 200.000

    mi visualizza anche quelli di 250.000 e superiori.

    Se invece nel form di ricerca non metto il puntino e quindi:

    da 150000 a 200000

    tutto funziona correttamente.

    Altre idee?

    Grazie ancora per la disponibilità.

  6. #6
    I range di prezzi come li inserisci?

    Hai delle select preimpostati?

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118
    Originariamente inviato da Samleo
    I range di prezzi come li inserisci?

    Hai delle select preimpostati?
    ti posto lo script completo :

    <?php
    include("connessione.php");
    $stringa=$_POST[stringa];
    if (!$stringa or $stringa==""){
    echo "<font face=\"arial\" size=\"2\">E' necessario specificare la/le parola/parole da cercare
    <a href=\"javascript:history.back()\">indietro</a></font>";
    exit();
    }
    $cn=mysql_connect($host,$uid,$pw);
    mysql_select_db($db,$cn);
    $sql="SELECT * FROM $tabella WHERE ";
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="titolo LIKE '%$lista_parole[$i]%' OR ";
    }
    $str=substr($str,0,(strlen($str)-3));
    $sql.=$str;

    $prezzoDA = eregi_replace(".","",$_POST['prezzoDA']);
    $prezzoA = eregi_replace(".","",$_POST['prezzoA']);

    $prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
    $prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;
    if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
    }
    if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= " AND prezzo BETWEEN {$prezzoA} AND {$prezzoDA}";
    } else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= " AND prezzo >= {$prezzoDA}";
    } else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= " AND prezzo <= {$prezzoA}";
    }

    $mqDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['mqDA'] )) ? $_POST['mqDA'] : 0;
    $mqA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['mqA'] )) ? $_POST['mqA'] : 0;
    if ($mqA > $mqDA) {
    $mqA = $mqDA;
    }
    if ($mqDA > 0 && $mqA > 0) {
    $sql .= " AND mq BETWEEN {$mqA} AND {$mqDA}";
    } else if ($mqDA > 0 && $mqA <= 0) {
    $sql .= " AND mq >= {$mqDA}";
    } else if ($mqDA <= 0 && $mqA > 0) {
    $sql .= " AND mq <= {$mqA}";
    }

    $local=$_POST[loc];
    $par_cit=explode(" ",$local);
    for($u=0;$u<count($par_cit);$u++)
    {
    $sql .=" AND citta LIKE '%$par_cit[$u]%'";
    }


    $sql.=" ORDER BY id";
    $query=mysql_db_query($db,$sql);
    $num=mysql_num_rows($query);

    $query=mysql_db_query($db,$sql);
    $num=mysql_num_rows($query);
    ?>

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Originariamente inviato da gahan
    ti posto lo script completo :

    <?php
    #1
    $prezzoDA = eregi_replace(".","",$_POST['prezzoDA']);
    $prezzoA = eregi_replace(".","",$_POST['prezzoA']);

    #2
    $prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
    $prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;

    ?>
    con la seconda assegnazione delle variabili $prezzo annulli la prima assegnazione dei prezzi privati del punto, quindi è come se tu non facessi la eregi_replace

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118
    Originariamente inviato da arkus
    con la seconda assegnazione delle variabili $prezzo annulli la prima assegnazione dei prezzi privati del punto, quindi è come se tu non facessi la eregi_replace
    Niente...continua a non funzionare

    $preDA = eregi_replace(".","",$_POST['prezzoDA']);
    $preA = eregi_replace(".","",$_POST['prezzoA']);

    $prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $preDA)) ? $preDA : 0;
    $prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $preA)) ? $preA : 0;
    if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
    }
    if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= " AND prezzo BETWEEN {$prezzoA} AND {$prezzoDA}";
    } else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= " AND prezzo >= {$prezzoDA}";
    } else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= " AND prezzo <= {$prezzoA}";
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    118
    Allora...

    credo di aver risolto grazie al consiglio di arkus, ovvero con la funzione str_replace

    grazie mille

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.