# MySQL-problem...
Author: Stephanie

Jag får ett felmeddelande som vi inte lyckas klura ut vad det beror på...

_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 7_

Det är inget fel i koden så vitt jag kan se. Men när MySQL inte ville fungera för mig förut, installerade min lärare en äldre version av programmet istället. Kan det vara att min version av PHP inte fungerar med den versionen av MySQL?

Vad gör jag? ![Rynkar på näsan](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-frown.gif "Rynkar på näsan")

## Comment 1
Author: johan

Hur ser SQL-frågan ut?

Låter som helt fel väg att få att installera en äldre version. Ska man aldrig kunna uppgradera för bättre säkerhet, prestanda och funktioner?

## Comment 2
Author: Stephanie

#1 Vad menar du med SQL-frågan?

Jag tycker också att det låter som en dålig idé att installera äldre versioner... Men min lärare vill att jag ska installera en äldre version av Apache också, för att få det att funka.. Det hade väl varit bättre att försöka ta reda på vad problemet är... ![Obestämd](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-undecided.gif "Obestämd")

## Comment 3
Author: johan

Låter som en lat lärare.

Du försöker väl köra en SQL-fråga i din kod och som inte fungerar för dig.

Vad använder du för fråga för att hämta eller skriva data från/till databasen? Typ "select \* from tabellen"

## Comment 4
Author: Stephanie

Ingen aning... Det är ett formulär vi ska göra. Kopierar in koderna istället...

## Comment 5
Author: Stephanie

<?php

// Först måste vi kontakta databasen  
$dbcnx = mysql\_connect('localhost', 'root', 'dator' );  
if (!$dbcnx) {  
die( '<p>Kan inte kontakta ' .  
'databasen just nu.</p>' );  
}

// Om inte den efterfrågade databasen finns  
if (! mysql\_select\_db('uppgift3') ) {  
die( '<p>Kan inte hitta ' .  
'databasen.</p>' );  
}

  
// Sedan begära vilka variabler som ska skickas. "id" läggs till automatiskt.

$fornamn = $\_REQUEST\['fornamn'\];  
$efternamn = $\_REQUEST\['efternamn'\];  
$alder = $\_REQUEST\['alder'\];  
$kon = $\_REQUEST\['kon'\];  
$epost = $\_REQUEST\['epost'\];

//Därefter stoppa in i databasens tabell

  
$sql = "INSERT INTO namnlista SET  
  
fornamn='$fornamn',  
efternamn='$efternamn',  
alder='alder',  
kon='kon',  
epost='epost',";

  
//Och till sist bekräfta om det gick bra att lägga in informationen

if (mysql\_query($sql)) {  
echo('<br/><br/>');  
echo('<p class="tack">Tack f&ouml;r din anm&auml;lan! </p>');  
echo('<p class="tack">Vid fr&aring;gor eller eventuella problem med formul&auml;ret kontakta adminstrat&ouml;ren</p>');  
}  
else {  
echo('<p class="tack">Det gick tv&auml;rr inte att l&auml;gga till din anm&auml;lan. Vid fr&aring;gor eller eventuella problem med formul&auml;ret kontakta administrat&ouml;ren' . mysql\_error() . '</p>');  
}

?>

## Comment 6
Author: Stephanie

<?php

  
$dbcnx = mysql\_connect('localhost', 'root', 'dator');  
mysql\_select\_db('uppgift3');

  
if (isset($\_POST\['skicka'\])):  
// Databasen har blivit uppdaterad

  
$id=$\_REQUEST\['id'\];  
$fornamn = $\_REQUEST\['fornamn'\];  
$efternamn = $\_REQUEST\['efternamn'\];  
$alder = $\_REQUEST\['alder'\];  
$kon = $\_REQUEST\['kon'\];  
$epost = $\_REQUEST\['epost'\];

$sql = "UPDATE namnlista SET  
  
id = '$id',  
fornamn='$fornamn',  
efternamn='$datum'  
alder='$alder'  
kon='$kon'  
epost='$epost'

  
WHERE id='$id'";

//Om det inte gick att uppdatera, kör vi med if-satser

if (mysql\_query($sql)) {  
echo('<p>Anmälan uppdaterad.</p>');  
} else {  
echo('<p>Det gick inte att uppdatera: ' .  
mysql\_error() . '</p>');  
}

?>

<p><a href="file:///D|/Mina dokument/Programmering B/Uppgift3/oversikt\_svar.php">Tillbaka till svaren</a></p>

<?php

//Annars redigera uppgifterna

else  
  
$id = $\_GET\['id'\];  
$row=@mysql\_query("SELECT \* FROM uppgift3 WHERE ID='$id'");  
if (!$row) {  
die('<p>Det gick inte att komma till databasen: ' .  
mysql\_error() . '</p>');  
}

$row = mysql\_fetch\_array($row);

$id =$row\["id"\];  
$fornamn = $row\["fornamn"\];  
$efternamn = $row\["efternamn"\];  
$alder = $row\["alder"\];  
$kon = $row\["kon"\];  
$epost = $row\["epost"\];  
  
  
?>

<form action="edit.php" method="post">  
  
<p >ID:</p>  
  
<input name="id" type="text" value="<?= $id ?>" />

  
<p>F&ouml;ramn:</p>  
  
