【问题标题】:Header Redirect after form Validation in PHPPHP中表单验证后的标头重定向
【发布时间】:2014-04-08 12:03:48
【问题描述】:

我正在尝试将此代码作为表单处理的一部分:

<?php

if(isset($_POST['senderEmail'])) 
    {
     try
     {

     require '_php/_security/validation.php';  //SEE BELOW

     $rules = array(               
            'senderEmail' => 'validEmail',
            'emailTextbox' => 'validTextbox',
        );

        $validation = new Validation();

        if ($validation->validate($_POST, $rules) == TRUE) {  
            require("_php/database/dbProcessing.php"); //Form Proccessing for database inclusion
        }

        else {  
          foreach($validation->emailErrors as $error){
            $emailErrors[] = $error;
            $_SESSION['$emailErrors'] = $emailErrors;

            header('Location:indexmobile.php#emailErrors'); 
            die('ABORT!');
        }
    }

    }
   catch (PDOException $e)
    {

      $error = 'Error adding elements to database: ' . $e->getMessage();
      echo "Error: " . $error;
      exit();
    }

exit();
}
?>

我进行验证的validation.php有这个:

<?php

class Validation {

public $errors = array();
public function validate($data, $rules) {
    $valid = TRUE;
    foreach ($rules as $fieldname => $rule) {
        $callbacks = explode('|', $rule);
        foreach ($callbacks as $callback) {
            $value = isset($data[$fieldname]) ? $data[$fieldname] : NULL;
            if ($this->$callback($value, $fieldname) == FALSE) $valid = FALSE;
        }
    }
   return $valid;
}

public function validEmail($value, $fieldname) {
    $valid = !empty($value); 
    if ($valid  == FALSE) {
        $this->emailErrors[] = "The $fieldname is required";
        return $valid;
    } else {
        $valid = filter_var($value, FILTER_VALIDATE_EMAIL);
        if ($valid  == FALSE) $this->emailErrors[] = "The $fieldname needs to be a valid email";
        return $valid;
    }
}

public function validTextbox($value, $fieldname) {
    $valid = !empty($value);   
    if ($valid  == FALSE) {
        $this->emailErrors[] = "The $fieldname is required";
        return $valid;
    } else {
        $whitelist = '/^[a-zA-Z0-9 ,\.\+\\n;:!_\-@]+$/';  
        $textarea = strip_tags($value);
        $textarea = mysql_real_escape_string($textarea);  
        $valid = preg_match($whitelist, $textarea);
        if ($valid  == FALSE) $this->errors[] = "The $fieldname contains invalid characters";
        return $valid; 
     }
  }

}

使用此功能后,我遇到了重定向问题(我认为)。似乎我在验证中有错误。因此,我的问题是:

  1. 我是否正确地进行了标头重定向?我读过“必须在发送任何实际输出之前调用 header(),..”所以这就是这个重定向不正确的原因吗?如果我需要向重定向页面显示/发送内容,如何进行重定向?
  2. function validTextbox 总是以字段为空的错误结束。为什么会这样?
  3. 我的整个表单验证过程是否是验证表单字段的好方法(我从观看在线教程中学到的)?有什么更好的方法?
  4. 在这种情况下,错误报告是否有问题?

感谢回复的人。我是 PHP 新手,正在努力学习这门语言。

【问题讨论】:

    标签: php forms validation redirect header


    【解决方案1】:

    1 - 有几种方法可以将消息传递到您要重定向到的页面。一个是通过$_GET这样的

    $message="Some message for the next page.";
    $message=urlencode($message);
    header("Location:page.php?message=".$message);
    

    然后在 page.php 上

    if(!empty($_GET['message']))
    {
    $_GET['message'];
    }
    

    同样你也可以使用会话(不太安全)

    $_SESSION['message']='some other message';
    

    然后在 page.php 上

    if (!empty($_SESSION['message']))
    {
    echo $_SESSION['message'];
    unset($_SESSION['message']);
    }
    

    2 - 我必须看看你传递给validate 函数的内容。你应该做一个var_dump$_POST 并将其添加到你的问题中。

    3 - 这取决于您的标准。如果您只是检查是否有空,那就大材小用了。我不知道您需要/认为有效的文本,但正则表达式是一种合理的强制验证方式。

    4 - 见 #2。

    【讨论】:

    • 非常感谢您的回复。我很确定你的
    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 2013-02-17
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多