這個問題跟在另一個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對不起,這個問題是在代碼的唯一塊,我沒有包括在我的(已經很長)的問題:(!
這將是很好,如果這被減少到最小代碼重現的具體問題。注:您應該(在你的「而」循環)'的var_dump($ phoneID_array);',而不是'回聲$行[「phoneID」];' - 這將讓你更接近實際的問題。 –
@cal_b泰克斯,我確實嘗試了你的建議,但我不明白,對不起。你能告訴我我的代碼有什麼問題嗎? PS我從來不知道怎麼問這樣的問題,如果我發佈最少的代碼大家說,他們沒有足夠的信息,如果我把長碼這太過分了... :)在此期間,我將盡力削減碼。 – codeispoetry
'isset()'條件的if語句在哪裏? – Parfait