2016-01-30 100 views
0

我創建了一個更新Sql條目的代碼,但是當您將值留空時,它會刪除現有值。Php不發送空值

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

有什麼辦法可以不清除未填寫的值嗎?我相當新的PHP。

+0

存儲在會話 –

+3

值粘貼在此處你的代碼。沒有人會去第三方網站 –

+0

在這裏粘貼你的代碼。 –

回答

3

檢查$_POST是否包含值。

首先檢查是否已設置$_POSTisset()(已發佈)。

然後檢查字符串不是空的,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-

Edit II:As poin由@alex提出

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

也可以工作。 PHP type comparison tables

+1

'empty()'更好 –

+1

@ Fred-ii-你是對的! –

+0

爲什麼不使用'if($ _ POST ['firstname'])'? – alex

1

你在找什麼是驗證用戶提供的數據。你是對的 - 沒有閱讀你的表單說明的用戶可能會導致意外的數據丟失。另外,malicious userinnocent child可能會對SQL注入造成更大的傷害。

首先檢查您的領域是否滿足最低要求。你可以驗證電子郵件地址,郵編,電話號碼,URL ......但要回答你的問題Daenu的答案是完美的。

一旦你滿意的數據符合你的數據庫的要求,檢查它是安全的。剝離任何惡意SQL命令。您可以使用PDO或MySQLi準備好的語句。

也想一想數據的規格。每個字段的數據類型是字符串還是整數或浮點數?你的網頁是什麼字符集(UTF-8是一個安全的選擇),因此你的數據到達哪個字符集?你的數據庫是否匹配(UTF8MB4是一個很好的伴侶)?

+0

你已經有了一些可靠的點,但是,我會說,爲了防止SQL注入,唯一的*真正*的方式是使用預準備語句(甚至使用MySQLi的操作系統 - 所以他可以做到這一點,你的例子有過時的'mysql_')。 – Qirel

+1

謝謝@Qirel我更新了答案,以刪除'mysql_real_escape_string()' – NoChecksum

1

你可以寫條件之前執行的功能,

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