webForumDet fria alternativet

Problem med gästbok (nybörjare)

2 svar · 400 visningar · startad av Creep

CreepMedlem sedan mars 200341 inlägg
#1

Hej. Jag började med PHP seriöst igår, och har nu snickrat ihop en gästbok som BORDE fungera. Den läser info från en Access-databas med COM (jag har inte tillgång till mysql eller DSN på min webserver) och allt funkar helt okej med inläsandet, men nåt med skrivandet till databasen med SQL-satsen funkar inte. Kan inte direkt förklara bättre, så ni får kod och felmeddelande. Har gått igenom ett stort antal felmeddelanden och rättat massa fel, men nu är jag fast.

<html>
<head>
<title>Gästbok</title>
</head>
<body>

<form action="index.php" method="POST">
Namn: <input type="text" name="Namn"><br>
E-Mail: <input type="text" name="Email"><br>
Meddelande:<br><textarea rows="8" cols="30" name="Text"></textarea><br>
<input type="submit" name="submit">
</form>

<?php if (!isset($_POST["submit"])) {

$db_connection = new COM("ADODB.Connection");

$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("./gbdb.mdb") ."; DefaultDir=".realpath("./");
$db_connection->open($db_connstr);
$rs = $db_connection->execute("SELECT * FROM GB");
$rs_fldNamn = $rs->Fields(1);
$rs_fldEmail = $rs->Fields(2);
$rs_fldDate = $rs->Fields(3);
$rs_fldText = $rs->Fields(4);
while (!$rs->EOF) {
  print "<hr>Namn: <b>$rs_fldNamn->value</b><br>E-Mail: <a href='mailto:$rs_fldEmail->value'>$rs_fldEmail->value</a><br>Date: $rs_fldDate->value<br>Message:<br>$rs_fldText->value";
  $rs->MoveNext();
}
$rs->Close();
$db_connection->Close();

} else {

$db_connection = new COM("ADODB.Connection");

$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("./gbdb.mdb") ."; DefaultDir=".realpath("./");
$db_connection->open($db_connstr);

$datum = date("H:i:s Y-m-j");
$namn = $_POST["Namn"];
$email = $_POST["Email"];
$text = $_POST["Text"];

$sql = "INSERT INTO GB(Namn,Datum,Email,Text) VALUES('$namn','$email','$datum','$text')";

$db_connection->execute($sql);

$db_connection->Close();

}
?>

</body>
</html>

Felmeddelanden:

Warning: Invoke() failed: Exception occurred. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. in h:\home\users\php\test2\index.php on line 48
@ndersMedlem sedan juni 200032 969 inlägg
#2

I Access är text ett reserverat ord, så jag tycker du ska byta namn på det fältet i tabellen.

Mvh,

CreepMedlem sedan mars 200341 inlägg
#3

Tack så mycket. Jag ändrade och det fungerade jättebra. Jag lägger ut den fungerande koden här under som referens då.

<html>
<head>
<title>Gästbok</title>
</head>
<body>

<form action="index.php" method="POST">
Namn: <input type="text" name="Namn"><br>
E-Mail: <input type="text" name="Email"><br>
Meddelande:<br><textarea rows="8" cols="30" name="Text"></textarea><br>
<input type="submit" name="submit">
</form>

<?php if (isset($_POST["submit"])) {

$db_connection = new COM("ADODB.Connection");

$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("./gbdb.mdb") ."; DefaultDir=".realpath("./");
$db_connection->open($db_connstr);

$datum = date("H:i:s Y-m-j");
$namn = $_POST["Namn"];
$email = $_POST["Email"];
$text = $_POST["Text"];

$sql = "INSERT INTO GB(Namn,Email,Datum,Meddelande) VALUES('$namn','$email','$datum','$text')";

$db_connection->execute($sql);

$db_connection->Close();

}

$db_connection = new COM("ADODB.Connection");

$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("./gbdb.mdb") ."; DefaultDir=".realpath("./");
$db_connection->open($db_connstr);
$rs = $db_connection->execute("SELECT * FROM GB");
$rs_fldNamn = $rs->Fields(1);
$rs_fldEmail = $rs->Fields(2);
$rs_fldDate = $rs->Fields(3);
$rs_fldText = $rs->Fields(4);
while (!$rs->EOF) {
  print "<hr>Namn: <b>$rs_fldNamn->value</b><br>E-Mail: <a href='mailto:$rs_fldEmail->value'>$rs_fldEmail->value</a><br>Date: $rs_fldDate->value<br>Message:<br>$rs_fldText->value";
  $rs->MoveNext();
}
$rs->Close();
$db_connection->Close();

?>

</body>
</html>

Det finns säkert fel, men jag är för ny för att märka dem än. Framförallt är koden gjord med COM vilket tydligen inte är så bra. Databasen består helt enkelt av en tabell som heter GB, som har fälten ID, Namn, Email, Datum och Meddelande. Alla fält är text utom Meddelande som är PM. Tack för hjälpen, och tack för mig.

131 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)