[英]<select> <option> value not appearing on second select box
背景:我有一個通過GET從視圖表單訪問的編輯表單。
表單具有兩個動態選擇字段: state
和country
。
填充后,第一個選擇框顯示正確的數據庫條目,但是第二個為空白。 第一次選擇后輸入的所有字段均顯示為空白。
代碼如下:
include 'connection.php';
$newid = $_GET['id'];
try {
$conec = new Connection();
$con = $conec->Open();
if ($con) {
$sql = "SELECT * FROM certco where id = " . $newid;
$re = $con->query($sql);
foreach ($con->query($sql) as $row) {
?>
<link rel="stylesheet" href="gridstyle.css" />
<form action="processeditcertco.php" method="post">
<fieldset class="block">
<legend>Certification Companies</legend>
<label for="coname">Co Name</label>
<input type="text" name="coname" id="coname" value="<?php echo $row['coname']; ?>" size="65" />
<label for="shortname">Initials</label>
<input type="text" name="shortname" id="shortname" value="<?php echo $row['shortname']; ?>" size="40" />
<label for="addr1">Address 1</label>
<input type="text" name="addr1" id="addr1" value="<?php echo $row['addr1']; ?>" size="65" />
<label for="addr2">Address 2</label>
<input type="text" name="addr2" id="addr2" value="<?php echo $row['addr2']; ?>" size="65" />
<label for="city">City</label>
<input type="text" name="city" id="city" value="<?php echo $row['city']; ?>" size="65" />
<label for="zip">Zip</label>
<input type="text" name="zip" id="zip" value="<?php echo $row['zip']; ?>" size="65" />
<input type="text" name="country" id="country" value="<?php echo $row['country']; ?>" size="65" />
// above just to show that the 'country' field has data above select
<label for="state">State</label>
<select id="state" name="state">
<option value="<?php echo $row['state']; ?>"><?php echo $row['state']; ?></option>
// note this is exactly the same as the country code below that does not show data.
<?php
$conn = new PDO('mysql:host=localhost;dbname=money', 'muser', 'mpass');
$stmt = $conn->query('SELECT * from state where type = "state" or type = "capitol"');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<option value= " . $row['abbreviation'] . ">" . $row['name'] . "</option>";
}
?>
</select>
<label for="country">Country</label>
<select id="country" name="country">
<option value="<?php echo $row['country']; ?>"><?php echo $row['country']; ?></option>
//no data shows in this option field.
<?php
$conn = new PDO('mysql:host=localhost;dbname=money', 'muser', 'mpass');
$stmt = $conn->query("SELECT * FROM country where currencycode > 0 order by menuposition asc");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<option value= " . $row['alpha3'] . ">" . $row['name'] . " - " . $row['officialname'] . "</option>";
}
?>
</select>
</fieldset>
<fieldset>
<input type="submit" class="button" name="submit" value="Update Record" />
</fieldset>
</form>
<?php
}
} else {
echo $con;
}
} catch (PDOException $ex) {
echo $ex->getMessage();
}
$conec->Close();
?>
我認為問題在於您正在重用$row
變量名。 在代碼塊的這一部分:
<?php
$conn = new PDO('mysql:host=localhost;dbname=money', 'muser', 'mpass');
$stmt = $conn->query('SELECT * from state where type = "state" or type = "capitol"');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<option value= " . $row['abbreviation'] . ">" . $row['name'] . "</option>";
}
?>
</select>
<label for="country">Country</label>
<select id="country" name="country">
<option value="<?php echo $row['country']; ?>"><?php echo $row['country']; ?></option>
//no data shows in this option field.
您正在為while()
循環使用$row
變量名,這意味着來自for()
循環的$row
原始值將被覆蓋,直到到達第二個選擇字段時最終為null
。 將while
循環更改為使用其他變量名(例如$whileRow
)可以防止原始的$row
變量被覆蓋。
旁注:您在第二個while()
循環中再次使用$row
,這將再次導致問題。 您需要注意使用什么變量名,尤其是在嵌套循環中,因為它最終會產生一些難以跟蹤的怪異錯誤(如您所見)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.