2014-05-07 12 views
0

我試圖從動態生成的選項列表中捕獲用戶的複選框選擇,但我得到的是「數組」而不是選定的名稱。Foreach顯示「數組」而不是從動態生成的複選框中選擇的項目

在我上次測試中,我檢查了3個盒子中的2個,並得到了3個「Array」實例。

這是我的查詢查找名稱:

$query = "SELECT id, first_name, last_name 
      FROM users WHERE location_id = " . $location_id; 
$result = mysqli_query($connection, $query); 
if (!$result) 
{ 
    die("Database query failed: " . mysqli_error($connection)); 
} 

while ($row = mysqli_fetch_array($result)) 
{ 
    $name = $row['first_name'] . " " . $row['last_name']; 
    echo '<label><input type="checkbox" name="emp_name[]" id="emp_name[]" value="' . $name . '"> ' . $name . '</label>'; 
} 

我然後張貼名像這樣的數組:

$attendee = $_POST['emp_name']; 

並嘗試生成名稱列表我的電子郵件這樣的:

$values = ('emp_name'); 
    foreach ($values as $value) { 
     $$value = (array)$_POST[$value]; 
    } 
    for($i = 0; $i < count($attendee); $i++){ 
     $attendees = array(); 
     foreach ($values as $value) { 
      $attendees[] = ${$value}[$i]; 
     } 

有人能幫我看看有什麼問題嗎?


我改變了我的代碼,其中包括我試圖呈現HTML的一部分:

foreach ($attendee as $name) { 
      $attendees[] = $name; 

      $htmlBody .= "<tr><td>{$attendees}</td></tr>"; 
     } 

但它仍然會返回數組。

+0

嘗試在'$ _POST'變量上使用'var_dump()'來查看它是如何嵌套的 – Ortix92

+0

我剛剛注意到我在錯誤日誌中獲得了一個字符串轉換通知數組 – Mike

回答

1

不知道爲什麼你這樣做:

$attendee = (array)$_POST['emp_name']; 

嘗試替換它:

$attendee = $_POST['emp_name']; 

從你的問題,這不是太清楚,但我覺得你創建數組中的數組,這就是問題所在。

如果上述內容不起作用,請嘗試使用var_dump()給出「Array」響應的變量,然後您會看到其中的內容。

編輯:除了以上的變化,儘量讓這種變化太:

替換所有代碼:

$values = ('emp_name'); 
foreach ($values as $value) { 
    $$value = (array)$_POST[$value]; 
} 
for($i = 0; $i < count($attendee); $i++){ 
    $attendees = array(); 
    foreach ($values as $value) { 
     $attendees[] = ${$value}[$i]; 
    } 

有:

foreach ($_POST['emp_name'] as $name) { 
    $attendees[] = $name; 
} 

編輯#2:

根據您的代碼:

foreach ($attendee as $name) { 
      $attendees[] = $name; 

      $htmlBody .= "<tr><td>{$attendees}</td></tr>"; 
     } 

你得到Array而不是名字是完全正常的。通過編寫,請參閱:

$attendees[] = $name; 

你意味着PHP,它是一個數組。另一方面,foreach循環做相反的事情,它從$ attendee數組中獲取每個值,並將它作爲$ name變量提供給您。所以你基本上是在做正確的事情,然後無故恢復到陣列。

SOLUTION:

更換{$attendees}{$name}。它應該工作。

+0

您的替換與我所寫的相同。 – Mike

+0

對不起,剛編輯過,現在就試試吧。 – CodeVirtuoso

+0

沒有工作。我認爲我的foreach需要改變。 – Mike

0

你可以使用更少的代碼來編寫它。 $attendees現在將包含您選中的複選框。

$attendees = array() 
foreach($_POST['emp_name'] as $name){ 
    $attendees[] = $name; 
} 
+0

我認爲你是對的。我會試試看。 – Mike

+0

@Mike你爲什麼要這樣做? – Daan

+0

因爲這是凌晨2點48分,我會在這一點嘗試任何事情......再也想不到了。你爲什麼要問? – Mike

相關問題