用PHP形成表格

时间:2011-08-24 16:32:29

标签: php forms

我正在尝试创建一个多步骤表单,用户将在page1.php上填写表单,并通过提交可以转到page2.php到下一个'表单'。什么是最简单的方法?

这是我的代码:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
?>

<form id="pdf" method="post">
New project name:<input type="text" name="pr_name" placeholder="new project name..."><br/>
New project end date:<input id="datepicker" type="text" name="pr_end" placeholder="yyyy-mm-dd..."><br/>

<textarea class="ckeditor" name="pagecontent"  id="pagecontent"></textarea>

<?php    
if ($_POST["pr_name"]!="")
{

  // data collection
  $prname = $_POST["pr_name"];
  $prend = $_POST["pr_end"];
  $prmenu = "pdf";
  $prcontent = $_POST["pagecontent"];

  //SQL INSERT with error checking for test 
  $stmt = $pdo->prepare("INSERT INTO projects (prname, enddate, sel, content) VALUES(?,?,?,?)");

  if (!$stmt) echo "\nPDO::errorInfo():\n";

  $stmt->execute(array($prname,$prend, $prmenu, $prcontent));
 }
// somehow I need to check this
if (data inserted ok) {
  header("Location: pr-pdf2.php");
 }
}

$sbmt_caption = "continue ->";
?>

<input id="submitButton" name="submit_name" type="submit" value="<?php echo $sbmt_caption?>"/>
</form>

我已经更改了Marc的建议,但我不知道如何检查SQL INSERT是否正常。  可以给别人一些暗示吗?

提前致谢

安德拉什

解决方案因为我无法回答我的问题(超时:):

这是我的最终代码,可能有点简单,但它可以工作,有可能在以后检查和升级。感谢大家特别是Marc。

<form id="pdf" method="post" action="pr-pdf1.php">
New project name:<input type="text" name="pr_name" placeholder="new project name..."><br/>
Email subject:<input type="text" name="pr_subject" placeholder="must be filled..."><br/>
New project end date:<input id="datepicker" type="text" name="pr_end" placeholder="yyyy-mm-dd..."><br/>

<textarea class="ckeditor" name="pagecontent"  id="pagecontent"></textarea>

<?php
include_once "ckeditor/ckeditor.php";
$CKEditor = new CKEditor();
$CKEditor->basePath = 'ckeditor/';
// Set global configuration (will be used by all instances of CKEditor).
$CKEditor->config['width'] = 600;   
// Change default textarea attributes
$CKEditor->textareaAttributes = array(“cols” => 80, “rows” => 10);
$CKEditor->replace("pagecontent");


if ($_SERVER['REQUEST_METHOD'] == 'POST')
 {
  // data collection
  $prname = $_POST["pr_name"];
  $prsubject = $_POST["pr_subject"];
  $prend = $_POST["pr_end"];
  $prmenu = "pdf";
  $prcontent = $_POST["pagecontent"];

  //SQL INSERT with error checking for test 
  $stmt = $pdo->prepare("INSERT INTO projects (prname, subject, enddate, sel, content) VALUES(?,?,?,?,?)");
  // error checking
  if (!$stmt) echo "\nPDO::errorInfo():\n";
  // SQL command check...
  if ($stmt->execute(array($prname, $prsubject, $prend, $prmenu, $prcontent))){
   header("Location: pr-pdf2.php");
     }
      else{
       echo"Try again because of the SQL INSERT failing...";
      };
   }

$sbmt_caption = "continue ->";
?>

<input id="submitButton" name="submit_name" type="submit" value="<?php echo $sbmt_caption?>"/>
</form>

8 个答案:

答案 0 :(得分:1)

使用您要转到的网址添加属性action。在这种情况下,它将是

<form id="pdf" method="post" action="page2.php">

编辑:我想念你说这个方法不起作用。它的哪一部分不起作用?

答案 1 :(得分:1)

您应该将操作保留在同一个脚本中,因此仍然会执行POST操作,然后在处理完成后使用header("Location: page2.php");重定向。

答案 2 :(得分:0)

你可能最好将php代码与表单分开。将php代码放在名为submit.php的文件中,将表单操作设置为等于submit.php,然后将行header('Location: whateverurl.com');添加到您的代码中。

答案 3 :(得分:0)

将已发布的字段保存在隐藏的输入字段中,但每次用户提交表单的另一个步骤时都不要忘记验证它们,因为用户可能会更改源代码中的隐藏输入。

<input type="hidden" name"some_name" value="submitted_value"/>

答案 4 :(得分:0)

这样的基本结构可以做到:

form1.php:

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... process form data here ...
   if (form data ok) {
       ... insert into database ...
   }
   if (data inserted ok) {
      header("Location: form2.php");
   }
}
?>

... display page #1 form here ...

然后为每个后续页面提供相同的基本结构。始终将表单提交回它来自的页面,如果一切正常,则重定向到下一页。

答案 5 :(得分:0)

最简单的方法是通过赋予表单属性action =“page2.php”将其发布到form2.php。但那里存在风险。这意味着form2必须解析form1的已发布数据。此外,如果数据错误(验证)必须显示form1而不是form2。这将使您的代码变得复杂并在两种形式之间创建依赖关系。

所以更好的解决方案(也很简单)就是实现post-redirect-get模式。

您发布到form1,验证所有数据并存储它。如果数据正常,则重定向到form2。如果数据错误,您只需再次显示form1。

重定向由标题:

完成
// Officially you'll need a full url in this header, but relative paths 
// are accepted by all browsers.
header('Location: form2.php');

答案 6 :(得分:0)

在步骤之间跳转时,有几种方法可以处理提交的数据。 你会发现/反对将数据写入会话,数据库,以及在每一步之后是否......的原因。

我做了以下方法: 表单总是包含一整套输入元素,但在第1页上,步骤2元素被隐藏......以及其他方式。

我用这种方式构建了一个6步向导。一个大模板,一些用于验证输入的JS / Ajax,用于保存当前步骤ID和PHP决定的其他隐藏输入,显示或隐藏哪些字段。

我认为合适:只要输入完好无损,数据就可以轻松保存。如果用户在步骤1之后中止,则不进行垃圾处理。

答案 7 :(得分:0)

我会将它全部存储在会话数组(或子数组)

一个非常粗略的例子,我将所有表单名称保存到数组中(当然稍后要检查):

<?
foreach($_POST as $k => $v){
$session['register'][$k]=$v;}
?>