Avatar billede -kenner- Nybegynder
24. maj 2005 - 12:13 Der er 7 kommentarer og
1 løsning

Erd et en Server fejl, og hvordan løser jeg den?

Hej eksperter,

jeg har dette script, som viser en underlig fejl, som den ikke fildefinere yderligere.

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'


Script:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
      <title>Skriv hilsen</title>
      <link href="../indexSheet.css" rel="stylesheet" type="text/css">
</head>
<body class="indhold">
<center>
<?php
//inkludere funktioner
include '../funktioner.php';
//skaber forbindelse til databasen
db();
//Titel
?><div class="overskrift">Skriv en hilsen</div>
<?php
//Henter id fra URL
$sql = "SELECT id FROM hilsner WHERE id='" . $_GET['id'] . "'";
$query = mysql_query($sql) or die(mysql_error());

$sql2 = "SELECT navn FROM hilsner WHERE navn='" . $_GET['navn'] . "'";
$query2 = mysql_query($sql2) or die(mysql_error());

$query_ny = mysql_num_rows($query);
$query2_ny =mysql_num_rows($query2);

$query_ny = str_replace("Resource id #", "", $query_ny);
$query2_ny = str_replace("Resource id #", "", $query2_ny);

if($query_ny >= 1 && $query2_ny >= 1){

//Tjekker om felterne er udfyldt
if(isset($_POST['send'])) {

  if (empty($_POST['hilsen'])){
    echo "<b class=\"fejl\">Fejl:</b> Du skal skrive en hilsen";
  } else {
    $hilsen = htmlentities($_POST['hilsen']);
    //Indsaet indhold i databasen
    $id = $_GET['id'];
    mysql_query("UPDATE hilsner SET hilsen='$hilsen' WHERE id='$id'") or die (mysql_error());
    echo "<div class=\"godkendt\">Din hilsen blev tilføjet</div>";
  }
}

$hilsen = mysql_query ("SELECT * FROM hilsner WHERE id = $id ") or die (mysql_error());
$row = mysql_fetch_array($hilsen);
?>
<b class="tekst">Der kan ikke bruges HTML!</b>
<form name="tilfoej-hilsen" method="post" action="<?php echo $PHP_SELF;?>">
<table border="0">
<tr><td>Navn:</td><td><?php echo $row['navn'];?></td></tr>
<tr><td>Hilsen:</td><td><textarea name="hilsen" style="height:100px;width:200px"><?php echo $_POST['hilsen'];?></textarea></td></tr>
<tr><td collspan="2"><input type="submit" name="send" value="Tilføj hilsen"></td></tr>
</form>
<?php


} else {
    echo "<div class=\"fejl\"><b>Fejl:</b> Dit ID eller navn er ugyldigt. Kontakt Kenneth, hvis du vil have tilladelse til at skrive en hilsen!</div>";
}

?>
</body>
</html>

Mvh Kenneth
Avatar billede busschou Praktikant
24. maj 2005 - 12:18 #1
Hvis id er et tal så behøves du ikke plinger '
Ydermere er det måske fordi id er tom
$sql = "SELECT id FROM hilsner WHERE id=".$_GET['id'];
Avatar billede busschou Praktikant
24. maj 2005 - 12:20 #2
det samme i din update
mysql_query("UPDATE hilsner SET hilsen='$hilsen' WHERE id=$id") or die (mysql_error());
--
Men du må jo vide hvilken en af dine queries som fejler..
Om det er en update eller select...
Avatar billede -kenner- Nybegynder
24. maj 2005 - 12:28 #3
#busschou, Jeg starter jo med at tjekke om id og navn er korrekt..

Det eneste browseren returnere er:

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'

Så ved i lige så meget som mig..
Avatar billede olleolleolle Nybegynder
24. maj 2005 - 12:32 #4
Så, før du sender queries til databaser, tjek dit data, er det galt eller ser det godt ud.

Vi siger det i kode:

// Validate the id from the querystring
if (!empty($_GET["id"]))
{
  // looks fine, use that id in a new variable
  $id = $_GET["id"];
  // ... and then use that data here
}
else
{
  // Empty, huh? 
  $id = "";
  $error_message = "No id supplied. Can't ask the database about nothing, can I?";
}

Her bruges PHP-funktionen empty() sammen med !. ! står før NOT eller "vend resultatet af udtrykket om".

if (!empty($_GET["id"]))

Om querystringen ikke har noget i id (fx. index.php?id=&username=doogiehowser) så bliver empty() sat til true. true vændes om v.h.a. ! så at: om querystringen HAR noget i id (fx. index.php?id=42&username=freshprince) så bliver hele if-sætningen true.

Forvirret? Kig ind i docsen, og husk at du kan skrive sån her for at komme til dokumentationen online:

http://php.net/empty

(Du sendes så til en nærliggende dansk server, og korrekt manualside.)
Avatar billede -kenner- Nybegynder
24. maj 2005 - 12:58 #5
Olleolleolle > Jeg tjekker jo om id og navnet eksistere, og om de findes i databasen men disse linier:

$sql = "SELECT id FROM hilsner WHERE id='" . $_GET['id'] . "'";
$query = mysql_query($sql) or die(mysql_error());

$sql2 = "SELECT navn FROM hilsner WHERE navn='" . $_GET['navn'] . "'";
$query2 = mysql_query($sql2) or die(mysql_error());

$query_ny = mysql_num_rows($query);
$query2_ny =mysql_num_rows($query2);

$query_ny = str_replace("Resource id #", "", $query_ny);
$query2_ny = str_replace("Resource id #", "", $query2_ny);

if($query_ny >= 1 && $query2_ny >= 1){
Avatar billede -kenner- Nybegynder
24. maj 2005 - 12:58 #6
Så der vil også blive meldt fejl, hvis de er tomme..
Avatar billede olleolleolle Nybegynder
24. maj 2005 - 13:17 #7
Du har da helt ret!



Jeg mente mest: se til at validere alt det som kommer i URLen før du indsætter det i en SQL-sætning. "//Henter id fra URL" kan være... irriterende og farligt.

Hvis brugeren skriver en url som

index.php?id=crazyHAXX

eller bare

index.php?id=

Så blir SQL-sætningen til et spørgsmål som ikke rammer noget. Det ved vi allerede.

SELECT id FROM hilsner WHERE id='crazyHAXX';
SELECT id FROM hilsner WHERE id='';

(En ikke helt nødvendig query.)

OK, lidt mer todo, lidt mindre filosofi:

echo'e alle SQL-sætningerne til browseren. (De konstrueres jo som strings, så vi kan godt smække noget debugging ind i koden.)
Avatar billede -kenner- Nybegynder
24. maj 2005 - 14:21 #8
Jeg har fundet fejlen.

Det skyldes at jeg havde sat  $id = $_GET['id']; i en if. Den skal stå uden for alle if'erne..
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