1

我目前正在学习编码并努力解决如何正确使用 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();
}
}

?>
4

5 回答 5

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 异常包含对调试有价值的信息。一旦你准备好生产,你可以实现一个更全局的错误/异常处理机制,但现在,我只是让异常冒泡并终止你的程序。

于 2013-09-25T23:35:40.880 回答
0

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

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

变成:

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

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

我已经盯着你的代码看了一段时间,我看不出它为什么不起作用的任何原因。问题可能出在其他地方。

进行非常基本的测试以确保您的技术正常工作。我将首先编写一个简单的 4 行脚本,在准备好的语句中将一个值写入一个表中的一列,以确保 PDO 和 MySQL 在线。

于 2013-09-25T22:58:45.133 回答
0

你正在处理的文件叫什么?

action='user_register.php'

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

尝试

action='<?php echo $_SERVER['PHP_SELF'];?>'
于 2013-09-25T23:05:35.410 回答
0

我认为参考这些可能会有所帮助,

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

于 2015-03-01T18:30:48.610 回答
-1
<button type="submit">Submit</button>

应该

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

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

于 2013-09-25T22:49:13.710 回答