插入记录

时间:2011-03-25 08:40:23

标签: php

更新1:

之前我从未遇到过PRG,有没有人在PHP中显示一些示例代码的链接显示了这一点?

原始问题:

什么更好,为什么?

如果我有注册表,我应该回发到表单本身插入数据库,还是应该将数据发布到另一个将数据插入数据库的页面?

2 个答案:

答案 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>

此:

  • 保留表单数据直至有效
  • 输出验证消息
  • 调用重定向/ GET循环以显示新创建的记录