如何使用PHP和SQL填充<select>选项?

时间:2016-10-03 08:46:32

标签: php mysql pdo forum

我的问题是:我想显示&lt; select&gt;内的特定表格中的所有SQL答案。用php。 我试图让它工作,但没有太大的成功,因为它只显示一个结果。 &LT; PHP 使用error_reporting(E_ALL); 包括'connect.php'; 包括'header.php'; 参数或者set_time_limit(10); $ cat = $ bdd-&gt; query('SELECT cat_id,cat_name,cat_description FROM categories'); $ categories_list = $ cat-&gt; fetch(); 虽然($ categories_list = $ cat-&gt; fetch()){ $ cat_name = $ categories_list ['cat_name']; } $ CAT-&GT; closeCursor(); echo'&lt; form method =“post”action =“accès/ create_topic_post.php”&gt;'; echo'&lt; label for =“sujet”&gt; Sujet:'; echo'&lt; input type =“text”name =“sujet”id =“sujet”required autofocus&gt;'; echo'&lt; / label&gt;'; echo'&lt; label for =“cat”&gt;Catégories:'; echo'&lt; select name =“topic_name”&gt;'; echo“&lt; option value = \”“。$ cat_name。”\“&gt; $ cat_name&lt; / option&gt;”; echo'&lt; / select&gt;'; echo'&lt; input type =“submit”value =“Envoyer”&gt;'; echo'&lt; / form&gt;'; ?&GT;

6 个答案:

答案 0 :(得分:2)

这完全不是这样做的。将PHP和HTML分开。并确保在循环内回显option。像这样:

<form method="post" action="accès/create_topic_post.php">
  <label for="sujet">Sujet :
    <input type="text" name="sujet" id="sujet" required autofocus>
  </label>
  <label for="cat">Catégories :
    <select name="topic_name">
    <?php
    // Loop it here.
    while ($categories_list = $cat->fetch()) {
        $cat_name = $categories_list['cat_name'];
        echo "<option value=\"".$cat_name."\" >$cat_name </option>";
    }
    ?>
    </select>
  </label><!-- You forgot this -->
  <input type="submit" value="Envoyer" />
</form>

答案 1 :(得分:2)

每次从SQL Server读取数据时,都会继续替换cat_name。您需要将其存储在数组中

<?php
    error_reporting(E_ALL);
    include 'connect.php';
    include 'header.php';
    set_time_limit(10);


    $cat = $bdd->query('SELECT cat_id,cat_name,cat_description FROM categories');
    //$categories_list = $cat->fetch(); This line discards a row of data


    $cat_names = array();   //array for category names
    While ($categories_list = $cat->fetch()) {
        //Add newest 'cat_name' to the array
        $cat_names[] = $categories_list['cat_name'];
    }


    $cat->closeCursor();

    echo '<form method="post" action="accès/create_topic_post.php">';
    echo '<label for="sujet">Sujet :';
    echo '<input type="text" name="sujet" id="sujet" required autofocus>';
    echo '</label>';
    echo '<label for="cat">Catégories :';
    echo '<select name="topic_name">';
    //Loop and read back each category name
    foreach ($cat_names as $cat_name){
        echo "<option value=\"".$cat_name."\" >$cat_name </option>";
    }
    echo '</select>';
    echo '<input type="submit" value="Envoyer">';
    echo '</form>';

?>

答案 2 :(得分:2)

有两种方法可以实现您想要的输出。

方法一:

cat_name存储在新数组中,并在HTML或任何您想要使用的地方使用它。

<?php
$cat_name = array();
while($categories_list = $cat->fetch()) {
  $cat_name[] = $categories_list['cat_name'];
}
?>

<select name="topic_name">
<?php
foreach ($cat_name as $key => $value) {
?>
  <option value="<?=$value?>" ><?=$value?> </option>
}
?>
</select>

方法2:

<?php
while ($categories_list = $cat->fetch()) {
?>
   <option value="<?=$categories_list['cat_name']?>" ><?=$categories_list['cat_name']?> </option>
<?php
}
?>

你的代码出了什么问题:

$cat_name = $categories_list['cat_name'];这只会存储查询的最后一个值,您必须将值存储在数组中,或在<option>循环中使用while()

答案 3 :(得分:1)

将获取循环移动到代码的输出部分。

所以不要这样:

echo "<option value=\"".$cat_name."\" >$cat_name </option>";

移动循环,使它看起来像这样:

While ($categories_list = $cat->fetch()) {
  $cat_name = $categories_list['cat_name'];
  echo "<option value=\"".$cat_name."\" >$cat_name </option>";
}

答案 4 :(得分:1)

在选择option输出类别时使用while循环。

像这样,

While ($categories_list = $cat->fetch()) {
       echo "<option value=\"".$categories_list['cat_name']."\" >$categories_list['cat_name'] </option>";
}

答案 5 :(得分:1)

您不必手动循环结果,因为PDO具有可以为您完成的功能,称为fetchAll()。如果要获取行数组,则必须使用它而不是fetch()。

然而,除此之外,您还需要学习PHP和编程。因为您当前的代码没有多大意义。要输出数组,您必须使用循环:

$cat = $bdd->query('SELECT cat_name FROM categories');
$categories_list = $cat->fetchAll(PDO::FETCH_COLUMN); // here it is

echo '<form method="post" action="accès/create_topic_post.php">';
echo '<label for="sujet">Sujet :';
echo '<input type="text" name="sujet" id="sujet" required autofocus>';
echo '</label>';
echo '<label for="cat">Catégories :';
echo '<select name="topic_name">';
foreach ($categories_list as $cat_name)
{ 
    echo "<option value='$cat_name'>$cat_name</option>";
}
echo '</select>';
echo '<input type="submit" value="Envoyer">';
echo '</form>';