Avatar billede hypofysen Nybegynder
09. juni 2008 - 14:10 Der er 12 kommentarer og
1 løsning

problemer med søgefunktion

Jeg har denne søgefunktion men alle felter skal udfyldes før det giver et resultat. Hvordan gør jeg sådan at den udskriver et resultat hvis kun det er de første 2 felter der udfyldt?

<?php
    if(isset($_POST['submit'])) {
        $searchfra = addslashes($_POST['optfra']);
        $searchtil = addslashes($_POST['opttil']);
        $model = addslashes($_POST['model']);
       
            $query = mysqli_query($conn,"select * from brugte_biler where pris >'".$searchfra."'and pris <'".$searchtil."' and model = '".$model."'order by pris desc");
           
                echo "Resultatet af din søgning<br /><br />";
                   
                    while($result=mysqli_fetch_array($query)){
                        echo $result['pris']."<br /><br />";
                        echo $result['model'];
                        };};



?>
Avatar billede w13 Novice
09. juni 2008 - 14:49 #1
Hvis du retter:

            $query = mysqli_query($conn,"select * from brugte_biler where pris >'".$searchfra."'and pris <'".$searchtil."' and model = '".$model."'order by pris desc");

til:

            $query = mysqli_query($conn,"select * from brugte_biler where pris >'".$searchfra."' or pris <'".$searchtil."' or model = '".$model."' order by pris desc");

behøver alle felter ikke være udfyldt.
Avatar billede hypofysen Nybegynder
09. juni 2008 - 15:54 #2
nej men på den måde får jeg heller de rigtige resultater frem! der henter den stort set alt fra min database!

Det skal gerne være sådan at hvis man ikke vælger en pris fra/til men blot en model så skal alle valgte modeller vises
Avatar billede w13 Novice
09. juni 2008 - 16:25 #3
Prøv at udskrive:
"select * from brugte_biler where pris >'".$searchfra."'and pris <'".$searchtil."' and model = '".$model."'order by pris desc"
Avatar billede hypofysen Nybegynder
09. juni 2008 - 17:53 #4
så kommer det rigtige resultat når alle felter er udfyldt
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:00 #5
Du har vel ikke gemt dine priser i et varchar felt i databasen ??
Ellers bør du med det samme lave det om til en float eller int og så har du ikke brig for ' i din sql.
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:11 #6
Men lige et forslag til din kode:

<?php
    if(isset($_POST['submit'])) {
        if( !empty($_POST['optfra'])){
            $sqlparts[] = "pris > '".addslashes($_POST['optfra'])."'";
        }
        if( !empty($_POST['opttil']) ){
            $sqlparts[] = "pris < '".addslashes($_POST['opttil'])."'";
        }
        if( !empty($_POST['model']) ){
            $sqlparts[] = "model = '".addslashes($_POST['model'])."'";
        }
        $sqlsearch = implode(" and ", $sqlparts);

            $query = mysqli_query($conn,"select * from brugte_biler where $sqlsearch order by pris desc");
         
                echo "Resultatet af din søgning<br /><br />";
                 
                    while($result=mysqli_fetch_array($query)){
                        echo $result['pris']."<br /><br />";
                        echo $result['model'];
                        };};



?>
Avatar billede hypofysen Nybegynder
09. juni 2008 - 18:20 #7
hmm der er noget der tyder på jeg har lavet en fejl et sted, men hvor... Den kode kan jeg heller ikke få til at virke udskriver ingenting overhovedet.

min pris er sat til int(11) og model er sat til varchar(255)
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:27 #8
så bør din sql være uden ' omkring dine priser:
<?php
    if(isset($_POST['submit'])) {
        $sqlparts = array();
        if( !empty($_POST['optfra'])){
            $sqlparts[] = "pris > ".intval($_POST['optfra']);
        }
        if( !empty($_POST['opttil']) ){
            $sqlparts[] = "pris < ".intval($_POST['opttil']);
        }
        if( !empty($_POST['model']) ){
            $sqlparts[] = "model = '".addslashes($_POST['model'])."'";
        }
        $sqlsearch = implode(" and ", $sqlparts);
        $query = mysqli_query($conn,"select * from brugte_biler where $sqlsearch order by pris desc");
       
        echo "Resultatet af din søgning<br /><br />";
        while($result=mysqli_fetch_array($query)){
            echo $result['pris']."<br /><br />";
            echo $result['model'];
        }
  }
?>
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:37 #9
Man kunne lave lidt debug ala:
<?php
    if(isset($_POST['submit'])) {
        $sqlparts = array();
        if( !empty($_POST['optfra'])){
            $sqlparts[] = "pris > ".intval($_POST['optfra']);
        }
        if( !empty($_POST['opttil']) ){
            $sqlparts[] = "pris < ".intval($_POST['opttil']);
        }
        if( !empty($_POST['model']) ){
            $sqlparts[] = "model = '".addslashes($_POST['model'])."'";
        }
        $sqlsearch = implode(" and ", $sqlparts);
        $sql = "select * from brugte_biler where $sqlsearch order by pris desc";
        echo "Din sql er : $sql";
        $query = mysqli_query($conn, $sql) or die( mysqli_error());
     
        echo "Resultatet af din søgning<br /><br />";
        while($result=mysqli_fetch_array($query)){
            echo $result['pris']."<br /><br />";
            echo $result['model'];
        }
  }
?>
Avatar billede hypofysen Nybegynder
09. juni 2008 - 18:52 #10
Nu fik jeg det til at virke tusind tak :)

Bare lige en ting til, den skriver fejl hvis ingen af felterne er udfyldt hvordan undgår jeg nemmest det? og hvordan giver jeg point herinde :)
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:56 #11
Det kan løses med:
<?php
    if(isset($_POST['submit'])) {
        $sqlparts = array();
        if( !empty($_POST['optfra'])){
            $sqlparts[] = "pris > ".intval($_POST['optfra']);
        }
        if( !empty($_POST['opttil']) ){
            $sqlparts[] = "pris < ".intval($_POST['opttil']);
        }
        if( !empty($_POST['model']) ){
            $sqlparts[] = "model = '".addslashes($_POST['model'])."'";
        }
        if( !empty($_POST['model']) || !empty($_POST['opttil']) || !empty($_POST['optfra']) ){
            $sqlsearch = "where ".implode(" and ", $sqlparts);
        }
        $sql = "select * from brugte_biler $sqlsearch order by pris desc";
        echo "Din sql er : $sql";
        $query = mysqli_query($conn, $sql) or die( mysqli_error());
   
        echo "Resultatet af din søgning<br /><br />";
        while($result=mysqli_fetch_array($query)){
            echo $result['pris']."<br /><br />";
            echo $result['model'];
        }
  }
?>
Avatar billede dkfire Nybegynder
09. juni 2008 - 18:58 #12
Jeg havde lidt tænkt på det ;-)

Og du giver point ved at vi lægger et svar og du acceptere svaret. 
Hvis du vil give point til flere skal alle have lagt et svar inden du acceptere de svar.
Avatar billede hypofysen Nybegynder
09. juni 2008 - 19:03 #13
så skulle det være i orden - tusind tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester