Avatar billede subro Nybegynder
07. juni 2005 - 12:06 Der er 3 kommentarer

Hvad/ hvor er fejlen??

Jeg har en søge funktion hvor man kan skrive et ord ind i hvert input field, jeg har 8 input fields (fritekst1-8!). 
Desuden kan der søges på nogle faste søgekriterier (alder, region og køn). Alt virker som det skal, på nær når man ikke skriver noget ind i nogle af felterne, da opstår følgende fejl:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Her er koden:

<?php
if (isset($_POST['senddata'])){
//A connection to the database is established.
include('connections/sas_auth.php');
mysql_select_db($database_sas,$sas_auth);
//The function which searches the database for typed in data, starts.
function createSQL($tekst){
    $sql = ("(ID LIKE '%$tekst%')
    OR (RefNr1 LIKE '%$tekst%')
    OR (RefNr2 LIKE '%$tekst%')
    OR (RefNr3 LIKE '%$tekst%')
    OR (ForNavn LIKE '%$tekst%')
    OR (EfterNavn LIKE '%$tekst%')
    OR (Adresse LIKE '%$tekst%')
    OR (PostNr LIKE '%$tekst%') 
    OR (Samliv LIKE '%$tekst%')
    OR (Barn LIKE '%$tekst%')
    OR (HjemmeTlf LIKE '%$tekst%')
    OR (ArbejdsTlf LIKE '%$tekst%')
    OR (MobilTlf LIKE '%$tekst%')
    OR (Email LIKE '%$tekst%')
    OR (Interesser LIKE '%$tekst%')
    OR (Rygte LIKE '%$tekst%')
    OR (Udd LIKE '%$tekst%')
    OR (Sprog LIKE '%$tekst%')
    OR (ArbejdsErfaring LIKE '%$tekst%')
    OR (IT LIKE '%$tekst%')
    OR (Referencer LIKE '%$tekst%')
    OR (Job LIKE '%$tekst%')
    OR (Lon LIKE '%$tekst%')
    OR (Dato LIKE '%$tekst%')
    OR (KommentarKon LIKE '%$tekst%')");
    return $sql;
}

$sql = ("SELECT * FROM Kandidater WHERE ");
$tjek = "nej";

$fritekst1 = $_POST['fritekst1'];
if ($fritekst1 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst1).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst1).")";
    }
}

$fritekst2 = $_POST['fritekst2'];
if ($fritekst2 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst2).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst2).")";
    }
}

$fritekst3 = $_POST['fritekst3'];
if ($fritekst3 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst3).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst3).")";
    }
}

$fritekst4 = $_POST['fritekst4'];
if ($fritekst4 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst4).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst4).")";
    }
}

$fritekst5 = $_POST['fritekst5'];
if ($fritekst5 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst5).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst5).")";
    }
}

$fritekst6 = $_POST['fritekst6'];
if ($fritekst6 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst6).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst6).")";
    }
}

$fritekst7 = $_POST['fritekst7'];
if ($fritekst7 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst7).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst7).")";
    }
}


$fritekst8 = $_POST['fritekst8'];
if ($fritekst8 != '') {
    if ($tjek == "nej") {
        $sql .= "(".createSQL($fritekst8).")";
        $tjek = "ja";
    }else{
        $sql .= "AND (".createSQL($fritekst8).")";
    }
}

$alderfra = $_POST['alderfra'];
$aldertil = $_POST['aldertil'];
if ($alderfra != '') {
  if ($tjek == "nej") {
    if ($aldertil != '') {
      $sql .= " (BirthYear BETWEEN $alderfra AND $aldertil)";
    }else{
      $sql .= " (BirthYear >= $alderfra)";
    }
    $tjek = "ja";
  }else{
    if ($aldertil != '') {
      $sql .= " AND (BirthYear BETWEEN $alderfra AND $aldertil)";
    }else{
      $sql .= " AND (BirthYear >= $alderfra)";
    }
  }
}else{
  if ($tjek == "nej") {
    if ($aldertil != '') {
      $sql .= " (BirthYear <= $aldertil)";
      $tjek ="ja";
    }
  }else{
    if ($aldertil != '') {
      $sql .= " (BirthYear <= $aldertil)";
    }
  }
}

$region = $_POST['region'];
if ($region != '') {
  if ($tjek == "nej") {
    $sql .= " (Region1 = '$region' OR Region2 = '$region' OR Region3 = '$region')";
    $tjek = "ja";
  }else{
    $sql .= " AND (Region1 = '$region' OR Region2 = '$region' OR Region3 = '$region')";
  }
}

$mand = $_POST['kon2'];
if ($mand != '') {
  if ($tjek == "nej") {
    $sql .= " (Kon = 'Mand')";
    $tjek = "ja";
  } else {
    $sql .= " AND (Kon = 'Mand')";
  }
}
$kvinde = $_POST['kon1'];
if ($kvinde != '') {
  if ($tjek == "nej") {
    $sql .= " (Kon = 'Kvinde')";
    $tjek = "ja";
  } else {
    $sql .= " AND (Kon = 'Kvinde')";
  }
}
?>
<table align="center" width="400" class="borderlow">
  <tr class="p">
    <td colspan="4"><b>Søge resultater</b></td>
  </tr>
  <tr class="p">
    <td class="hvid" bgcolor="#B6272D" align="left" width="50">ID</td>
    <td class="hvid" bgcolor="#B6272D" align="left" width="120">Fornavn</td>
    <td class="hvid" bgcolor="#B6272D" align="left" width="120">Efternavn</td>
    <td bgcolor="#B6272D" align="left" width="15%"></td>
  </tr>
</table>
<?php
//Search results are printed.
echo "$result";
$result = mysql_query($sql) or die(mysql_error());

echo "<table align='center' class='bordertop' width='400'>";
while ($row = mysql_fetch_array($result)) {
echo "<tr class='p'><td bgcolor='#CCCCCC' width='50'>$row[ID]</td>";
echo "<td bgcolor='#CCCCCC' width='120'>$row[ForNavn]</td>";
echo "<td bgcolor='#CCCCCC' width='120'>$row[EfterNavn]</td>";
echo "<td bgcolor='#CCCCCC' width='15%'><a href=\"found_data.php?id=$row[ID]\" class='sog' target='_blank'>Vis</a></td></tr>";
}
echo "</table>";
}
?>
Avatar billede shb Nybegynder
07. juni 2005 - 12:14 #1
tip: for at undgå sql-injection, bør du sortere ' eller " fra  i brugerens input. prøv evt.  selv at poste disse tegn til siden der :)
Avatar billede sukos Juniormester
07. juni 2005 - 13:42 #2
Kan du ik' bare spørge om $tjek er nej, inden du kører query?
Avatar billede subro Nybegynder
07. juni 2005 - 14:38 #3
Hvordan mener du??
Kan du vise det??
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