C# PHP SQL从用户名获取日期时间并与今天的日期进行比较
我想从指定的用户名获取日期时间,并与今天的日期进行比较。我在用数据库C# PHP SQL从用户名获取日期时间并与今天的日期进行比较,c#,php,mysql,sql,C#,Php,Mysql,Sql,我想从指定的用户名获取日期时间,并与今天的日期进行比较。我在用数据库 $con = mysqli_connect("server", "name", "pass", "db"); if(!$con) { die("noconn"); } $HWID = ""; if(isset($_POST['HWID']) && !empty
$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");
}
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = mysqli_connect("server", "name", "pass", "db");
$HWID = "";
if (!empty($_POST['HWID'])) {
$HWID = $_POST['HWID'];
} elseif (!empty($_GET['HWID'])) {
$HWID = $_GET['HWID'];
} else {
die("nodata");
}
$stmt = $con->prepare("SELECT Expire_Date FROM users WHERE HWID=?");
$stmt->bind_param('s', $HWID);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_object();
$Expire_Date = $row->Expire_Date;
if (new DateTime() > new DateTime($Expire_Date)) {
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。因此,当日期用完时,它将告诉无效,否则,如果它没有用完,它将告诉有效。每次我尝试这个代码时,它都会给我有效的消息。我不确定我是否正确指定了用户名,或者没有进行正确的比较。首先,您应该使用准备好的语句。如果您想使用mysqli,那么我将在下面向您展示如何使用它,但我强烈建议您改为学习PDO 您可以对照DateTime对象本身进行检查。不需要使用旧的strotime函数。您只需要从数据库中选择单个值
$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");
}
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = mysqli_connect("server", "name", "pass", "db");
$HWID = "";
if (!empty($_POST['HWID'])) {
$HWID = $_POST['HWID'];
} elseif (!empty($_GET['HWID'])) {
$HWID = $_GET['HWID'];
} else {
die("nodata");
}
$stmt = $con->prepare("SELECT Expire_Date FROM users WHERE HWID=?");
$stmt->bind_param('s', $HWID);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_object();
$Expire_Date = $row->Expire_Date;
if (new DateTime() > new DateTime($Expire_Date)) {
die("valid");
} else {
die("invalid");
}
正如El_Vanja所说,您的问题是strotime$行。当您使用$rows=mysql\u fetch\u array$result获取行时;如果您得到一个包含所有选定列的数组,那么请注意,从PHP5.5开始,该数组会贬值,并从PHP7.0及更高版本中删除。 当您读取strotime的时,您的第一个参数必须是字符串
要修复错误,只需替换$rows=mysql\u fetch\u array$result;by$rows=mysql_fetch_array$result[0];或者$rows=mysql_fetch_array$result[HWID];。Personnaly我更喜欢第二个更具可读性。strotime$rows-您试图从包含整行数据的数组中创建时间戳。您只需选择一列,即包含实际日期的列。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。您正在PHP中混合API。mysql\u查询不存在strottimenewdatetime->formatY-m-dh:i:s看起来太复杂了。为什么不干脆用时间来代替呢?$HWID=$HWID;也没有什么意义。我注意到它提供了一个要比较的HWID,而不是指定HWID中的数据库时间。@matthhh是的,我不知道从何处获取日期。我想从数据库中的指定HWID获取数据库时间。我删除了GET输入并交换了SELECT语句。这就是你的意思吗?第23行写着未定义的变量Expire_Date