<input name="fornamn" type="text" value="<?= $fornamn ?>" />  
  
<p>Efternamn:</p>  
<input name="efternamn" type="text" value="<?= $efternamn ?>" />  
  
<p >&Aring;lder:</p>  
  
<input name="alder" type="text" value="<?= $alder ?>" />

<p><strong>Man:</strong> <input type="radio" name="kon" value="<?= $kon ?>"/>  
<strong>Kvinna:</strong><input type="radio" name="kon" value="<?= $kon ?>"/></p>  
  
<p >E-post:</p>  
  
<input name="epost" type="text" value="<?= $epost ?>" />  
  
<br />  
<br />

<input type="submit" name="skicka" id="skicka" value="Uppdatera" />

</form>

<?php  
  
endif;  
  
?>

</body>  
</html>

## Comment 7
Author: Stephanie

Deadline för tre uppgifter samt uppdraget är om en vecka. Jag förstår inte hur jag ska klara det, när ingenting fungerar! ![Rynkar på näsan](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-frown.gif "Rynkar på näsan")

## Comment 8
Author: charlie

En sak som jag sag initiellt i din Insert... du har ett extra komma pa slutet. som ska bort.

$sql = "INSERT INTO namnlista SET  
  
fornamn='$fornamn',  
efternamn='$efternamn',  
alder='alder',  
kon='kon',  
epost='epost'";

## Comment 9
Author: charlie

Och motsvarande sa saknar du komma i update

$sql = "UPDATE namnlista SET  
  
id = '$id',  
fornamn='$fornamn',  
efternamn='$datum',  
alder='$alder',  
kon='$kon',  
epost='$epost'

WHERE id='$id'";

## Comment 10
Author: Stephanie

Sedär! Det löste visst felet! ![Förvånad](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-surprised.gif "Förvånad") Tackar!

## Comment 11
Author: Stephanie

Nu klagar den på den här delen i ett annat dokument:

$sql = "UPDATE namnlista SET

id = '$id',  
fornamn='$fornamn',  
efternamn='$datum'  
alder='$alder'  
kon='$kon'  
epost='$epost'

  
WHERE id='$id'";

  
Och då på den sista raden, här ovan. Får felmeddelandet: "_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 'WHERE id=''' at line 10_". Har jag missat någon ' eller " där?

## Comment 12
Author: johan

Du måste ha komma efter alla fält utom den sista. För id och fornamn är det rätt, men efternamn, alder, kön är det fel.

Är det er lärare som lärt er att skriva så här? Att skriva frågorna på det sättet utan istället för att använda parametrar är väldigt dumt! Det öppnar upp för "sql injection attacks" som är ett sätt att hacka databasen hur lätt som helst.

Jag har aldrig använt php, så jag vet inte exakt hur man använder parametrar där, men det är ett måste!!! Kanske är [den här länken läsvärd](http://www.php.net/manual/en/function.mysql-real-escape-string.php)?

Att skriva som ni skrivit är ungefär som att skriva koden till bankomatkortet med spritpenna på kortet. Visst, det är bekvämt, men fullständigt idiotiskt.

## Comment 13
Author: Stephanie

#12 Oj, förlåt! Jag glömde att jag ändrade där ![Skäms](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-embarassed.gif "Skäms")

Denna är rätt:

  
$sql = "UPDATE namnlista SET  
  
id='$id',  
fornamn='$fornamn',  
efternamn='$datum',  
alder='$alder',  
kon='$kon',  
epost='$epost',

WHERE id='$id'";

## Comment 14
Author: Stephanie

#12 Koderna är i princip kopierade rakt av från min lärarens instruktioner. Dessvärre är det här bara något som kommer ge mig ett betyg just nu, så jag gör som han säger helt enkelt ![Obestämd](http://datorn.ifokus.se/tiny3/plugins/emotions/img/smiley-undecided.gif "Obestämd")

Men jag hoppas att jag kommer hålla intresset uppe även efter kurserna, så att jag fortsätter med programmering och lär mig mer efteråt!

## Comment 15
Author: johan

#13: Du kan inte ha komma precis före WHERE.

Kommatecknet har du bara mellan alla fält som ska uppdateras.

Du har ju t o m skrivit nyckelordet i versalt, så du har gjort det ganska tydligt vad som är vad. UPDATE SET och WHERE är kommandon. Efter SET har du en lista med fält som ska uppdateras. Komma har du bara för att separera varje fält åt, men aldrig efter sista fältet.

UPDATE tabell SET fält1=värde1, fält2=värde2 WHERE nyckel=värde

Kan du inte påpeka för läraren att det finns bättre och säkrare sätt. Det visar ju på att du tagit reda på saker själv, förstått och gör lite mer än bara skriver av hans kod.

Du behöver ju inte säga att han är korkad för det. :)

## Comment 16
Author: Stephanie

#15 Helt ärligt så har jag bråkat lite för mycket med läraren, för att påpeka sånt... Nu är det dessutom bara en vecka kvar av kursen och han är bara vikarie. Nästa termin, till kursen Programmering C kommer vi ha den vanliga läraren. Har ingen aning om hur han är...

## Comment 17
Author: johan

Ok. :)

Tänk att det fortfarande är så att eleverna kan mer när det handlar om datorer. :)
