0

こんにちは、誰かが私を助けることができます...私はそのような出力を達成しようとしている間、すでにいくつかの異なるアプローチを試しました。

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にこの2つのコードがありますが、機能しますが、必要な出力はありません。

以下のコードはレコードのみを挿入していますが、更新は機能しません。

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);   
}

以下のコードは、ID番号の既存のレコードがない場合にのみ挿入と更新を実行しますが、ID番号が存在する場合は、タイムアウト列を更新するだけです。

$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);    
    }
4

1 に答える 1

1

元のコードは、構文を使用してデータベースに挿入しようとしていました (このソースに基づいて正しいように見えますがUPDATE、一般的な構文ではありません)。INSERT

      $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 ;

rheinによって元のコードから重複を削除しました

//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か、 で見つかったアポストロフィ$_POSTを ASCII 文字に置き換える必要があります。

于 2013-02-21T06:25:13.517 に答える