PHP表单$\u POST传递数据,但变量有时为空

PHP表单$\u POST传递数据,但变量有时为空,php,mysql,forms,post,form-submit,Php,Mysql,Forms,Post,Form Submit,我有一个基于这个简单代码的表单。它在999/1000的情况下工作得很好,但昨天我在数据库中得到了空行,在电子邮件中得到了空变量。这以前从未发生过。我发现,填表格的客户是在手机上填的,安卓系统,填得很好,但后来我发现了空白变量。我真的不知道问题出在哪里,因为每次我测试它,它都能工作。有什么想法吗 <?php include 'dbconn.php'; require 'PHPMailerAutoload.php'; if(isset($_POST['submit'])) { $user

我有一个基于这个简单代码的表单。它在999/1000的情况下工作得很好,但昨天我在数据库中得到了空行,在电子邮件中得到了空变量。这以前从未发生过。我发现,填表格的客户是在手机上填的,安卓系统,填得很好,但后来我发现了空白变量。我真的不知道问题出在哪里,因为每次我测试它,它都能工作。有什么想法吗

<?php

include 'dbconn.php';
require 'PHPMailerAutoload.php';

if(isset($_POST['submit'])) {

$username=$_POST['username'];
$email=$_POST['email'];

$resultSet = $con->query("INSERT INTO `contact` (`username`,`email`) 
VALUES ('$username','$email')");

$message='Variable username:'.$username.', variable email: '.$email;   
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->addAddress($to);
$mail->Subject = 'Subject';
$mail->msgHTML($message);
$mail->WordWrap = 50;
$mail->send();

}

?>

形式如下:

<form method="post" action="">
Username: <input type="text" name="username" required> 
Email: <input type="email" name="email" required>
<input type="submit">
</form>

用户名:
电邮:

看起来您依赖于客户端验证,而客户端验证很容易被绕过

我建议在将用户名和电子邮件密钥插入数据库并发送电子邮件之前,检查$\u POST数组中的用户名和电子邮件密钥是否具有值

例如:

if (isset($_POST['username']) && isset($_POST['email'])) {
  // Insert and send email
}

并非所有浏览器都会尊重
required
属性,因此您应该在服务器端验证$\u POST值

比如:

<?php

include 'dbconn.php';
require 'PHPMailerAutoload.php';

if(isset($_POST['submit'])) {

$username=$_POST['username'];
$email=$_POST['email'];

if(isset($username) && isset($email)){
    $resultSet = $con->query("INSERT INTO `contact` (`username`,`email`) VALUES ('$username','$email')");

    $message='Variable username:'.$username.', variable email: '.$email;   
    $mail = new PHPMailer;
    $mail->CharSet = 'UTF-8';
    $mail->addAddress($to);
    $mail->Subject = 'Subject';
    $mail->msgHTML($message);
    $mail->WordWrap = 50;
    $mail->send();

    }
} else {
    // echo fail response
}
?>

您可以检查它们是否为null,如果为null,则不进行处理

<?php
include 'dbconn.php';
require 'PHPMailerAutoload.php';
if(isset($_POST['submit'])) {
    $username=$_POST['username'];
    $email=$_POST['email'];
    if(!is_null(trim($email))&& !is_null(trim($username))){
        $resultSet = $con->query("INSERT INTO `contact` (`username`,`email`) VALUES ('$username','$email')");
        $message='Variable username:'.$username.', variable email: '.$email;   
        $mail = new PHPMailer;
        $mail->CharSet = 'UTF-8';
        $mail->addAddress($to);
        $mail->Subject = 'Subject';
        $mail->msgHTML($message);
        $mail->WordWrap = 50;
        $mail->send();
    }
}
?>


在添加到dbI之前添加一个空检查,等待其他人指出安全漏洞。这容易受到SQL注入攻击。你还说你知道它是正确填写的--你怎么知道的?填写表格和空白行的客户联系了我们,所以我知道表格是通过mobileI正确填写的。我只是不相信用户的话。特别是若这是最好的方式之一;检查输入是否为空;使用
isset()
不是最好的方法。编辑:啊,在这里看到@nogad的评论,我没有看到。要添加,请使用三元运算符,如果为空,则使用默认值;这是另一种选择,或者只是让他们知道他们不能让它空。是的,我知道这一点,但空白行的情况发生时,客户实际上填写的形式。表单被正确地填写,并被发送到php,但随后它变成了空的。有可能在处理脚本时丢失数据吗?我真的不能回答这个问题。可能是人为错误或其他原因。我要做的是在处理数据之前检查服务器上的数据,这将避免很多麻烦!是的,谢谢你,但我知道空行的情况是通过正确填写而形成的。问题不在于有人发送空白表格。问题是,表单已填写,但数据已丢失。也许他们单击了提交按钮两次。。?