Php don';不要发送空值

Php don';不要发送空值,php,post,mysqli,Php,Post,Mysqli,我创建了一个更新Sql条目的代码,但是当您将一个值留空时,它会删除现有的值 <?php $servername = "localhost"; $username = "root"; $password = "HahahNo"; $dbname = "DATA"; $id = $_POST["id"]; $firstname = $_POST["firstname"]; $lastname = $_POST["lastname"]; $email = $_POST["email"]; //

我创建了一个更新Sql条目的代码,但是当您将一个值留空时,它会删除现有的值

<?php
$servername = "localhost";
$username = "root";
$password = "HahahNo";
$dbname = "DATA";
$id = $_POST["id"];
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "UPDATE MyGuests SET firstname='$firstname', lastname='$lastname', email='$email' WHERE id=$id";

if ($conn->query($sql) === TRUE) {
    echo "Success";
} else {
    echo "Error updating record: " . $conn->error;
}
?>

检查
$\u POST
是否包含值

首先检查
$\u POST
值是否已设置为(已过帐)

然后使用以下命令检查字符串是否为空:

编辑:自然更好,因为您只需要一次检查即可:

if (empty($_POST['firstname']) {
    echo 'Please enter first name';
} ...
感谢@Fred-ii-

编辑II:正如@alex所指出的

if ($_POST['firstname']) {
    echo 'Please enter first name';
} ...

这也行。检查
$\u POST
中是否包含值

首先检查
$\u POST
值是否已设置为(已过帐)

然后使用以下命令检查字符串是否为空:

编辑:自然更好,因为您只需要一次检查即可:

if (empty($_POST['firstname']) {
    echo 'Please enter first name';
} ...
感谢@Fred-ii-

编辑II:正如@alex所指出的

if ($_POST['firstname']) {
    echo 'Please enter first name';
} ...

这也行。在

中解释了您要查找的是用户提供数据的验证。你说得对-未阅读表单说明的用户可能会导致意外数据丢失。此外,SQL注入可能会造成更大的危害

首先检查您的领域是否符合最低要求。您可以验证电子邮件地址、邮政编码、电话号码、URL。。。但要回答你的问题,大女的回答是完美的

一旦您对数据满足数据库要求感到满意,请检查它是否安全。去除任何恶意SQL命令。您可以将准备好的语句与PDO或MySQLi一起使用


还要考虑数据的规格说明。每个字段的数据类型是字符串、整数还是浮点?您的网页使用什么字符集(UTF-8是一个安全的选择),因此,您的数据到达时使用什么字符集?您的数据库匹配吗(UTF8MB4是一个很好的伴侣)?

您需要的是验证用户提供的数据。你说得对-未阅读表单说明的用户可能会导致意外数据丢失。此外,SQL注入可能会造成更大的危害

首先检查您的领域是否符合最低要求。您可以验证电子邮件地址、邮政编码、电话号码、URL。。。但要回答你的问题,大女的回答是完美的

一旦您对数据满足数据库要求感到满意,请检查它是否安全。去除任何恶意SQL命令。您可以将准备好的语句与PDO或MySQLi一起使用


还要考虑数据的规格说明。每个字段的数据类型是字符串、整数还是浮点?您的网页使用什么字符集(UTF-8是一个安全的选择),因此,您的数据到达时使用什么字符集?您的数据库是否匹配(UTF8MB4是一个很好的伴侣)?

您可以在执行函数之前写入条件

//all values are not null then update is perform
    if(!is_null($firstname) && !is_null($lastname) &&  !is_null($email)){
      if ($conn->query($sql) === TRUE) {
        echo "Success";
      } else {
        echo "Error updating record: " . $conn->error;
      }
    }

您可以在执行函数之前写入条件

//all values are not null then update is perform
    if(!is_null($firstname) && !is_null($lastname) &&  !is_null($email)){
      if ($conn->query($sql) === TRUE) {
        echo "Success";
      } else {
        echo "Error updating record: " . $conn->error;
      }
    }


将值存储在sessionPaste中,并在此处粘贴代码。没有人会去第三方网站将您的代码粘贴在这里。@u\u mulder谢谢你的提示,我不知道怎么做。我已经为您完成了将值存储在会话中将您的代码粘贴在这里。没有人会去第三方网站把你的代码放在这里。@u\u mulder谢谢你的提示,我不知道怎么做。我已经为你做了。你有一些坚实的观点,但是,我要说的是,为了防止SQL注入,唯一真正的方法是使用准备好的语句(OPs甚至使用MySQLi-因此他可以这样做,您的示例中有过时的
mysql\uu
)。感谢@Qirel我更新了答案以删除
mysql\u real\u escape\u string()
您已经有了一些坚实的观点,但是,我想说,为了防止SQL注入,唯一真正的方法是使用准备好的语句(OPs甚至使用MySQLi-所以他可以这样做,你的例子中有过时的
mysql\uu
)。谢谢@Qirel我更新了答案以删除
mysql\u real\u escape\u string()
为什么不使用
if($\u POST['firstname')
?@alex,因为空字符串也会返回true。
$\u POST['first\u name']
已设置,但empty@Daenu空字符串将返回false NOT true,如所示,为什么不使用if($\u POST['firstname'])
?@alex,因为空字符串也将返回true。
$\u POST['firstname']
已设置,但empty@Daenu空字符串将返回false,而不是如所示的true