2013-10-09 4 views
0

* ПРОБЛЕМА решаемые * См ответ на мой пост ниже

Я схожу с ума, пытаясь вставить данные из простой HTML формы с $ _POST в базу данных с PHP и PDO. На данный момент я не получаю никаких ошибок, в базу данных ничего не происходит. Если я набираю значения вручную в коде, он работает, но при вводе в форму html ничего не происходит. В какой-то момент я набрал «Массив».

Если кто-нибудь может сказать мне, что я делаю неправильно, или указать мне в правильном направлении, я был бы действительно благодарен! Я новичок так что, пожалуйста, голые со мной :)

UPDATE: Ошибка я получаю: Фатальная ошибка: Uncaught исключение «PDOException» с сообщением «SQLSTATE [23000]: Integrity нарушение ограничения: 1048 Колонка «title» не может быть null ... in

Почему название столбца недействительно?

Баз данные просто таблица с 4 полямов (ID, названием, сообщениями и полем времени/метками времени. Полем идентификатора является первичным AI и поле временной метки набирают время автоматически.

Здесь это файл connect.inc.php:

<?php 
class DB extends PDO 
{ 
    public function __construct($dbname = "blogdata") 
    { 
     try { 
      parent::__construct("mysql:host=localhost;dbname=$dbname;charset=utf8", 
           "root", ""); 
     } catch (Exception $e) { 
      var_dump($e); 
     } 
    } 
} 

?> 

А вот файл post.php:

<?php 

require 'connect.inc.php'; 

$db = new DB('blogdata'); 

$stmt = $db->prepare("INSERT INTO blogposts (title, message, time) VALUES (:title, :message, :time)"); 

$stmt->bindParam(':title', $_POST['title']); 
$stmt->bindParam(':message', $_POST['message']); 
$stmt->bindParam(':time', $time); 

$title = $_POST['title']; 
$message = $_POST['message']; 

$stmt->execute(); 

?> 


<!DOCTYPE html> 

<html> 
<head> 
<title>Create blog post</title> 
<meta charset="utf-8" /> 

</head> 

<body> 

<!--- Add blog post ---> 

<div class="add_form"> 
    <form id="add_post" method="post" action="index.php" enctype="text/plain"> 
     <fieldset> 
      <legend>Create post</legend> 
      <label for="post_title">Title: 
       <input id="title" type="text" name="title" value="<?php if (isset($title)) { echo htmlentities ($title); } ?>" > 
      </label> 
      <label for="message">Message: 
       <textarea id="message" name="message" rows="20" cols="30" maxlength="50" value="<?php if (isset($message)) { echo htmlentities ($message); } ?>" ></textarea> 
      </label>           
     </fieldset> 
     <input id="send" type="submit" value="Send"> 
    </form> 
</div> 


</body> 

</html> 

ANSWER

Вам нужно все обернуть и проверить, не является ли $ _POST пустым. Также проблема заключалась в действии = "index.php" в форме. Его нужно было установить post.php.

Вот правильный код в Post.php:

<?php 

if (!empty($_POST)) { 

    require 'connect.inc.php'; 

    $db = new DB('blogdata'); 

    $stmt = $db->prepare("INSERT INTO blogposts (title, message) VALUES (:title, :message)"); 
    $stmt->bindParam(':title', $_POST['title']); 
    $stmt->bindParam(':message', $_POST['message']); 

    $title = $_POST['title']; 
    $message = $_POST['message']; 

    $stmt->execute(); 

    header ('Location: index.php'); 
    exit; 
} 
?> 

<!DOCTYPE html> 

<html> 
<head> 
<title>Create blog post</title> 
<meta charset="utf-8" /> 
<link rel="stylesheet" href="reset.css" /> 
<link rel="stylesheet" href="style.css" /> 

</head> 

<body> 

<!--- Add blog post ---> 

<div class="add_form"> 
    <form id="add_post" method="post" action="post.php"> 
     <fieldset> 
      <legend>Create post</legend> 
      <label for="post_title">Title: 
       <input id="title" type="text" name="title" value="<?php if (isset($title)) { echo htmlentities ($title); } ?>" > 
      </label> 
      <label for="message">Message: 
       <textarea id="message" name="message" rows="20" cols="30" maxlength="50" value="<?php if (isset($message)) { echo htmlentities ($message); } ?>" ></textarea> 
      </label>           
     </fieldset> 
     <input id="send" type="submit" value="Send"> 
    </form> 
</div> 


</body> 

</html> 
+0

Положите все в Try/поймать блока и посмотреть, если вы ловите ошибки , – aynber

+1

@aynber, чтобы вы знали, исключения отлично видны БЕЗ любых блоков catch –

+0

В основном, если вы знаете, где искать :-) Блоки catch позволяют выводить его туда, где вы хотите, если есть ошибки. – aynber

