2016-01-21 33 views
0

這個問題跟在另一個link之後,但是代碼和問題不同,所以我儘管最好提出另一個問題。希望不是重複的。點擊提交按鈕後無法從數組中的數據庫回顯一個值(id)

我有一個編輯窗體。這是從數據庫中檢索數據的代碼:

$stmt = $conn->prepare(" 
    SELECT 
      phonetype.phonetypeID, 
      phonetype.phonetype, 
      phone.phoneID, 
      phone.countrycode, 
      phone.areacode, 
      phone.phonenumber, 
      phone.extension 
    FROM phonetype 
    LEFT JOIN phone 
    ON phonetype.phonetypeID=phone.phonetypeID 
    and phone.peopleID = ? 
"); 
if (!$stmt) { 
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); 
} else if (!$stmt->bind_param('i', $peopleID)) { 
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); 
} else if (!$stmt->execute()) { 
    die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); 
} else { 
    $resultaddress = $stmt->get_result(); 

    while ($row = $resultaddress->fetch_assoc()) { 
     $phonetypeID_array[] = (isset($row['phonetypeID']) ? $row['phonetypeID'] : ""); 
     $phonetype_array[] = (isset($row['phonetype']) ? $row['phonetype'] : ""); 
     $phoneID_array[] = (isset($row['phoneID']) ? $row['phoneID'] : ""); 
     $countrycode_array[] = (isset($row['countrycode']) ? $row['countrycode'] : ""); 
     $areacode_array[] = (isset($row['areacode']) ? $row['areacode'] : ""); 
     $phonenumber_array[] = (isset($row['phonenumber']) ? $row['phonenumber'] : ""); 
     $extension_array[] = (isset($row['extension']) ? $row['extension'] : ""); 



     echo $row['phonetypeID']; 
     echo $row['phonetype']; 
     echo $row['phoneID']; 
     echo $row['countrycode']; 
     echo $row['areacode']; 
     echo $row['phonenumber']; 
     echo $row['extension'] . '<br>'; 
    } 
} /* end else */ 

這是表單代碼

for ($i = 0; $i < 4; $i++) { 
    echo '<input type="text" name="phoneID[]" id="" value="' . (isset($phoneID_array[$i]) ? $phoneID_array[$i] : "") . '"/>'; 
    echo '<input type="text" name="countrycode[]" id="" size="3" maxlength="3" value="' . (isset($countrycode_array[$i]) ? $countrycode_array[$i] : "") . '"/>'; 
    echo '<input type="text" name="areacode[]" id="" value="' . (isset($areacode_array[$i]) ? $areacode_array[$i] : "") . '"/>'; 
    echo '<input type="text" name="phonenumber[]" id="" value="' . (isset($phonenumber_array[$i]) ? $phonenumber_array[$i] : "") . '"/>'; 
} 

問題

當我編輯的形式,即我進入新的電話號碼,然後點擊提交按鈕的形式刷新所有新的數據(areacode,phonenumber),但新的phoneID不在表單中回顯。

但它在while循環中回聲,我在開發時用作測試。 如果我在地址欄中重新鍵入頁面地址,新的phoneID會在表單中回顯。

我在做什麼錯?

編輯: 按cal_b建議,如果我有測試:

var_dump($phoneID_array); 

輸出時只加載頁面:

array(1) { [0]=> int(28) } 
array(2) { [0]=> int(28) [1]=> string(0) "" } 
array(3) { [0]=> int(28) [1]=> string(0) "" [2]=> string(0) "" } 
array(4) { [0]=> int(28) [1]=> string(0) "" [2]=> string(0) "" [3]=> int(29) } 

輸出增加一個新手機時:

array(5) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) } 
array(6) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) } 
array(7) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) [6]=> int(59) } 
array(8) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) [6]=> int(59) [7]=> int(29) } 

解決方案:

在看了var_dump並閱讀關於數組的php.net手冊之後,我明白了我做錯了什麼。

在提交代碼段,我加載所有$ _ POST數組中的

/*put all the entries into an arrays */ 
$phoneID_array = $_POST['phoneID']; 
$phonetypeID_array = $_POST['phonetypeID'];  
$countrycode_array = $_POST['countrycode']; 
$areacode_array = $_POST['areacode']; 
$phonenumber_array = $_POST['phonenumber']; 
$extension_array = $_POST['phoneextension']; 

,並準備變量和循環插入

for ($i = 0; $i < count($phonetypeID_array); $i++) { 
    $phoneID = mysqli_real_escape_string($conn, $phoneID_array[$i]); 
    $countrycode = mysqli_real_escape_string($conn, $countrycode_array[$i]); 
      ........................ 

我認爲,當你使用相同的名稱對於數組,像你可以做的變量,它只是分配新的值(s),但顯然我錯了。如果使用相同的變量名稱,則會將新值添加到以前的值中。 (我仍然不清楚爲什麼,如果有人會寫兩行來解釋這一點,我將不勝感激)。

因此,解決方案是: 一)取消設置陣列之前分配相同的名稱到另一個陣列 或 B)簡單地使用不同的名稱

PS對不起,這個問題是在代碼的唯一塊,我沒有包括在我的(已經很長)的問題:(!

+1

這將是很好,如果這被減少到最小代碼重現的具體問題。注:您應該(在你的「而」循環)'的var_dump($ phoneID_array);',而不是'回聲$行[「phoneID」];' - 這將讓你更接近實際的問題。 –

+0

@cal_b泰克斯,我確實嘗試了你的建議,但我不明白,對不起。你能告訴我我的代碼有什麼問題嗎? PS我從來不知道怎麼問這樣的問題,如果我發佈最少的代碼大家說,他們沒有足夠的信息,如果我把長碼這太過分了... :)在此期間,我將盡力削減碼。 – codeispoetry

+0

'isset()'條件的if語句在哪裏? – Parfait

回答

1

你的循環可能是如此簡單:

$rows = array(); 
while($row = $resultaddress->fetch_assoc()) {   
    $rows[]=$row; 
} 

然後打印這樣的:

foreach ($rows as $row) { 
    $phoneID = (isset ($row['phoneID']) ? $row['phoneID'] : ""); 
    $countrycode = (isset ($row['countrycode']) ? $row['countrycode'] : ""); 
    $areacode = (isset ($row['areacode']) ? $row['areacode'] : ""); 
    $phonenumber = (isset ($row['phonenumber']) ? $row['phonenumber'] : ""); 

    echo '<input type="text" name="phoneID[]" id="" value="' .$phoneID. '"/>'; 
    echo '<input type="text" name="countrycode[]" id="" value="' .$countrycode. '"/>'; 
    echo '<input type="text" name="areacode[]" id="" value="' .$areacode. '"/>'; 
    echo '<input type="text" name="phonenumber[]" id="" value="' .$phonenumber. '"/>'; 
} 
+0

謝謝!真的很有用,我肯定會整合你的代碼,並將它用作未來編碼的參考! – codeispoetry

+0

嗯,爲什麼不現在? – meda

+0

當然,我現在以這種形式使用它,並且將它用作類似情況的很好示例。 – codeispoetry

相關問題