使用PHP中的PDO将数据从HTML表单插入MySQL

时间:2013-09-25 22:41:17

标签: php html mysql forms pdo

我目前正在学习编写代码并努力解决如何正确使用PDO来构建基于PHP / MySQL的应用程序。以下代码应该从HTML表单中获取用户数据并插入到数据库中,但是当提交表单时,页面变为空白,不会返回任何错误消息,也不会向数据库添加任何内容。

感谢所有建议:

<?php
if ( empty( $_POST ) ){
?>
<form name='registration' action='user_register.php' method='POST'>
<label for 'title'>Title: </label>
<input type="text" name="title" />

<label for 'url'>URL: </label>
<input type="text" name="url" />

<label for 'contact'>Contact: </label>
<input type="text" name="contact" />

<label for 'category'>Category: </label>
<input type="text" name="category" />

<label for 'location'>Location: </label>
<input type="text" name="location" />

<label for 'founded'>Founded: </label>
<input type="text" name="founded" />

<label for 'rss'>RSS: </label>
<input type="text" name="rss" />

<label for 'twitter'>Twitter: </label>
<input type="text" name="twitter" />

<label for 'facebook'>Facebook: </label>
<input type="text" name="facebook" />

<label for 'google'>Google: </label>
<input type="text" name="google" />

<label for 'youtube'>YouTube: </label>
<input type="text" name="youtube" />

<label for 'pinterest'>Pinterest: </label>
<input type="text" name="pinterest" />

<label for 'instagram'>Instagram: </label>
<input type="text" name="instagram" />


<button type="submit">Submit</button>
</form>

<?php
} else {

try {

$db_user = 'testuser';
$db_pass = 'testpassword';
$db = new PDO( 'mysql:host=localhost;dbname=testdatabase', $db_user, $db_pass );

$form = $_POST;
$title = $form[ 'title' ];
$url = $form[ 'url' ];
$contact = $form[ 'contact' ];
$category = $form[ 'category' ];
$location = $form[ 'location' ];
$founded = $form[ 'founded' ];
$rss = $form[ 'rss' ];
$twitter = $form[ 'twitter' ];
$facebook = $form[ 'facebook' ];
$google = $form[ 'google' ];
$youtube = $form[ 'youtube' ];
$pinterest = $form[ 'pinterest' ];
$instagram = $form[ 'instagram' ];

$sql = "INSERT INTO testtable ( 
    title, url, contact, category, location, 
    founded, rss, twitter, facebook, 
    google, youtube, pinterest, instagram ) 
    VALUES ( 
    :title, :url, :contact, :category, 
    :location, :founded, :rss, :twitter, 
    :facebook, :google, :youtube, :pinterest, :instagram )";

$query = $db->prepare( $sql );
$query->execute( array( ':title'=>$title, ':url'=>$url, ':contact'=>$contact, ':category'=>$category, ':location'=>$location, ':founded'=>$founded, ':rss'=>$rss, ':twitter'=>$twitter, ':facebook'=>$facebook, ':google'=>$google, ':youtube'=>$youtube, ':pinterest'=>$pinterest, ':instagram'=>$instagram ) );

}
catch(PDOException $e)
{
echo $e->getMessage();
}
}

?>

5 个答案:

答案 0 :(得分:1)

好的,这是我的看法......

您可能在某处出现错误,并且没有正确报告它们用于开发目的(因此为空白屏幕)。

确保您的php.ini文件具有以下键/值对

error_reporting = E_ALL
display_errors = On

如果您需要进行任何更改,则需要重新启动Web服务器。

您应该做的另一件事是将PDO设置为抛出异常。将您的连接线更改为...

$db = new PDO('mysql:host=localhost;dbname=testdatabase;charset=utf8', $db_user, $db_pass, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC));

我还会在执行您的查询后添加某种形式的反馈,以便您至少知道发生了什么,例如

$query->execute(...);
printf('<p>Inserted %d row</p>', $query->rowCount());

最后,删除try和整个catch块。 PHP异常包含有用的调试信息。一旦你准备好生产,你就可以实现一个更全局的错误/异常处理机制,但是现在,我只是让异常冒泡并终止你的程序。

答案 1 :(得分:0)

第4行看起来像语法错误:

<form name='registration' action='user_register.php' method='POST'/>

变为:

<form name='registration' action='user_register.php' method='POST'>

编辑:正如有人提到的,这实际上不会阻止您的表单提交。

我已经盯着你的代码一段时间了,我看不出有什么理由不起作用。问题可能出在其他地方。

进行非常基本的测试以确保您的技术正常运行。我首先编写一个简单的4行脚本,在预准备语句中将一个值写入一个表中的一列,以确保PDO和MySQL处于联机状态。

答案 2 :(得分:0)

您正在处理的文件是什么?

action='user_register.php'

也许它是空白的,因为user_register.php不是正确的文件名?

action='<?php echo $_SERVER['PHP_SELF'];?>'

答案 3 :(得分:0)

我认为引用这些可能有所帮助,

Inserting data into MySQL with PHP PDO by HTML forms
Starting with PDO

答案 4 :(得分:-1)

<button type="submit">Submit</button>

应该是

<input type="submit" value="Submit" />

*至少我是这么认为的,如果我错了,请有人纠正我。