2014-01-13 20 views
-2

这是我简而言之做:如何在成功进行PHP验证后自动提交表单数据?

<?php 
// define variables and initialize with empty values 

//error variables 
$agentNameErr = ""; 

//non-error variables 
$agentemail = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

if (empty($_POST["agentname"])) { 
     $agentNameErr = "Missing"; 
    } 
else { 
     $agentname = $_POST["agentname"]; 
    } 
} 

// form 

<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" > 

<input name="agentname" type="text" id="agentname" autocomplete="on" placeholder="Agent Name" value= "<?php echo htmlspecialchars($agentname);?>" /> 

//only shows up if $agentNameErr is assigned the value of "Missing" 

<span class="error"><?php echo $agentNameErr;?></span> 

</form> 

它检查是否$agentname是错误的(空白)。如果它不是空白的,我不知道如何继续。我希望它能够自动提交所有信息,而不需要任何额外的用户输入到评论页面,以便用户可以看到名称拼写是否正确。然后他们可以做最后的提交。

我不知道MySQL。

在正常的英语:

//user presses the submit button 

if ($agentname has error) 
    stay on page and display errors 
else 
    submit automatically to next page (order review page for visual checking) 

我该怎么办,以“自动提交到下一个页面”?

+0

您正在发布此表单本身吗?如果您希望进行下一步操作,您应该将'action'属性设置为下一页,并在那里进行验证,如果不正确,请将其重定向回此页面。 – mituw16

+0

您是否希望用户转到下一页或将数据输入到数据库中?通过自动提交到下一页是什么意思? – ChaseC

+1

@Ed,如果javascript被禁用(我知道很少见,但必须保护你自己)呢?服务器端验证结合js是很好的。仅仅依靠js验证是不好的做法, – mituw16

回答

0

使用php会话。

if ($agentname has error) 
    stay on page and display errors 
else 
{ 
    $_SESSION['key1'] = 'something' 
    $_SESSION['key2'] = 'something else' 
    ... 
    header('location: ' . $next_page); 
} 

如果你不知道如何使用PHP会话看到的例子here

+0

我明白了。所以它回到更改标题去下一页。 使用标题方法有没有可能的缺点?有大量的数据被发送(比如20+表单条目)。 – fuzzybabybunny

+0

我可以想到的没有缺点。只要确保在调用标头函数之前不显示任何html,否则您可能会收到警告,说明标头已经发送。就数据大小而言,您可以发布的数据量由您的php.ini文件设置,我相信默认值为8MB(通常绰绰有余),只要数据发布到您的服务器并将其切换过度存储在会话变量中应该没有问题。 – elitechief21

0

试试这个:

<?php 

    $agentNameErr = ""; 
    $agentemail = ""; 

    if ($_SERVER["REQUEST_METHOD"] == "POST") { 

     if (empty($_POST["agentname"])) { 
      $agentNameErr = "Missing"; 
     } else { 
      $agentname = $_POST["agentname"]; 
      header("Location: nextpage.php?agent=".$agentname); 
     } 
    } else { 

    ?> 

    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" > 

    <input name="agentname" type="text" id="agentname" autocomplete="on" placeholder="Agent Name" value= "<?php echo htmlspecialchars($agentname);?>" /> 

    //only shows up if $agentNameErr is assigned the value of "Missing" 
    <?php if(!empty($agentNameErr)) { ?> 
    <span class="error"><?php echo $agentNameErr;?></span> 
    <?php } ?> 
    </form> 
<?php } ?> 
+0

这是一个例子。要将代理名称发送到另一个页面,您可以使用会话或使用fsockopen通过POST方法发送数据(如果此数据真的安全,也可以使用加密算法,如交换字节)。 – Stafox

0

保持简单。捕获表单的全部内容并存储在会话变量中。

$agentNameErr = ''; 
$agentemail = ''; 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (empty($_POST['agentname'])) { 
     $agentNameErr = 'Missing'; 
    } else { 
     $_SESSION['agent-form'] = $_POST; 
     // Move to next page 
     header('Location: nextpage.php'); 
     exit; 
    } 
} 

一旦转发到下一页,您可以从会话变量中访问表单数据。

// Entire contents of form 
print_r($_SESSION['agent-form']); 
// "agentname" data 
print_r($_SESSION['agent-form']['agentname']);