您好,任何人都可以帮助我...我已经尝试过几种不同的方法,同时尝试实现这样的输出。
id idnumber datein timein dateout timeout
1 123 2013-02-21 08:00:01 2013-02-21 11:12:45
2 456 2013-02-21 10:15:01 2013-02-21 05:30:01
3 123 2013-02-21 06:58:52 2013-02-21 03:20:16
4 123 2013-02-21 10:05:35 2013-02-21
但是后来我仍然无法得到它......我正在尝试进行出勤监控,其中一个人可以按照他/她的意愿计时和超时,只要它能被记录到数据库中。我在PHP中有这两个代码可以工作但不是我想要的输出。
以下代码仅插入记录,但更新不起作用:
if (isset($_POST['idnumber'])){
$query = "INSERT INTO tblattendance SET idnumber='".$_POST['idnumber']."', datein=CURDATE(), timein = CURTIME()";
$insert_result = mysql_query($query);
}else{
$query1 = "UPDATE tblattendance SET dateout=CURDATE(), timeout = CURTIME() WHERE idnumber='".$_POST['idnumber']."' ORDER BY id DESC LIMIT 1 ";
$insert_result1 = mysql_query($query1);
}
以下代码仅在没有idnumber的现有记录时执行插入和更新,但如果idnumber存在,则只是更新超时列。
$query = "SELECT * FROM tblattendance WHERE idnumber='".$_POST[idnumber']."'";
$res = mysql_query($query);
list($exist) = mysql_fetch_array($res);
if (!$exist){
$query = "INSERT INTO tblattendance SET idnumber='".$_POST['idnumber']."', datein=CURDATE(), timein = CURTIME()";
$insert_result = mysql_query($query);
}else{
$query1 = "UPDATE tblattendance SET dateout=CURDATE(), timeout = CURTIME() WHERE idnumber='".$_POST['idnumber']."' ORDER BY id DESC LIMIT 1 ";
$insert_result1 = mysql_query($query1);
}
答案 0 :(得分:1)
原始代码尝试使用UPDATE
语法(而不是一般INSERT
语法插入数据库,尽管基于此source似乎是正确的。)
$query = "INSERT INTO tblattendance SET idnumber='".$_POST['idnumber']."', datein=CURDATE(), timein = CURTIME()";
对于我的例子,我正在使用下面的表格模式......
CREATE TABLE IF NOT EXISTS `tblattendance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idnumber` int(11) NOT NULL,
`timein` datetime DEFAULT NULL,
`datein` datetime DEFAULT NULL,
`timeout` datetime DEFAULT NULL,
`dateout` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
删除了原始代码中的一些重复内容
//grab the id_number
$id_number = $_POST['idnumber'];
//fetch rows
$query = "SELECT * FROM test.tblattendance WHERE idnumber='".$id_number."'";
$res = mysql_query($query);
$rows = mysql_fetch_array($res);
//create an initial query to update the database
$query = "UPDATE test.tblattendance SET dateout=CURDATE(), timeout = CURTIME() WHERE idnumber='".$id_number."'";
//check we have no rows
if (empty($rows)){
//because we have no rows modify the query
$query = "INSERT INTO test.tblattendance VALUES('', $id_number, CURDATE(), CURDATE(), null, null);";
} @mysql_query($query);
为了有效对抗SQL注入。 $_POST
中的所有元素都应该用mysqli_real_escape_string
包装,或者您应该在查询数据库之前用{ASCII}字符替换$_POST
中的撇号。