2013-08-23 109 views
0

我只是不能得到正確的方法來解決這個問題,我有兩個數組。 ,其具有以下鍵和值LAMP考勤系統

Array 
(
[attendance] => Array 
    (
     [1] => 1 
     [2] => 1 
     [3] => 0 
     [4] => 1 
     [5] => 1 
     [6] => 0 
     [7] => 0 
    ) 

這是從一個複選框來如果選中的值是1個,否則值第一陣列$出勤是0 第二陣列$此話

[remark] => Array 
    (
     [1] => 
     [2] => 
     [3] => 'sick' 
     [4] => 
     [5] => 
     [6] => 'leave' 
     [7] => 'On assignment' 

    ) 

現在這是關鍵1-7的代表,腳本是針對員工出勤的關鍵1-7是我數據庫中員工表中的employeeID。

現在我想達到什麼是串聯以這樣的方式排列,看起來像這樣

Array 
(
[0] => Array 
    (
     [employeeID] => 7 
     [attendance] => 0 
     [remark] => 'On assignment' 
    ) 

[1] => Array 
    (
     [employeeID] => 6 
     [attendance] => 0 
     [remark] => 'leave' 
    ) 

[2] => Array 
    (
     [employeeID] => 5 
     [attendance] => 1 
     [remark] => 
    ) 

//and so on 
) 

我使用笨如果我能夠來連接它,我也很想知道我怎麼會插入所述多個數據到僱員表看起來像這樣,

employee's table 
employeeID | date | status | remarks 

我打算使用CURDATE日期(),然後狀態將持有或者從出勤0或1 再次:鍵,從1- 7的言論和出席的陣列上都是員工ID

更新! 這是我試過但沒有工作。

$att = $_POST['attendance']; 
$remarks = $_POST['remark']; 

foreach($att as $employee_id=>$status) 
     { 
      $x=0; 
      $employee[$x]['employee_id']=$employee_id; 
      $employee[$x]['status']=$status; 


      foreach($remarks as $employee_id=>$remark) 
      { 

       $employee[$x]['remark']=$remark; 
       $x++; 
      } 
     } 
+0

到目前爲止你有什麼?這是一些相當平凡的數組操作。 – Halcyon

+0

@FritsvanCampen剛添加它 – user2666633

回答

1
$attendance = $_POST['attendance']; 
$remarks = $_POST['remark']; 

$collect = array(); 
foreach ($attendance as $employeeID => $attending) { 
    $collect[] = array(
     "employeeID" => $employeeID, 
     "attendance" => $attending, 
     "remark" => isset($remarks[$employeeID]) ? $remarks[$employeeID] : "" 
    ); 
} 

$values = array(); 
foreach ($collect as $entry) { 
    $values[] = "(" . ((int) $entry["employeeID"]) . ", 
     CURDATE(), 
     " . ((int) $entry["attendance"]) . ", 
     '" . sql_escape($entry["remark"]) . "' 
    )"; 
} 
$query = "INSERT INTO `attendance` 
    (`employeeID`, `date`, `status`, `remarks`) 
    VALUES 
    (" . implode(",", $values) . ")"; 

確保使用適當的轉義函數替換sql_escape。如果您使用的是PDO,請使用它。

+0

這解決了我的問題 – user2666633

0

很容易的,說實話......

$numOfEmployees = 8; 

$concatArray = array(); 

foreach($attendance as $k => $v) 
{ 
    $concatArray[] = array("employeeID" => $k, "attendance" => $v, "remark" => $remark[$k]; 
} 

如果你的出勤表是在SQL一樣東西,你可以去了解它與foreach在上述concatArray:

foreach($concatArray as $key => $value) 
{ 
    $remark = $value['remark']; 
    // sanitize remark for database 
    $query = "INSERT INTO employees (ID, Date, Status, Remarks) VALUES ({$value['employeeID']}, NOW(), {$value['attendance']}, '{$value['remark']}');"; 
    // perform the actual query 
} 

請記住,這是一個非常普遍的例子,對數據庫做了很多假設。

正如Frits指出的那樣,備註字段應該進行消毒處理,可能是通過使用MySQLi的mysqli_real_escape_string或PDO的quote - 取決於您使用的是什麼。

+1

不能保證所有'$ i'都是employeeID。正如你所看到的,沒有ID爲'0'的僱員。只需在'$ attendance'上做一個'foreach'來獲取實際的employeeID。另外,如果我的評論是'他又遲到了',這將打破你的查詢;) – Halcyon

+0

謝謝你,我盡我所能包括你的意見在答案:) –

+0

@ PawelJ.Wal你的工作太 – user2666633