Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Php 从日期开始在两个日期之间搜索以及文本搜索查询_Php_Mysql - Fatal编程技术网

Php 从日期开始在两个日期之间搜索以及文本搜索查询

Php 从日期开始在两个日期之间搜索以及文本搜索查询,php,mysql,Php,Mysql,我尝试过寻找一个解决方案,我对PHP非常陌生,虽然我已经看过了,但似乎并没有一个解决方案可以帮助设置数据格式 我现在还不太关心SQL注入和安全性,因为这是为了交作业,只是一些关于如何获得所需结果的建议 我有一个网页,我想在数据库中搜索关键字,但也可选我想添加一个时间框架搜索 例如,我可以使用文本搜索来搜索姓名、医生、病情和药物,但我也可以选择(因为我希望能够在不使用日期限制的情况下进行搜索)使用搜索appdatefrom和appdateto来缩小预约日期 我正在到达那里 SQL错误:您的SQL语

我尝试过寻找一个解决方案,我对PHP非常陌生,虽然我已经看过了,但似乎并没有一个解决方案可以帮助设置数据格式

我现在还不太关心SQL注入和安全性,因为这是为了交作业,只是一些关于如何获得所需结果的建议

我有一个网页,我想在数据库中搜索关键字,但也可选我想添加一个时间框架搜索

例如,我可以使用文本搜索来搜索姓名、医生、病情和药物,但我也可以选择(因为我希望能够在不使用日期限制的情况下进行搜索)使用搜索appdatefrom和appdateto来缩小预约日期

我正在到达那里

SQL错误:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解第5行“WHERE visitdate介于“2001-01-01”和“2015-01-01”之间的“ORDER BY visitdate ASC”附近使用的正确语法

目前数据库中我的访问日期格式为2014-04-20 01:23:43

我发现这很难做到,因为时间戳格式

数据库如下所示。因为某种原因,我不能用XAMP得到一个好的ERD?所以我创造了一个

该页面的代码如下所示

    <?php // Include config file
include("$_SERVER[DOCUMENT_ROOT]/freddies/inc/config.php");
include("$_SERVER[DOCUMENT_ROOT]/freddies/inc/functions.php");
include("$_SERVER[DOCUMENT_ROOT]/freddies/inc/header.php");

$sql  = "SELECT patient.fName AS fname, patient.sName AS surname, doctor.sName AS doc, conditions.con_name AS con, drugs.medication AS meds, visit.visitdate, visit.visit_id AS visitid  FROM visit 
            JOIN patient ON visit.patient_id = patient.patient_id
            JOIN doctor ON visit.doctor_id = doctor.doctor_id
            LEFT JOIN conditions ON visit.con_id = conditions.con_id
            LEFT JOIN drugs ON visit.drugs_id = drugs.med_id";

if (isset($_POST['search'])) {

$search_term = ($_POST['searchapp']);
$appdatefrom = ($_POST['appdatefrom']);
$appdateto = ($_POST['appdateto']);

$sql .= " WHERE patient.fName LIKE '%".$search_term."%'";
$sql .= " OR patient.sName LIKE '%".$search_term."%'";
$sql .= " OR doctor.sName LIKE '%".$search_term."%'";
$sql .= " OR conditions.con_name LIKE '%".$search_term."%'";
$sql .= " OR drugs.medication LIKE '%".$search_term."%'";
$sql .= " WHERE visitdate BETWEEN '".$appdatefrom."' and '".$appdateto."'";
$sql .= " ORDER BY visitdate ASC";
}

$query = mysqli_query($db, $sql);

if (!$query) {
  die ('SQL Error: ' . mysqli_error($db));
  }

?>

<body>
<div class="container"><br><br>
<?php include("$_SERVER[DOCUMENT_ROOT]/freddies/inc/logo.html"); ?>

  <h2>APPOINTMENTS</h2>

  <p>Search Recent Appointments:</p>      

    <form name="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
                    <div class="form-group row">
                    <div class="col-xs-4">
                            <label>Search for Patient, Doctor, Medication or Condition</label> 
                            <input type="text"  class="form-control" name="searchapp" placeholder="Example. Dr Mears, Tonsillitis, Vimovo, Andrew" required><br>
                    </div>   
                    <div class="col-xs-4">                         
                            <label>Date From:</label> 
                            <input type="date"  class="form-control" name="appdatefrom"><br>
                    </div>   
                    <div class="col-xs-4"> 
                            <label>Date To:</label> 
                            <input type="date"  class="form-control" name="appdateto"><br> 
                    </div>   
                    <div class="col-xs-4">                            
                            <input type="submit" class="btn btn-primary" name="search" value="Submit">
                            <span class="help-block"></span>
                            </div>
                        </div>      



  <table class="table table-striped">
  <thead>
      <tr>
        <th>Patient Name</th>
        <th>Doctor</th>
        <th>Condition</th>
        <th>Medication Prescribed</th>
        <th>Visit ID</th>
        <th>Date</th>
        <th></th>
      </tr>
    </thead>
    <tbody>
    <?php
        $no     = 1;
        $total  = 0;
        while ($row = mysqli_fetch_array($query)) 
        {
            echo '<tr>
                    <td>'.$row['fname']." ".$row['surname'].'</td> 
                    <td>'."Dr ".$row['doc'].'</td> 
                    <td>'.$row['con'].'</td> 
                    <td>'.$row['meds'].'</td> 
                    <td>'.$row['visitid'].'</td>
                    <td>'.$row['visitdate'].'</td>
                    <td><a href="viewapp.php?id='.($row['visitid']).'" class="btn btn-warning pull-right btn-xs">View</a></td> 
                    <td><a href="delapp.php?id='.($row['visitid']).'" class="btn btn-danger pull-right btn-xs">Delete</a></td>
                    </tr>';    
            $no++;
        }?>
    </tbody>
  </table>
  <a href="newapp.php" class="btn btn-success pull-left">New Appointment</a>
  <a href="" class="btn btn-info pull-left">Refesh</a>
  <a href="../" class="btn btn-info pull-right">Admin Area</a>
