首页 > 解决方案 > 表单验证 PHP 清理

问题描述

这是我的项目的示例代码。我有一个个人作品集,主要是一个静态页面,运行这个简单的 PHP 脚本来验证表单并向管理员发送电子邮件。

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

    $flag = $_POST['FLAG'];
    $name = trim(stripcslashes($_POST['name']));
    $email = trim(stripcslashes($_POST['email']));
    $message = trim(stripcslashes($_POST['message']));
    $success = false;

    $mail = new Mail($flag, $name, $email, $message, $config);   

    $result = $mail->validateFields();

    if($result) {
        $errors = $result;
    } elseif ($result == false) {
        $mail->sendEmail();
        $success = true;
    }    
}

任何想法如何改进我的代码?
我正在使用 swiftmailer 和第 3 方 MTA(mailgun)。
MAIL 类有 2 个方法:验证和发送。
validate 方法用于验证字段,如果没有发现错误则返回 false,否则返回带有错误消息的数组。
发送邮件正在使用 swiftmailer 发送电子邮件。任何想法如何让一切变得更好?我应该改变一些东西还是几乎可以?

class Mail
{
public $flag = null;
public $name = null;
public $email = null;
public $message = null;
public $config = null;
public $errors = [];

function __construct($flag, $name, $email, $message, $config)
{
    $this->flag = $flag;
    $this->name = $name;
    $this->email = $email;
    $this->message = $message;
    $this->config = $config;

}

public function validateFields()
{   
    if (!empty($this->flag)) {
    $this->errors[] = 'SPAM FILTER ERROR =)';
    }

    if ( empty($this->name) | !preg_match('/^[a-zA-Z\s]+$/', $this->name)) {
        $this->errors[] = 'Enter valid name';
    }

    if ( empty($this->email) | !filter_var($this->email, FILTER_VALIDATE_EMAIL)) { 
        $this->errors[] = 'Enter valid email address';
    }

    if ( empty($this->message) ) {
        $this->errors[] = 'Please enter a message';
    }

    if( empty($this->errors) ) {
        return false;

    } else {
        return $this->errors;
    }
}

public function sendEmail()
{
    $transport = (new Swift_SmtpTransport("{$this->config['SMTP']}", 25))
        ->setUsername("{$this->config['USERNAME']}")
        ->setPassword("{$this->config['PASSWORD']}");

    /// rest of email logic
}
}

任何建议将不胜感激!

谢谢。

标签: phpformsvalidationpostswiftmailer

解决方案


推荐阅读