Форма базы данных PHP SQlite

Я некоторое время боролся с 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);

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

Дискотека


person StuStirling    schedule 06.07.2011    source источник
comment
В качестве примечания: остерегайтесь SQL-инъекций: php.net/manual/ ru/security.database.sql-injection.php   -  person Raoul    schedule 06.07.2011
comment
Ок буду иметь в виду. Однако я только изучаю банкомат   -  person StuStirling    schedule 06.07.2011
comment
Я понимаю, что это то, чему стоит научиться на раннем этапе, проверить, какие проблемы это может вызвать.   -  person Raoul    schedule 06.07.2011


Ответы (2)


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

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

if (1!=$db->exec("INSERT...)) { print "Ошибка: " .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";
}
person symcbean    schedule 06.07.2011
comment
Ах, гениально, я получил сообщение об ошибке, говорящее, что я пытаюсь записать в базу данных только для чтения :) - person StuStirling; 06.07.2011
comment
Хорошо, я изменил разрешение файла базы данных на чтение/запись, но теперь я получаю эту ошибку: 00000/14/невозможно открыть файл базы данных, но под ним все еще отображается запись, которую я ввел вручную - person StuStirling; 06.07.2011
comment
Теперь он работает. Мне пришлось переместить базу данных в каталог и дать ему права на чтение/запись для работы внутреннего запроса. - person StuStirling; 06.07.2011

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

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

person Tim    schedule 06.07.2011
comment
Да, это так. Это автоматически увеличивающийся столбец - person StuStirling; 06.07.2011
comment
Можете ли вы опубликовать свое заявление о создании таблицы. - person Tim; 06.07.2011
comment
добавил это к исходному вопросу - person StuStirling; 06.07.2011
comment
Я не понимаю, зачем мне это делать, когда это все равно работает, когда я вставляю вручную с помощью терминала. Конечно, это означает, что он автоинкрементируется? - person StuStirling; 06.07.2011
comment
Я не использую PHP, но часто использую SQLite. Вы уверены, что должны заключать переменные в одинарные кавычки? ('&имя', '&электронная почта','&комментарии'); - person Tim; 06.07.2011