如何在单页中显示两次数据获取记录?

时间:2017-10-24 08:05:44

标签: php prepared-statement

我必须在单页中两次获取国家/地区名称。我有四个下拉菜单,分别是country_1,state_1,country_2,state_2。

在国家/地区,用户选择国家/地区名称,并根据国家/地区名称显示州名称。 如果我只使用country_1,state_1,那么我可以显示它,但我需要在同一页面上显示两个国家/地区。

我尝试了$stmt->data_seek($stmt,0); $stmt->data_seek(0);,但仍然无法显示它。

我只想知道我应该在哪里使用data_seek

<!--country name-->
$country_list="SELECT id,name FROM countries";
/* create a prepared statement */
if ($stmt = $conn->prepare($country_list)) {
    /* execute statement */
    $stmt->execute();
    /* bind result variables */
    $stmt->bind_result($id, $country_name);
    }
   <select  name="country_data" class="myselect form-control country_data">
                        <option  value="" disabled selected>Select your country</option>
                            <?php  while ($stmt->fetch()) {?>
                            <option value="<?php echo $id;?>"><?php echo $country_name;?></option>
                            <?php }?>
                     </select>

    <!--state name-->
                <select  name="state"  class="myselect form-control state_get" >
                <option value=''>Select state</option>
                </select>

    <!--country name-->
     <select  name="country_data" class="myselect form-control country_data">
                        <option  value="" disabled selected>Select your country</option>
                            <?php  
                             $stmt->data_seek($stmt,0);
                             while ($stmt->fetch()) {?>
                            <option value="<?php echo $id;?>"><?php echo $country_name;?></option>
                            <?php }?>
                     </select>

    <!--state name-->
                <select  name="state"  class="myselect form-control state_get" >
                <option value=''>Select state</option>
                </select>

3 个答案:

答案 0 :(得分:2)

$data = array();
$i=0;
while($stmt->fetch()) {
   $data[$i]['id'] = $id;
   $data[$i]['country_name'] = $country_name;
   $i++;
}

然后尝试

foreach($data as $row){

}

答案 1 :(得分:1)

尝试将获取的数据保存在变量中。

$data = $stmt->fetch();

然后在任何你想使用的地方使用foreach循环。

foreach($data as $row){

}

答案 2 :(得分:0)

由于两种情况下的输出相同,因此仅循环数据一次效率要高得多。以下代码仅使用一个循环来创建html选项。它将它存储在变量中。然后,您可以通过回显变量来在两个地方使用它。

<?php
    $options = "";
    while ($stmt->fetch()){
        $options .= "<option value='$id'>$country_name</option>\n";
    }
?>


<!--country name 1-->
<select  name="country_data1" class="myselect form-control country_data">
    <option  value="" disabled selected>Select your country</option>
    <?php  echo $options ?>
</select>

<!--state name 1-->
<select  name="state1"  class="myselect form-control state_get" >
    <option value=''>Select state</option>
</select>

<!--country name 2-->
<select  name="country_data2" class="myselect form-control country_data">
    <option  value="" disabled selected>Select your country</option>
    <?php echo $options ?>
</select>

<!--state name 2-->
<select  name="state2"  class="myselect form-control state_get" >
    <option value=''>Select state</option>
</select>

我更改了name属性,因为您可能不希望它们具有相同的名称。我目前无法对此进行测试,如果您遇到任何错误,请告诉我。

此外,您尚未实施&#34;州&#34;的代码。下拉菜单,当你到达那一点时,你可能想考虑使用AJAX。

我在每个选项行的末尾添加了\ n,以便在查看源代码时使源代码更易于在浏览器中阅读。但是,没有必要,如果您愿意,可以将其删除。

编写第一部分的另一种方法(如果不使用bind_result,则如下所示:

<?php
    $options = "";
    while ($result = $stmt->fetch()){
        $options .= "<option value='{$result['id']}'>{$result['name']}</option>\n";
    }
?>