2013-07-06 2 views
0

Я предполагаю, что это простая проблема, я просто не могу узнать, где и почему. (надеюсь, что это не дубликат).Вставка в базу данных mysql с php

Мое намерение - захватить информацию из ввода и из текстового поля и вставить его в мою базу данных в соответствующую таблицу, в которой уже есть «журналы». Однако после попадания submit и без получения каких-либо ошибок в базу данных ничего не добавлено ... мысли?

вот мой "вид" (post.php):

<fieldset> 
    <form method="post" action="push.php"> 
     <input type="text" name="datetitle" /><br /> 
     <textarea name="journalcontent"></textarea><br /> 
     <input type="submit" /> 
    </form> 
    <?php echo $datetitle ?> 
    <p><?php $output ?></p> 
</fieldset> 

здесь мой "индекс" (push.php) с очевидными частями опущена:

<?php 

$dsn = '*'; 
$username = '*'; 
$password = '*'; 

include "model.php"; 

try { 
    $db = new PDO($dsn, $username, $password); 
} catch (PDOException $exc) { 

    echo 'connection failed'; 
    exit; 
} 

echo 'goodzo'; 

$datetitle = $_POST['datetitle']; 
$journalcontent = $_POST['journalcontent']; 

if (!empty($datetitle)) { 
    $output = add_entry($datetitle, $journalcontent); 
} else { 
    $output = "empty"; 
} 

include "post.php"; 

?> 

и, наконец, моя модель .php:

<?php 
function add_entry($datetitle, $journalcontent) { 
    global $db; 
    $query = 'INSERT INTO journals 
       (entry_date, contents) 
       VALUES 
       ($datetitle, $journalcontent)'; 
    try { 
     $statement = $db->prepare($query); 
     $statement->execute(); 
     $statement->closeCursor(); 
    } catch (PDOException $e) { 
     $error_message = $e->getMessage(); 
     display_db_error($error_message); 
    } 
} 
?> 
+0

Не включает ли model.php после подключения PDO? В противном случае $ db ничего не говорит .... – KyleK

+0

@KyleK нет, поскольку он ссылается только на вызов функции. * php * – 19greg96

+0

[Вы действительно должны исправить это неприятное отверстие для инъекций SQL в своем приложении.] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) – PeeHaa

ответ

5

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

$query = "INSERT INTO journals 
      (entry_date, contents) 
      VALUES 
      ('$datetitle', '$journalcontent')"; 

Это говорит, вы действительно должны быть с помощью параметров связывания для передачи значений в запросе. Что-то вроде этого:

$query = 'INSERT INTO journals 
      (entry_date, contents) 
      VALUES 
      (?, ?)'; 

$statement = $db->prepare($query); 
$statement->bindParam(0, $datetitle, PDO::PARAM_STR); 
$statement->bindParam(1, $journalcontent, PDO::PARAM_STR); 
$statement->execute(); 
+0

Я сделанные изменения все еще не видят никаких данных, вставленных в базу данных. Это будет проблема с моей таблицей? (Я успешно подключаюсь к БД точно) – captainrad

+0

В таблице, в которую я вставляю, есть дополнительный столбец, являющийся первичным ключом, который является автоматически увеличивающимся «id». Может ли это быть проблемой? – captainrad

+1

Вам не нужно вставлять ничего в столбец автоматического увеличения. Кроме того, если вы все еще используете свой исходный код (мой первый пример с обновленными кавычками), я заметил еще одну проблему с этим - параметры также должны быть указаны. –

0

Необходимо в первую очередь включить отчет об ошибках PDO; Я хотел бы использовать

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$datetitle Если и $journalcontent являются целыми числами, то запрос не будет разрушаться из-за ошибки синтаксиса SQL и отсутствие строки цитировал. Вы должны параметризовать запрос, чтобы избежать этой проблемы, а также возможной инъекции.

$query = <<<SQL 
    INSERT INTO journals 
     (entry_date, contents) 
    VALUES 
     (?, ?) 
SQL; 
$statement = $db->prepare($query); 
$statement->execute(array($datetitle, $journalcontent)); 
Смежные вопросы