我目前正在学习编写代码并努力解决如何正确使用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();
}
}
?>
答案 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)
答案 4 :(得分:-1)
<button type="submit">Submit</button>
应该是
<input type="submit" value="Submit" />
*至少我是这么认为的,如果我错了,请有人纠正我。