Avatar billede dejbjerg Nybegynder
21. november 2006 - 10:50 Der er 5 kommentarer og
1 løsning

Fiksere måde?

Hej eksperter

http://www.proj.dk/timesag
bn=test
pw=password
(klik på vis udtræk)

Jeg bruger en form og nedenstående funktion til at generere en udvælgelsesforespørgsel (noget sql).

Findes der ikke en fiksere måde at bikse sql'en sammen på end med nedenstående? Det virker, men bliver allerh... uoverskueligt, hvis der kommer flere felter på.

Er der én der har en fiksere metode til at lave forespørgsler ud fra valg i en form?

Ikke en switch (som er i princippet er magen til).
Ikke ved at putte dele i funktioner.

Findes der en principielt anderledes og smartere måde?

function make_sql($fra="", $til="", $bruger="", $proj="" ){//laver dato sql stump til query

  if ($fra==""&&$til==""){
    $sql="";
    if ($bruger==""&&$proj==""){
    }
    if ($bruger==""&&$proj!=""){
      $sql="time_projekt_id = $proj";
    }
    if ($bruger!=""&&$proj==""){
      $sql="time_bruger_id = $bruger";
    }
    if ($bruger!=""&&$proj!=""){
      $sql="time_bruger_id = $bruger AND time_projekt_id = $proj";
    }
  }//if
  if ($fra == "" && $til != ""){
    $sql =" time_dato <= "."'".DK_dato_US ($til)."' ";   
    if ($bruger==""&&$proj==""){
    }
    if ($bruger==""&&$proj!=""){
      $sql .= "AND time_projekt_id = $proj";
    }
    if ($bruger!=""&&$proj==""){
      $sql .= "AND time_bruger_id = $bruger";
    }
    if ($bruger!=""&&$proj!=""){
      $sql.="AND time_bruger_id = $bruger AND time_projekt_id = $proj";
    }
  }//if
  if ($fra != "" && $til == ""){
    $sql = " time_dato >= "."'".DK_dato_US ($fra)."' ";
    if ($bruger==""&&$proj==""){
    }
    if ($bruger==""&&$proj!=""){
      $sql .= "AND time_projekt_id = $proj";
    }
    if ($bruger!=""&&$proj==""){
      $sql .= "AND time_bruger_id = $bruger";
    }
    if ($bruger!=""&&$proj!=""){
      $sql .= "AND time_bruger_id = $bruger AND time_projekt_id = $proj";
    }
  }//if
  if ($fra != "" && $til != ""){
    $sql = " time_dato BETWEEN "."'".DK_dato_US ($fra)."'"." AND "."'".DK_dato_US ($til)."' ";
    if ($bruger==""&&$proj==""){
    }
    if ($bruger==""&&$proj!=""){
      $sql .= "AND time_projekt_id = $proj";
    }
    if ($bruger!=""&&$proj==""){
      $sql .= "AND time_bruger_id = $bruger";
    }
    if ($bruger!=""&&$proj!=""){
      $sql .= "AND time_bruger_id = $bruger AND time_projekt_id = $proj";
    }
  }//if
return $sql;
}//func
Avatar billede dejbjerg Nybegynder
21. november 2006 - 13:23 #1
Kunne måske nok have fundet på en mere klar overskrift, sry :)
Avatar billede kinderaeg Nybegynder
21. november 2006 - 14:31 #2
Det ser ud til at det er til din Where-clause, så kunne det se sådan ud:

function make_sql($fra="", $til="", $bruger="", $proj="" ){
  sql = " 1=1 ";
  if($fra!="") {
    $sql .= " AND time_dato >= "."'".DK_dato_US ($fra)."' ";
  }
  if($til!="") {
    $sql .= " AND time_dato <= "."'".DK_dato_US ($til)."' ";
  }
  if($bruger!="") {
    $sql .= " AND time_bruger_id = $bruger ";
  }
  if($proj!="") {
    $sql .= " AND time_projekt_id = $proj ";
  }
  return $sql;
}
Avatar billede dejbjerg Nybegynder
22. november 2006 - 09:05 #3
Det var da ihvertfald lidt mere snedigt :)

Læg et svar hvis du vil have point.

Mange tak for hjælpen :)

/Dej
Avatar billede dejbjerg Nybegynder
22. november 2006 - 09:26 #4
Smårettelser:

function make_sql($fra="", $til="", $bruger="", $proj="" ){
  $sql = " WHERE 1";
  if($fra!="") {
    $sql .= " AND time_dato >= "."'".DK_dato_US ($fra)."' ";
  }
  if($til!="") {
    $sql .= " AND time_dato <= "."'".DK_dato_US ($til)."' ";
  }
  if($bruger!="") {
    $sql .= " AND time_bruger_id = $bruger ";
  }
  if($proj!="") {
    $sql .= " AND time_projekt_id = $proj ";
  }
  return $sql;
}
Avatar billede kinderaeg Nybegynder
22. november 2006 - 12:44 #5
Svar :)

Ok, ud fra den oprindelige så det ikke ud til, at where skulle med i den returnerede værdi, men det er selvfølgelig altid lovligt at lave lidt om ;)
Avatar billede dejbjerg Nybegynder
22. november 2006 - 13:37 #6
Der manglede osse et $ i $sql :P

Jeg havde en if som checkede om der skulle where clause på - den blev jo med et overflødig :)

Tak for hjælpen endnu en gang.

/Dej
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