按日期过滤PHP和MySQL选择结果

时间:2015-06-22 08:34:22

标签: php mysql datetime phpmyadmin

我有一个页面(members.php)将日期发布到另一个页面(results.php)。使用下面的代码,我可以成功地从成员页面获取“to”和“from”变量。

<?php echo $_POST["to"]; ?>
<?php echo $_POST["from"]; ?> 

我现在的问题是,我如何创建一个查询(在results.php中),以便仅显示上述变量中​​指定的日期的过滤结果?我是否也需要创建一个sql连接和SQL查询?

3 个答案:

答案 0 :(得分:1)

如果日期为 <?php $host="localhost"; // Host name $username="root"; // Mysql username $password=""; // Mysql password $db_name="test123"; // Database name $con=mysql_connect("localhost","root",""); if(! $con) { die('Connection Failed'.mysql_error()); } mysql_select_db("test123",$con); if(isset($_FILES['files'])){ $errors= array(); foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){ $file_name = $key.$_FILES['files']['name'][$key]; $file_size =$_FILES['files']['size'][$key]; $file_tmp =$_FILES['files']['tmp_name'][$key]; $file_type=$_FILES['files']['type'][$key]; if($file_size > 2097152){ $errors[]='File size must be less than 2 MB'; } $query="INSERT into upload_data (`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$file_name','$file_size','$file_type'); "; $desired_dir="user_data"; if(empty($errors)==true){ if(is_dir($desired_dir)==false){ mkdir("$desired_dir", 0700); // Create directory if it does not exist } if(is_dir("$desired_dir/".$file_name)==false){ move_uploaded_file($file_tmp,"$desired_dir/".$file_name); }else{ // rename the file if another one exist $new_dir="$desired_dir/".$file_name.time(); rename($file_tmp,$new_dir) ; } mysql_query($query); }else{ print_r($errors); } } if(empty($error)){ echo "Success"; } } ?> <form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="files[]" multiple/> <input type="submit"/> </form> 格式,则可以按照以下方式使用,否则您需要更改格式。

您可以执行以下操作:

YYYY-mm-dd

答案 1 :(得分:0)

您应该连接到数据库并比较这两个日期:

$dateOne = $_POST["from"];
$dateTwo = $_POST["to"];

如果更大的日期为0,那么您应始终将其设置为成功查询数据的最高日期:

if(empty($dateTwo))
{
    $dateTwo =  date("31-12-Y");
    //If $dateTwo is null, than it will be 31/12/2015 otherwise query will now work well 
}

然后你应该写这样的SQL查询:

"SELECT * FROM `table` where `dateOne` > '$dateOne' and `dateTwo` < '$dateTwo'";

在这种情况下,如果用户希望所有日期都大于dateOne但不检查dateTwo,则此查询将返回大于dateOne的所有数据,并且低于当前年份的最高日期(在我们的情况下,它是&#39; s 31/21/2015)。

答案 2 :(得分:0)

它不一定创建一个新的SQL连接,而只是一个新的查询(建议你已经连接到数据库)。在我看来,如果你想在两个日期之间显示结果。

我没有检查现有值或空值,因为已经给出了日期。

所以:

<?php $start_date = $_POST["from"];
      $end_date   = $_POST["to"]; 

    //sql will be 
    $sql = "SELECT * FROM `your_table` WHERE `the_date_column` BETWEEN {$start_date} AND {$end_date}";
?> 

请不要这样做,使用mysqli或PDO连接层,并尝试转义变量以防止sql注入或更好地关闭,使用预处理语句。

相关问题