</div>
<div class="bottompadding"></div>
<?php include("$_SERVER[DOCUMENT_ROOT]/freddies/inc/footer.php"); ?>
</body>
</html>

每个查询只能有一个WHERE子句。如果要将日期范围与搜索相结合,请使用和,并使用括号中的一组或条件

$sql .= " WHERE visitdate BETWEEN '".$appdatefrom."' and '".$appdateto."'";
$sql .= " AND (patient.fName LIKE '%".$search_term."%'";
$sql .= " OR patient.sName LIKE '%".$search_term."%'";
$sql .= " OR doctor.sName LIKE '%".$search_term."%'";
$sql .= " OR conditions.con_name LIKE '%".$search_term."%'";
$sql .= " OR drugs.medication LIKE '%".$search_term."%')";
$sql .= " ORDER BY visitdate ASC";

使用括号将指定
a和b或c或d
将被评估为
a和(b或c或d)
,而不是
(a和b)或c或d
,每个查询只能有一个WHERE子句。如果要将日期范围与搜索相结合,请使用和,并使用括号中的一组或条件

$sql .= " WHERE visitdate BETWEEN '".$appdatefrom."' and '".$appdateto."'";
$sql .= " AND (patient.fName LIKE '%".$search_term."%'";
$sql .= " OR patient.sName LIKE '%".$search_term."%'";
$sql .= " OR doctor.sName LIKE '%".$search_term."%'";
$sql .= " OR conditions.con_name LIKE '%".$search_term."%'";
$sql .= " OR drugs.medication LIKE '%".$search_term."%')";
$sql .= " ORDER BY visitdate ASC";


使用括号将指定
a和b或c或d
将被评估为
a和(b或c或d)
,而不是
(a和b)或c或d

使用参数化查询。这将解决引用问题并防止SQL注入。用PHP格式化日期也非常简单。查找date()函数。我已经用得到的错误代码更新了问题。另外,我现在不太关心SQL注入等,因为这只是一个任务。好吧,那么你是如何在你的计划中定义
visitdate
的呢?你不能有两个位置。哦,天啊,我盯着它看了很久了,完全错过了它。DUH@Don't禁止使用参数化查询。这将解决引用问题并防止SQL注入。用PHP格式化日期也非常简单。查找date()函数。我已经用得到的错误代码更新了问题。另外,我现在不太关心SQL注入等,因为这只是一个任务。好吧,那么你是如何在你的计划中定义
visitdate
的呢?你不能有两个位置。哦,天啊,我盯着它看了很久了,完全错过了它。DUH@Don'tPanici在输入日期时将其更改为和。它忽略了我输入的日期,只显示了第一个框中搜索到的所有数据,而不考虑日期。是否将所有ORs组合在括号中?这通常是这种组合和/或条件发挥作用所必需的。我已经按照你所说的那样做了,现在没有显示任何结果?我不知道我是否遗漏了什么,我不确定。我根据您问题中的原始代码进行了回答,给出了您当时遇到的语法错误的一般原因,并展示了如何结合和使用多个OR条件,但如果不了解代码中的更改,知道您的输入和数据库中的内容,就很难从那里进行调试,我尝试在CAST(“$appdatefrom.”AS DATE)和CAST(“$appdateto.”AS DATE)之间添加$sql.=”和visitdate;但这是一样的吗?我把它改成了和,当输入日期时。它忽略了我输入的日期,只显示了第一个框中搜索到的所有数据,而不考虑日期。是否将所有ORs组合在括号中?这通常是这种组合和/或条件发挥作用所必需的。我已经按照你所说的那样做了,现在没有显示任何结果?我不知道我是否遗漏了什么,我不确定。我根据您问题中的原始代码进行了回答,给出了您当时遇到的语法错误的一般原因,并展示了如何结合和使用多个OR条件,但如果不了解代码中的更改,知道您的输入和数据库中的内容,就很难从那里进行调试,我尝试在CAST(“$appdatefrom.”AS DATE)和CAST(“$appdateto.”AS DATE)之间添加$sql.=”和visitdate;但这是一样的吗?