[英]PHP: stored string date into MySQL date format, but the stored date turns out to be 1969-12-31
public function storeUser($name, $email, $password, $str_birthday) {
$uuid = uniqid('', true);
$hash = $this->hashSSHA($password);
$encrypted_password = $hash["encrypted_password"]; // encrypted password
$salt = $hash["salt"]; // salt
$tmp_dobformat = split('-', $str_birthday);
$tmp = $tmp_dobformat[2].'-'.$tmp_dobformat[1].'-'.$tmp_dobformat[0];
$dob = date('Y-m-d', strtotime($tmp));
$result = mysqli_query($this->db->connect(), "INSERT INTO users(unique_id, name, email, encrypted_password, birthday, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$dob', '$salt', NOW())");
// check for successful store
if ($result) {
// get user details
$result = mysqli_query($this->db->connect(), "SELECT * FROM users WHERE email = '$email'");
// return user details
return mysqli_fetch_array($result);
} else {
return false;
}
}
如果$ str_birthday是27-03-1982
那么它應該以1982-03-27
形式存儲在MySQL數據庫中。 但是無論輸入日期是什么,我在數據庫中只得到1969-12-31
。 我的代碼有什么問題?
補充說,我創建了一個index.html文件來檢查JSON響應。 這是index.html文件。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="index.php" method="post">
Tag: <input type="text" name="tag"><br>
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Password: <input type="password" name="password"><br>
Birthday: <input type="date" name="birthday"><br>
<input type="submit">
</form>
</body>
</html>
這是獲取POST變量並獲取JSON響應的index.php文件。
<?php
if (isset($_POST['tag']) && !empty($_POST['tag'])) {
$tag = $_POST['tag'];
// get the variables.
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$gender = $_POST['gender'];
$birthday = $_POST['birthday'];
echo $birthday;
// response Array
$response = array("error" => FALSE);
require_once 'mysql/DB_Functions.php';
$db = new DB_Functions();
if ($tag == 'register') {
// check if user is already exists
if ($db->userExists($email)) {
// user already exists - error response
$response["error"] = TRUE;
$response["error_msg"] = "User already exists";
echo json_encode($response);
} else {
// store user
$user = $db->storeUser($name, $email, $password, $gender, $birthday);
if ($user) {
// user successfully saved to MySQL database
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["gender"] = $user["gender"];
$response["user"]["birthday"] = $user["birthday"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "JSON Error occured in Registration";
echo json_encode($response);
}
}
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "Unknow 'tag' value. It should be either 'login' or 'register'";
echo json_encode($response);
}
} else {
$response["error"] = TRUE;
$response["error_msg"] = "Operation failed due to the missing tag!";
echo json_encode($response);
}
var_dump($_SERVER['REQUEST_METHOD'], $_POST);
?>
最后,這是我從直接在index.html文件中鍵入每個值得到的JSON響應。
{"error":false,"uid":"564901af9bb9f2.79708336","user":{"name":"Learning PHP","email":"learning@php.com","gender":"","birthday":"1969-12-31","created_at":"2015-11-15 17:05:35","updated_at":null}}string(4) "POST" array(5) { ["tag"]=> string(8) "register" ["name"]=> string(12) "Learning PHP" ["email"]=> string(16) "learning@php.com" ["password"]=> string(11) "learningphp" ["dob"]=> string(10) "1981-10-12" }
因此,獲取POST變量“ birthday”似乎沒有問題,但實際上是返回值。 1969-12-31。
最大的線索是要返回的日期。 1969-12-31
可能是某個負時區的1970-01-01
(例如GMT-05)。 1970-01-01
是Unix時間戳0。
這里的問題是date
函數是它的第二個參數,它需要Unix時間戳-一個數字值。 但是您要傳遞一個日期字符串。 PHP不知道如何處理字符串,因此將其轉換為0,然后date()
取零並返回您看到的日期。
實際上,您不需要所有拆分和合並等操作。如果$str_birthday
已在YYYY-MM-DD中格式化,則應該可以直接將其傳遞到數據庫中。
無關但更重要的是:不建議使用現有的SQL字符串。 您正在接受SQL注入攻擊。 例如,如果$name="');drop table users
則您會遇到麻煩。您應該使用mysqli_prepare代替。這是一些有關SQL注入的推薦讀物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.