Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PHP SQL从用户名获取日期时间并与今天的日期进行比较_C#_Php_Mysql_Sql - Fatal编程技术网

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