Avatar billede silmarillion Juniormester
24. januar 2009 - 15:00 Der er 6 kommentarer og
1 løsning

Fejl i SQL syntax

Jeg får følgende fejl når jeg vil opdatere min database:

fejl: ret_indlaeg prøvede UPDATE nyheder SET titel = 'test 23', forfatter = 'Webmaster' tekst = 'Test test mere test 'WHERE id = 4 men fejlede: 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 'tekst = 'Test test mere test 'WHERE id = 4' at line 1

Jeg har tidliger haft et lignende script der virkede, men fik det desværre slettet. Det er lavet ud fra et grundlæggende script der virker, eneste ændring er, at jeg har tilføjet forfatter og ændret til:
"FROM nyheder " .
fra "FROM blog " .

Tabellen i Mysql hedder nyheder, og der er et feltnavn der hedder forfatter.

Resten af funktionerne virker, jeg kan tilføje nyt og slette.

scriptet jeg ikke kan få til at virke ser ud som følger:

<?
require_once("login.php");
require_once("adminfunktioner.php");
require_once("adminlayout.php");

if(logget_ind()){
if(isset($_GET[id])) {
  $sql = "SELECT titel, forfatter, tekst " .
        "FROM nyheder " .
        "WHERE id = $_GET[id]";
  $resultat = mysql_query($sql);
  if(!$resultat)
  rapporter_fejl("adminrediger.php forsøgte $sql " .
                  "men fejlede: " . mysql_error());
  else {
  $post = mysql_fetch_array($resultat);
  ?>
  <html>
  <body>
  <form method='post'
        action='adminrediger.php'>
  <input type='hidden' name='id'
          value='<? echo $_GET[id]; ?>'>
  Titel:
  <input type='text' name='titel'
          value='<? echo $post[titel]; ?>'><br>
  Skrevet af:
  <input type='text' name='forfatter'
          value='<? echo $post[forfatter]; ?>'><br>
  <textarea name='tekst' cols="80" rows="10"><? echo $post[tekst]; ?>
  </textarea>
  <br>
  <input type='submit' value='Rediger'>
  </body>
  </html>
  <?
  }
}

if(isset($_POST[id]) &&
    isset($_POST[titel]) &&
    isset($_POST[forfatter]) &&
    isset($_POST[tekst])){
  ret_indlaeg($_POST[id],
                  $_POST[titel],
                  $_POST[forfatter],
                  $_POST[tekst]);
  vis_status("Indl&aelig;g redigeret");
}
} else
vis_status("Du er ikke logget ind.");
?>

Jeg håber der er en der kan hjælpe med at spotte fejlen.
Avatar billede hmortensen Nybegynder
24. januar 2009 - 15:16 #1
Der mangler et , i din ret_indlaeg() metode, i din update sætning.
Avatar billede silmarillion Juniormester
24. januar 2009 - 15:34 #2
Jeg har muligvis stirret mig blind på dette efterhånden, men jeg kan ikke se hvor i ret_indlaeg() der mangler et , kan du hjælpe mig med hvor det skal sættes.
Avatar billede hmortensen Nybegynder
24. januar 2009 - 15:34 #3
Ja, hvis du viser mig ret_indlaeg()....
Avatar billede silmarillion Juniormester
24. januar 2009 - 15:52 #4
Det får du her:

<?
require_once("debug.php");
require_once("forbindelse.php");

function tilfoej_indlaeg($titel, $forfatter, $tekst){
$dato = date("Y-m-d");
$klokken = strftime("%H:%M:%S");
$sql = "INSERT INTO nyheder " .
        "(titel, forfatter, dato, klokken, tekst) " .
        "VALUES " .
        "('$titel', '$forfatter', '$dato', '$klokken', '$tekst')";
$resultat = mysql_query($sql);
if(!$resultat)
  rapporter_fejl("tilfoej_indlaeg prøvede $sql " .
                "men fejlede: " . mysql_error());
}

function ret_indlaeg($id, $titel, $forfatter, $tekst){
$sql = "UPDATE nyheder " .
        "SET titel = '$titel', " .
        "forfatter = '$forfatter' " .
        "tekst = '$tekst'" .
        "WHERE id = $id";
$resultat = mysql_query($sql);
if(!$resultat)
  rapporter_fejl("ret_indlaeg prøvede $sql " .
                "men fejlede: " . mysql_error());
}

function slet_indlaeg($id){
$sql = "DELETE FROM nyheder " .
        "WHERE id = $id";
$resultat = mysql_query($sql);
if(!$resultat)
  rapporter_fejl("slet_indlaeg prøvede $sql " .
                "men fejlede: " . mysql_error());
}
?>



mere her


<?
require_once("forbindelse.php");
require_once("debug.php");

function vis_forside(){
?>
<html>
<body>
<h1>Nyheds administration</h1>
<a href='admin.php?logud=1'>log ud</a>

<h2>Tilf&oslash;j nyhed</h2>
<form method='post' action='admintilfoej.php'>
  <table width="218" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width="71">Titel: </td>
      <td width="147"><input type='text' name='titel'></td>
    </tr>
    <tr>
      <td>Skrevet af: </td>
      <td><input type='text' name='forfatter'></td>
    </tr>
  </table>
  <p><textarea name='tekst' cols="80" rows="10"></textarea>
    <br>
    <input type='submit' value='Tilf&oslash;j'>
  </p>
</form>

<h2>Rediger nyhed</h2>
<?
$sql = "SELECT id, titel, forfatter, dato, klokken " .
      "FROM nyheder " .
      "ORDER BY dato DESC, klokken DESC";
$resultat = mysql_query($sql);
if(!$resultat)
rapporter_fejl("vis_forside forsøgte $sql " .
                "men fejlede: " . mysql_error());
else
while($post = mysql_fetch_array($resultat)){
  echo "<b>$post[titel]</b> - ";
  echo "$post[forfatter]";
  echo "$post[dato]";
  echo "$post[dato] $post[klokken] ";
  echo "<a href='adminrediger.php?id=$post[id]'>";
  echo "rediger</a> ";
  echo "<a href='adminslet.php?id=$post[id]'>slet</a>";
  echo "<br>\n";
}
?>
</body>
</html>
<?
}


Men det er kun den fil jeg skrev i det første indlæg der er ændret, der er ikke ænderet i noget af dette. Det virkede som sagt indtil jeg fik slettet den oprindelige fil.

Men jeg håber at dette kan hjælpe
Avatar billede silmarillion Juniormester
24. januar 2009 - 15:55 #5
Jeg fandt fejlen, der manglede et , som du skrev.
Avatar billede silmarillion Juniormester
26. februar 2009 - 00:49 #6
lukkes
Avatar billede arne_v Ekspert
26. februar 2009 - 05:06 #7
Og hvorfor tager du så point selv, når du fik det rigtige svar ??
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
Computerworld tilbyder specialiserede kurser i database-management

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