<select> <option>值未出现在第二个选择框中

时间:2017-10-24 17:11:27

标签: php html html-select

背景:我有一个通过GET从视图表单访问的编辑表单。 表单有两个动态选择字段:州和国家。 填充时,第一个选择框显示正确的数据库条目,但第二个选择框为空白。第一个选择后输入的任何字段都显示为空白。 代码如下: 包括'connection.php'; $ newid = $ _GET ['id']; 尝试{ $ conec = new Connection(); $ con = $ conec-&gt; Open(); if($ con){ $ sql =“SELECT * FROM certco where id =”。 $ NEWID; $ re = $ con&gt;查询($ sql); foreach($ con&gt;查询($ sql)为$ row){ ?&GT; &lt; link rel =“stylesheet”href =“gridstyle.css”/&gt; &lt; form action =“processeditcertco.php”method =“post”&gt; &lt; fieldset class =“block”&gt; &lt; legend&gt;认证公司&lt; / legend&gt; &lt; label for =“coname”&gt; Co Name&lt; / label&gt; &lt; input type =“text”name =“coname”id =“coname”value =“&lt;?php echo $ row ['coname'];?&gt;” size =“65”/&gt; &lt; label for =“shortname”&gt;姓名缩写&lt; / label&gt; &lt; input type =“text”name =“shortname”id =“shortname”value =“&lt;?php echo $ row ['shortname'];?&gt;” size =“40”/&gt; &lt; label for =“addr1”&gt;地址1&lt; / label&gt; &lt; input type =“text”name =“addr1”id =“addr1”value =“&lt;?php echo $ row ['addr1'];?&gt;” size =“65”/&gt; &lt; label for =“addr2”&gt;地址2&lt; / label&gt; &lt; input type =“text”name =“addr2”id =“addr2”value =“&lt;?php echo $ row ['addr2'];?&gt;” size =“65”/&gt; &lt; label for =“city”&gt; City&lt; / label&gt; &lt; input type =“text”name =“city”id =“city”value =“&lt;?php echo $ row ['city'];?&gt;” size =“65”/&gt; &lt; label for =“zip”&gt; Zip&lt; / label&gt; &lt; input type =“text”name =“zip”id =“zip”value =“&lt;?php echo $ row ['zip'];?&gt;” size =“65”/&gt; &lt; input type =“text”name =“country”id =“country”value =“&lt;?php echo $ row ['country'];?&gt;” size =“65”/&gt; //上面只是为了显示'country'字段的数据高于select &lt; label for =“state”&gt; State&lt; / label&gt; &lt; select id =“state”name =“state”&gt; &lt; option value =“&lt;?php echo $ row ['state'];?&gt;”&gt;&lt;?php echo $ row ['state']; ?&GT;&LT; /选项&GT; //请注意,这与下面没有显示数据的国家/地区代码完全相同。 &LT; PHP $ conn = new PDO('mysql:host = localhost; dbname = money','muser','mpass'); $ stmt = $ conn-&gt; query('SELECT * from state where type =“state”或type =“capitol”'); while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){ echo“&lt; option value =”。 $ row ['缩写']。 “&gt;” 中。 $ row ['name']。 “&LT; /选项&gt;” 中; } ?&GT; &LT; /选择&GT; &lt; label for =“country”&gt; Country&lt; / label&gt; &lt; select id =“country”name =“country”&gt; &lt; option value =“&lt;?php echo $ row ['country'];?&gt;”&gt;&lt;?php echo $ row ['country']; ?&GT;&LT; /选项&GT; //此选项字段中未显示任何数据。 &LT; PHP $ conn = new PDO('mysql:host = localhost; dbname = money','muser','mpass'); $ stmt = $ conn-&gt; query(“SELECT * FROM country where currencycode&gt; 0 order by menuposition asc”); while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){ echo“&lt; option value =”。 $ row ['alpha3']。 “&gt;” 中。 $ row ['name']。 “ - ”。 $ row ['officialname']。 “&LT; /选项&gt;” 中; } ?&GT; &LT; /选择&GT; &LT; /字段集&GT; &LT;字段集&GT; &lt; input type =“submit”class =“button”name =“submit”value =“Update Record”/&gt; &LT; /字段集&GT; &LT; /形式&GT; &LT; PHP } } else { echo $ con; } } catch(PDOException $ ex){ echo $ ex-&gt; getMessage(); } $ conec-&GT;关闭(); ?&GT;

1 个答案:

答案 0 :(得分:0)

我认为问题在于您重复使用$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.

您为$row循环使用while()变量名称,这意味着$row循环中for()的原始值将被覆盖并结束到达第二个选择字段时为null。更改while循环以使用其他变量名称(例如$whileRow)会阻止原始$row变量被覆盖。

附注:您再次使用$row进行第二次while()循环,这将再次导致问题。你需要注意你使用的变量名,特别是在嵌套循环中,因为它最终会产生一些很难跟踪的奇怪错误(正如你所见)。