1 回答

TA貢獻2012條經驗 獲得超12個贊
如果您刪除onload="document.search1.submit()"并稍微調整 PHP,sql 應該在第一次加載時運行。我認為,上面的代碼的問題在于對$_POST設置的變量的依賴:
$fdate = $_POST['fdate'];
$edate = $_POST['edate'];
如果沒有發布的數據,這些數據將為空,因此查詢將不會運行,因此將其修改為:
if( !empty( $_POST['fdate'] ) ) {
$date_from = $_POST['fdate'];
} else {
$date_from = date('Y-m-d',strtotime('-1 days'));
}
if(!empty($_POST['edate'])) {
$date_to = $_POST['edate'];
} else {
$date_to = date('Y-m-d',strtotime('-1 days'));
}
$fdate = $date_from; # use the value determined by the `IF` logic
$edate = $date_to; # use the value determined by the `IF` logic
aliases如果使用表名,還可以使 SQL 更易于閱讀
$sql = "select
date_format( e.`Date`, '%d/%M/%Y' ) AS `Date`,
u.`Name`,
u.`company` AS `Company`,
u.`department` AS `Department`,
min( time_format( e.`Date`,'%H:%i:%s' ) ) AS `Start Time`,
IF( max( time_format( e.`Date`,'%H:%i:%s' ) ) > min( time_format( e.`Date`,'%H:%i:%s' ) ), max( time_format( e.`Date`,'%H:%i:%s' ) ),'') AS `Finish Time`,
IF( timediff( max( e.`Date`), min( e.`Date` ) ) > '00:00:00', timediff( max( e.`Date`), min( e.`Date` ) ), '') AS `Work Time`
from entries e
join user u on e.`emp_id` = u.`emp_id`
where date_format( e.`Date`,'%Y-%m-%d') between '{$fdate}' and '{$edate}'
group by date_format( e.`Date`,'%d-%m-%Y'), u.`Name`
order by `Date` desc";
也就是說,它仍然容易受到 SQL 注入的攻擊,因此您可能希望使用 aprepared statement來代替 - 也許像這樣:
$sql = "select
date_format( e.`Date`, '%d/%M/%Y' ) AS `Date`,
u.`Name`,
u.`company` AS `Company`,
u.`department` AS `Department`,
min( time_format( e.`Date`, '%H:%i:%s' ) ) AS `Start Time`,
IF( max( time_format( e.`Date`, '%H:%i:%s' ) ) > min( time_format( e.`Date`,'%H:%i:%s' ) ), max( time_format( e.`Date`,'%H:%i:%s' ) ),'') AS `Finish Time`,
IF( timediff( max( e.`Date`), min( e.`Date` ) ) > '00:00:00', timediff( max( e.`Date`), min( e.`Date` ) ), '') AS `Work Time`
from entries e
join user u on e.`emp_id` = u.`emp_id`
where date_format( e.`Date`,'%Y-%m-%d') between ? and ?
group by date_format( e.`Date`,'%d-%m-%Y'), u.`Name`
order by `Date` desc";
$stmt=$conn->prepare( $sql );
$stmt->bind_param('ss',$fdate,$edate);
$stmt->execute();
$stmt->bind_result($date,$name,$company,$department,$start,$finish,$worktime);
while( $stmt->fetch() ){
echo $date,$name,$company,$department,$start,$finish,$worktime;#format output as apporpriate!
}
$stmt->free_result();
$stmt->close();
- 1 回答
- 0 關注
- 235 瀏覽
添加回答
舉報