Форма для формы с PHP - PullRequest
       2

Форма для формы с PHP

1 голос
/ 24 августа 2011

Я пытаюсь создать многошаговую форму, в которой пользователь заполняет форму на 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>

Я изменил после совет Марк, но я не знаю, как проверить, если SQL INSERT был в порядке.Может ли кто-нибудь дать мне подсказку по этому поводу?

спасибо заранее

Андрас

решение, так как я не смог ответить на свой вопрос (тайм-аут:):

Вот мой окончательный код, может быть немного простым, но он работает, и есть возможность проверить и обновить позже.Спасибо всем, особенно Марк.

<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 ]

1 голос
/ 24 августа 2011

Вы должны сохранить действие для того же сценария, чтобы действие POST все еще выполнялось, а затем перенаправить с помощью header("Location: page2.php");, когда обработка будет завершена.

1 голос
/ 24 августа 2011

Добавьте атрибут action с URL-адресом, на который вы хотите перейти.В этом случае это будет

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

РЕДАКТИРОВАТЬ: я скучал по вам, говоря, что этот метод не работает.Какая часть этого не работает?

0 голосов
/ 25 августа 2011

Я бы сохранил все это в массиве сеансов (или вложенном массиве)

действительно грубый пример, где я сохраняю все имена форм в массиве (чтобы позже проверить, конечно):

<?
foreach($_POST as $k => $v){
$session['register'][$k]=$v;}
?>
0 голосов
/ 24 августа 2011

Существует несколько способов обработки отправленных данных при переходе между шагами.Вы найдете свои причины для / против записи данных в сеанс, базу данных, что угодно ... после каждого шага или нет.

Я сделал следующий подход: форма всегда содержит полный набор элементов ввода, но на странице# 1 элементы step-2 скрыты ... и наоборот.

Я построил 6-ступенчатый мастер таким образом.Один большой шаблон, несколько JS / Ajax для проверки ввода, дополнительные скрытые вводы, которые содержат текущий идентификатор шага и PHP-решение, какие поля отображать или скрывать.

Преимущество, на мой взгляд: данные могут быть легко сохранены полностью, как только ввод в порядке и завершен.Нет обработки мусора, если пользователи прерывают после шага 1.

0 голосов
/ 24 августа 2011

Самый простой способ - опубликовать его в form2.php, указав в форме атрибут action = "page2.php". Но в этом есть риск. Это означает, что form2 должен проанализировать опубликованные данные form1. Кроме того, если данные неверны (проверка), форма1 должна быть показана вместо формы2. Это усложнит ваш код и создаст зависимости между двумя формами.

Таким образом, лучшее решение (и довольно простое) - реализовать шаблон post-redirect-get.

Вы отправляете в форму1, проверяете все данные и сохраняете их. Если данные в порядке, вы перенаправляете на form2. Если данные неверны, вы просто показываете form1 снова.

Перенаправление осуществляется с помощью заголовка:

// Officially you'll need a full url in this header, but relative paths 
// are accepted by all browsers.
header('Location: form2.php');
0 голосов
/ 24 августа 2011

Базовая структура, подобная этой, сделает это:

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 ...

И затем та же базовая структура для каждой последующей страницы. Всегда отправляйте форму обратно на страницу, с которой она пришла, и перенаправляйте на следующую страницу, если все в порядке.

0 голосов
/ 24 августа 2011

Сохраняйте уже опубликованные поля в скрытых полях ввода, но не забывайте проверять их каждый раз, когда пользователь отправляет еще один шаг формы, поскольку пользователь может изменить скрытые вводы в исходном коде.

<input type="hidden" name"some_name" value="submitted_value"/>
0 голосов
/ 24 августа 2011

Возможно, вам лучше отделить php-код от формы.Поместите код php в файл с именем submit.php, установите действие формы равным submit.php, а затем добавьте строку header('Location: whateverurl.com'); в свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...