【问题标题】:Passing many variables from PHP back to a form将许多变量从 PHP 传递回表单
【发布时间】:2013-06-02 17:02:59
【问题描述】:

我有一个提交用户填写的许多不同字段的表单。

PHP 页面接收表单并检查是否所有字段都已填写。如果缺少其中之一,则应返回表单并指定缺少哪一个。

我想知道最好的方法是将我的 PHP 站点中捕获的所有字段传递回表单页面,这样用户就不必重新填写整个表单。

这是我的检查方式:

if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip))
{
header('Location: checkout.php');
}

我不想通过 URL 传递它们,因为可能有许多其他字段需要检查,而且看起来有点繁重......通常用哪种方式来实现这一点?

谢谢!

【问题讨论】:

  • 我认为您可以在提交之前验证表单
  • 只发布到表单页面而不是其他地方,或者使用包含来包含表单而不是重定向。或者将字段存储在会话中。有很多选择。
  • 这是同时拥有客户端和服务器端验证的地方。通过在发布表单之前检查字段是否为空,您无需担心重新填充具有值的字段

标签: php forms variables parameter-passing


【解决方案1】:

试试下面的方法

$validate_fields_arr = array('firsName', 'lastName', ...)       
$returntourl = false;
foreach($validate_fields_arr as $v){
    if(empty($_POST[$v]))
        $returntourl = true;
}

if($returntourl){
    $return_str  = '<html><title>ERROR!</title><body><h3>ERROR on data submitted!</h3>';
    $return_str .= '<form action="checkout.php" method="post" name="retfrm">';
    foreach($_POST as $k=>$v){
        $return_str .= '<input type="hidden" name="'.$k.'" value="'.$v.'">';
    }
    $return_str .= '</form>';
    $return_str .= '</body><script>document.retfrm.submit()</script></html>';
    echo $return_str;
    exit;
}

【讨论】:

    【解决方案2】:

    如果您不确定如何操作,最好的方法是使用框架。如果这不是一个选项,那么我通常有一个函数来检查是否有已发布的值,并在必要时将其打印出来:

    function getElementValue($elementName)
    {
        if (isset($_POST[$elementName]))
        {
            return htmlspecialchars($_POST[$elementName]);
        }
    
        return '';
    }
    

    在你的页面中:

    <input type="text" name="firstName" value="<?php echo(getElementValue('firstName')); ?>" />
    

    您需要一个类似但不同的复选框等功能。

    【讨论】:

      【解决方案3】:

      将变量保存在会话中,然后在表单页面上,回显会话变量。您也可以通过创建另一个会话变量(如 $_SESSION['error_msg'] 并添加到其中)以这种方式传回错误消息。

      session_start();
      
      $errors = array();
      
      if(empty($firstName)){
          $errors[] = 'Please enter your first name';
      }
      if(empty($lastName)){
          $errors[] = 'Please enter your last name';
      }
      if(empty($address)){
          $errors[] = 'Please enter your address';
      }
      if(empty($city)){
          $errors[] = 'Please enter your city';
      }
      if(empty($state)){
          $errors[] = 'Please enter your state';
      }
      if(empty($zip)){
          $errors[] = 'Please enter your zip code';
      }
      
      
      if(!empty($errors)){
          $_SESSION['firstName'] = $firstName;
          $_SESSION['lastName'] = $lastName;
          $_SESSION['address'] = $address;
          $_SESSION['city'] = $city;
          $_SESSION['state'] = $state;
          $_SESSION['zip'] = $zip;
          $_SESSION['errors'] = $errors;
          header('Location: checkout.php');
          exit;
      }
      

      【讨论】:

        【解决方案4】:

        你为什么不在发布到其他页面之前检查它们是否为空,如果它们都是好的重定向,则显示错误

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

        无论如何,你的问题的答案

        您有几个选择,您可以将它们单独存储到会话中,也可以将它们作为数组存储到会话中,然后在检索完所有内容后取消设置索引

        您可以通过 GET 参数传递,虽然看起来很长,而且 get 不是最安全的使用方法,因为它很重,您不会注意到页面加载时间有任何明显的差异,也不应该太在意网址的外观

        如果你有一个数据库,你可以将它存储在一个表中,并在下一页加载时读取和删除它

        【讨论】:

          猜你喜欢
          • 2013-08-29
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-31
          • 2012-08-15
          • 2017-07-24
          • 1970-01-01
          相关资源
          最近更新 更多