Php不发送空值

时间:2016-01-30 09:40:14

标签: 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"];

// 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;
}
?>

有没有办法不清除未填写的值?我是个新手。

3 个答案:

答案 0 :(得分:3)

检查$_POST是否包含值。

首先检查isset()是否设置$_POST值(已发布)。

然后检查字符串是否为空strlen()

if (!isset($_POST['firstname'] || strlen($_POST['firstname']) == 0) {
    echo 'Please enter first name';
} else {
    // Do your DB update
}

修改:自然empty()更好,因为您只需要进行一次检查:

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

感谢@Fred -ii -

编辑II :正如@a​​lex指出

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

也会奏效。在PHP type comparison tables

中解释

答案 1 :(得分:1)

您正在寻找的是用户提供的数据的验证。您是对的 - 没有阅读表单说明的用户可能会导致意外的数据丢失。此外,malicious userinnocent child可能会因SQL注入而造成更多伤害。

首先检查您的字段是否符合最低要求。您可以验证电子邮件地址,邮政编码,电话号码,网址......但要回答您的问题,Daenu的答案是完美的。

一旦您满意,数据就会满足您的数据库&#39;要求,检查是否安全。剥去任何恶意SQL命令。您可以将预准备语句与PDO或MySQLi一起使用。

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

答案 2 :(得分:1)

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

downloadedOn