Форма базы данных PHP SQlite - PullRequest
0 голосов
/ 06 июля 2011

Я немного боролся с PHP и sqlite, и я просто запутываю себя.
У меня есть html-форма, которая обращается к php-скрипту с именем processFeedback.php. Мой HTML-код выглядит следующим образом ..

<html>
<head>
</head>
<body>
<form action="processFeedback.php" method="POST">
    <table>
        <tr>
            <td>Name:</td><td><input name="name"/></td>
        </tr>
        <tr>
            <td>Email:</td><td><input name="email"/></td>
        </tr>
        <tr>
            <td>Comments:</td><td><textarea name="comments"></textarea></td>
        </tr>
        <tr>
            <td></td><td><input type="submit" value="Submit"/></td>
        </tr>
    </table>
</form>
</body>
</html>

и мой php-файл выглядит следующим образом ...

<?php
try
{
//open the database
$db = new PDO('sqlite:feedback.db');

$name = $_POST["name"]; 
$email = $_POST["email"]; 
$comments = $_POST["comments"]; 

//Insert record  
$db->exec("INSERT INTO feedback (name, email,comments) VALUES ('&name', '&email','&comments');");

//now output the data to a simple html table...
print "<table border=1>";
print "<tr><td>Id</td><td>Name</td><td>Email</td><td>Comments</td></tr>";
$result = $db->query('SELECT * FROM feedback');
foreach($result as $row)
{
print "<tr><td>".$row['feedbackid']."</td>";
print "<td>".$row['name']."</td>";
print "<td>".$row['email']."</td>";
print "<td>".$row['comments']."</td>";
}

print "</table>";

$db = NULL;
}
catch(PDOException $e)
{
print 'Exception : ' .$e->getMessage();
}

?>

А вот мой метод создания таблицы ...

CREATE TABLE feedback (feedbackid INTEGER PRIMARY KEY,name TEXT,email TEXT,comments TEXT);

Форма выводитзаголовки таблицы, а также запись, которую я ввел вручную с помощью терминала, но он не вставит запись в ???Кто-нибудь может увидеть легкую ошибку?

Диско

Ответы [ 2 ]

1 голос
/ 06 июля 2011

// Вставить запись
$ db-> exec ("ВСТАВИТЬ В обратную связь (имя, адрес электронной почты, комментарии) ЗНАЧЕНИЯ ('& name', '& email', '& comments');");

Одна очевидная проблема заключается в том, что вы не проверяете ошибки:

if (1! = $ Db-> exec ("INSERT ...)) {print" Error: ". implode ('/', $ db-> errorInfo ()). "\ n ";}

Хотя я не слишком знаком с PDO, я не вижу, как ваши заполнители отображаются на соответствующие переменные PHP - что, вероятно, является причиной ошибки:

$bound=array(
     $_POST["name"], $_POST["email"], $_POST["comments"] 
);
$stm=$db->prepare("INSERT INTO feedback (name, email,comments) 
   VALUES (?, ?,?));"

if (!$stm || !$stm->execute($bound)) {
     print "Error: " . implode('/',$db->errorInfo()) . "<br />\n";
}
0 голосов
/ 06 июля 2011

Убедитесь, что в базе данных автоматически сгенерирован столбец PK [feedbackid] (AUTOINCREMENT).

РЕДАКТИРОВАТЬ: Это не является абсолютно необходимым, но отсутствие явного AUTOINCREMENT может сбить с толку промежуточное программное обеспечение. По крайней мере, не помешает попытаться добавить явное AUTOINCREMENT в другую таблицу для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...