【发布时间】:2021-08-19 11:19:17
【问题描述】:
我想从指定的用户名获取日期时间并与今天的日期进行比较。我正在使用数据库。
$con = mysqli_connect("server", "name", "pass", "db");
if(!$con) {
die("noconn");
}
$HWID = "";
if(isset($_POST['HWID']) && !empty($_POST['HWID'])) {
$HWID = mysqli_real_escape_string($con, $_POST['HWID']);
$HWID = ($HWID);
}
elseif(isset($_GET['HWID']) && !empty($_GET['HWID'])) {
$HWID = mysqli_real_escape_string($con, $_GET['HWID']);
$HWID = ($HWID);
} else {
die("nodata");
}
$rows= "";
if(isset($_GET['Expire_Date'])){
$id=$_GET['Expire_Date'];
$sql="SELECT HWID FROM users WHERE Expire_Date='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
}
if (strtotime((new DateTime())->format("Y-m-d H:i:s")) > strtotime($rows)) {
die("valid");
} else {
die("invalid");
}
代码与 C# 配合使用
dataToSend["HWID"] = HWID();
string GetData = Encoding.UTF8.GetString(wc.UploadValues(@"http://127.0.0.1/test.php", dataToSend));
if (GetData == "valid")
{
MessageBox.Show("date is valid", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (GetData == "invalid")
{
MessageBox.Show("date is not valid", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
假设 HWID(硬件 ID)是数据库中的用户名 18585B53C213CA86DE91BE1E2772D66C6EC3F32F,并且指定的日期为 2021-07-01。所以当日期用完时,它会告诉无效,否则如果它没有用完,它会告诉有效。每次我尝试这段代码时,它都会给我有效。我不确定我是否正确指定了用户名或没有正确比较。
【问题讨论】:
-
strtotime($rows)- 您正在尝试从包含整行数据的数组创建时间戳。您只需选择一列,即包含实际日期的一列。 -
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
您在 PHP 中混合 API。
mysql_query不存在 -
strtotime((new DateTime())->format("Y-m-d H:i:s")看起来太复杂了。为什么不直接使用time()? -
$HWID = ($HWID);也没有多大意义。