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

How to fill <select> with options using PHP and SQL?

我的问题是:我想使用 php.

显示 <select> 中特定 table 的所有 SQL 答案

我尝试让它工作,但没有成功,因为它只显示一个结果。

<?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();


While ($categories_list = $cat->fetch()) {
$cat_name = $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">';
echo "<option value=\"".$cat_name."\" >$cat_name </option>";
echo '</select>';
echo '<input type="submit" value="Envoyer">';
echo '</form>';

?>

这完全不是办法。在 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>

每次从 SQL 服务器读取数据时,您都在不断替换 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>';

?>

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

所以不是这个:

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>";
}

在 select option.

中输出类别时使用 while 循环

像这样,

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

您不必手动遍历结果,因为 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>';

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

方法一:

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>

方法二:

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

你的代码有什么问题:

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