webForumDet fria alternativet

Problem med gästbok (nybörjare)

PHP

2 svar · 402 visningar · startad av Creep

Medlem sedan mars 200341 inlägg
Frågan#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
Medlem sedan juni 200032 967 inlägg
#2

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

Mvh,

Medlem 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.

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)