ответ

0

Awser для последнего комментария:

@Corum Hi, I´m calling index.php in the form because index.php are displaying all the posts and after sending the form the user should be directed to index.php and be able to see the results... I really can´t seem to solve this:(

Если вы звоните index.php с <form action="index.php"> ваших данные формами не будет обработан.

Вместо этого вы должны позвонить post.php и после перенаправления на index.php.

Исправленный код (замените верхний PHP блок в файле post.php):

<?php 
if (!empty($_POST) { 
    // Only process if form is submitted (when page is launched, it use GET method) 
    require 'connect.inc.php'; 

    $db = new DB('blogdata'); 

    $stmt = $db->prepare("INSERT INTO blogposts (title, message, time) VALUES (:title, :message, :time)"); 

    $stmt->bindParam(':title', $_POST['title']); 
    $stmt->bindParam(':message', $_POST['message']); 
    $stmt->bindParam(':time', $time); 

    $title = $_POST['title']; 
    $message = $_POST['message']; 

    $stmt->execute(); 

    // Redirect to index.php 
    header('Location : index.php'); 
    exit; 
} 
?> 

И изменить HTML форму для: <form action="post.php" ...>

+0

Хорошо, это забрало текущую ошибку, но проблема все тот же, данные не войдут в базу данных, и после отправки формы она просто показывает post.php, нет ошибки, ничего не ... – Lisa

+0

Удалить 'enctype =" text/plain " ', добавьте' var_dump ($ _ POST); die(); 'сразу после' if (! empty ($ _ POST) {'и сообщить нам, что вы получаете. – Elorfin

+0

Я получаю это: array (2) {[" title "] => string (5)" super "[ "message"] => string (11) "bhbhbgkbgkj"} – Lisa

1

Вот собственно connect.inc.php файл:

<?php 
class DB extends PDO 
{ 
    public function __construct($dbname = "blogdata") 
    { 
     $opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 
     $dsn = "mysql:host=localhost;dbname=$dbname;charset=utf8"; 
     parent::__construct($dsn, "root", "", $opt); 
    } 
} 

Незнайка, если это вызвано ошибкой, но

And here is the post.php file:
<form id="add_post" method="post" action="index.php"

В любом случае, настоящая причина проблемы схожа с этим. Некоторая глупая опечатка где-то

+0

Привет! Я просто перехожу к этому и получил эту ошибку: Неустранимая ошибка: Не удалось исключить «PDOException» с сообщением «SQLSTATE [23000]: Нарушение ограничения целостности: 1048« Заголовок »столбца не может быть нулевым 'в – Lisa

+0

Кажется, что значения равны нулю во всех полях ... Я думал, что с чем-то это связано с полем ID и AI, поэтому я попытался добавить это: $ newId = $ db-> lastInsertId(); – Lisa

+0

Это именно то, что вы искали. Теперь вы можете либо прочитать и понять эту ошибку самостоятельно, либо google для этого (nota thetfulful part начинается с «Integrity») –

Смежные вопросы