2011-09-22 40 views
1

PHP腳本正在根據mysql數據庫中的數據生成以下表格面板。表中的每個單元格都包含一個複選框,用於設置對某些「區域」的訪問。我的複選框的名稱遵循一定的規則:u [user_id] a [area_name],我想要獲取所有已設置的$ _POST,並用它們的值將它們保存在數據庫中。同時插入多行

區域的數量是固定的,但用戶的數量因天而異。我必須保存表格狀態的表格是:user_id,current_date,area1,area2,area3,area4,area5,.. area25。

問題是我不知道如何將此表保存到數據庫中。在這一刻,我爲每個用戶做一個插入,我認爲它有更好的解決方案,因爲這需要太多的時間。

<form name="foo" method="post" action="saveme.php" />  
<table><tr> 
    <td>name</td><td>area1</td><td>area2</td><td>area3</td><td>area4</td> 
</tr> 
<tr> 
    <td>John Smith</td> 
    <td><input type="checkbox" value="12" name="u1a1" checked /></td> 
    <td><input type="checkbox" value="13" name="u1a2" /></td> 
    <td><input type="checkbox" value="16" name="u1a3" /></td> 
    <td><input type="checkbox" value="21" name="u1a4" checked /></td> 
</tr> 
</table><input type="submit" value="Save" /> </form> 
+1

您可能要包括更新你的PHP代碼片段,讓我們知道我們有什麼改進。 –

回答

2

我認爲這應該有所斬斷。但是,當我看到'area1,area2,... area25'等字段時 - 我傾向於認爲可能有更好的解決方案。也許該表應該有'user_id,current_date,area_id,area'字段呢?

$users = array(); 
foreach ($_POST as $key => $value) { 
    $matches = null; 
    if (preg_match('/^u(\d+)a(\d+)$/', $key, $matches)) { 
     $user_id = $matches[1]; 
     $area_id = $matches[2]; 
     if (!isset($users[$user_id))) { 
      $users[$user_id] = array_fill(1, 25, 0); 
     } 
     $users[$user_id][$area_id] = mysql_real_escape_string($value); 
    } 
} 
$values = array(); 

foreach ($users as $user_id => $areas) { 
    $values[] = '(' . $user_id .', now(), '. implode(', ', $areas) .')'; 
} 

if ($values) { 
    $sql = 'INSERT INTO user_areas (user_id, current_date, area1, area2, area3, area4, area5, area6, area7, area8, area9, area10, area11, area12, area13, area14, area15, area16, area17, area18, area19, area20, area21, area22, area23, area24, area25) VALUES ' . implode(', ', $values); 

    // execute $sql query 
} 
+0

解決方案太漂亮了。喲正在使用一個插入與多個值。 TY。你能告訴我你花了多少時間來回答我的問題嗎? –

+0

回答你的問題:數量不會改變,我總是要顯示這張表。我不知道哪個是正確的選擇。 –

+0

什麼是$ data [$ user_id] ?? –

1

可能是你需要的mysqli多查詢。動態構建查詢。這裏有一個直接來自PHP手冊的例子。 http://php.net/manual/en/mysqli.multi-query.php

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$query = "SELECT CURRENT_USER();"; 
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; 

/* execute multi query */ 
if ($mysqli->multi_query($query)) { 
    do { 
     /* store first result set */ 
     if ($result = $mysqli->store_result()) { 
      while ($row = $result->fetch_row()) { 
       printf("%s\n", $row[0]); 
      } 
      $result->free(); 
     } 
     /* print divider */ 
     if ($mysqli->more_results()) { 
      printf("-----------------\n"); 
     } 
    } while ($mysqli->next_result()); 
} 

/* close connection */ 
$mysqli->close(); 
?> 
+0

TY。我也會測試這種方法 –