如何使用html和php安排我的表单

时间:2014-12-30 20:43:10

标签: php html mysql pdo

我遇到的问题是"category"选项中没有结果。我尝试使用两个whiles,但这也不起作用。

这是我的php:

try{
             $sel=$pdo->prepare("Select * from
                         actors inner join cat
                         on actors.id=cat.id");

    $sel->bindColumn(1,$actors_id);
    $sel->bindColumn(2,$actors);
    $sel->bindColumn(3,$cat_id);
    $sel->bindColumn(4,$cat);
    $sel->execute();




}catch(PDOException $e){

     die("error: " . $e->getMessage());

 }

这是我的HTML:

<form action="" method="post">

    <label for="author">Author</label>
       <Select id="author">

      //Show data from php file:

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$actors_id'>$actors</option>";?>
    <?php endwhile; ?>
       </Select>

       <label for="category">Category</label>

       <Select id="category">

      //Show data again from php file:

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$cat_id'>$cat</option>";?>
    <?php endwhile; ?>
       </Select>     
    </form>

这就是它的样子:

enter image description here

正如您所看到的,&#34;类别中没有信息显示&#34;选项。

如果我将html更改为类似的内容,它也不起作用:

<Select id="author">

    <?php while($sel->fetch()):?>
        <?php echo "<option value='$actors_id'>$actors</option>";?>
       </Select>

       <label for="category">Category</label>
       <Select id="category">

        <?php echo "<option value='$cat_id'>$cat</option>";?>
    <?php endwhile; ?>
       </Select>

现在看起来像这样:

enter image description here

你有什么建议吗?

2 个答案:

答案 0 :(得分:2)

你需要更清洁 -

<?php 
$result = $sel->fetchAll(PDO::FETCH_OBJ); //return an object
foreach($result as $actor) {
     echo '<option value=' . $actors->actor_id .'>'. $actor->actors .'</option>'; // note the quotes
}

?>

您可以根据需要循环遍历结果,而无需重新获取数据。

答案 1 :(得分:1)

您的第一个while循环从PDOStatement对象中获取所有行,因此当您第二次调用while ($sel->fetch())时,它会立即返回false。如果要在基本上两个单独的循环中使用结果,先将所有行提取到一个行数组中,然后遍历该数组。使用fetchAll()执行此操作,而不是通过bindColumn()绑定到变量。

事实上,我几乎总是建议首先获取而不是在显示逻辑期间,除了非常大的行集,其中通过一次获取所有内存消耗的内存将对您的系统造成负担。 / p>

// Get all the rows as an array
$rows = $sel->fetchAll(PDO::FETCH_ASOC);

// Later loop for the items you need as many times as you need
// Each new foreach will iterate the entire $rows array from start to end
<?php foreach ($rows as $row): ?>
<?php echo "<option value='{$row['actors_id']}'>" . htmlspecialchars($row['actors']) . "</option>";?>
<?php endforeach; ?>

<?php foreach ($rows as $row): ?>
<?php echo "<option value='{$row['cat_id']}'>" . htmlspecialchars($row['cat']) . "</option>";?>
<?php endforeach; ?>

不要忘记在输出上调用htmlspecialchars(),以确保它正确编码为HTML。我没有在cat_id,actors_id假设那些已知为整数的假设上这样做,但如果没有,那么你应该使用htmlspecialchars($row['cat_id'], ENT_QUOTES)来确保HTML属性被正确引用。