更新1:
之前我从未遇到过PRG,有没有人在PHP中显示一些示例代码的链接显示了这一点?
原始问题:
什么更好,为什么?
如果我有注册表,我应该回发到表单本身插入数据库,还是应该将数据发布到另一个将数据插入数据库的页面?
答案 0 :(得分:4)
因为应该在POST请求之后进行HTTP重定向并不重要。
但是,最常见的做法是发送到相同的网址,如/POST/Redirect/GET模式中描述的那样
一个简明的例子:
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
$err = array();
//performing all validations and raising corresponding errors
if (empty($_POST['name']) $err[] = "Username field is required";
if (empty($_POST['text']) $err[] = "Comments field is required";
if (!$err) {
//if no errors - saving data
// ...
// and then redirect:
header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
// all field values should be escaped according to HTML standard
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
} else {
$form['name'] = $form['comments'] = '';
}
$tpl = 'form.tpl.php';
include 'main.tpl.php';
?>
其中form.tpl.php
是模板包含带有PHP代码的HTML表单,用于显示$form
数组中的表单值
<? foreach ($err as $line): ?>
<div style="error"><?=$line?></div>
<? endforeach ?>
<form method="POST">
<input type="text" name="name" value="<?=$form['name']?>"><br>
<textarea name="comments"><?=$form['comments']?></textarea><br>
<input type="submit"><br>
</form>
和main.tpl.php
是主要的网站模板,如下所述:Using Template on PHP
答案 1 :(得分:0)
通常的逻辑是:
<?php
if ($_POST) {
... validate the data ...
if ($valid) {
... insert into database ...
$id = mysql_last_insert_id();
header('Location: /view.php?id=' . $id);
exit;
}
}
?>
...
<form action="thispage.php">
<input name="foo" value="<?php echo isset($_POST['foo']) ? htmlentities($_POST['foo']) : null; ?>">
<?php if (... foo failed validation ...) : ?>
<p class="error">Please enter a valid foo!</p>
<?php endif; ?>
<input type="submit">
</form>
此: