输入(无线电)值由~2000字节组成,有更好的方法吗?

时间:2016-03-05 23:54:37

标签: php mysql html5

我有一个存储商品(商品和服务)的MySQL数据库,以及每个商品,还会存储商品(条款和条件),这可以约为2000字节。

http://i.imgur.com/7t3cvSE.png

这是我的基本设置

$term_options = array();
$term_options[] = "None";
$term_options[] = "massive string containing 2000 bytes or more";

...

foreach ($term_options as $term) {
    ?>

<label class="term">
<input type="radio" name="terms" value="<?php echo $term; ?>">
<?php echo $term; ?>
</label>

    <?php
}

上面的代码正是我想要的,但在无线电输入(可能包含Unicode字符)中有一个巨大的值感觉是错误的。我有点担心吗?

之前,我使用SELECT菜单,其选项值等于每个数组项的索引位置:

?>
<select name="terms">
<?php

$i = 0;
for ($i = 0; $i < count($term_options); $i++) {
    ?>

    <option><?php echo $i; ?></option>

    <?php
}
?>
</select>
<?php

然后我的$ _POST看起来像这样:

$terms = $term_options[$_POST['terms']];

它直到我的更新表单才会显示当前选择的值。我不确定如何将isset值与通过数组生成的内容进行比较。

使用静态值很简单,例如:

<option <?php if (isset($row['x']) && $row['x'] === 'x') echo 'selected'; ?>>x</option>

但是在foreach循环中创建每个选项时,我不知道该怎么做,以下不起作用:

<option <?php if (isset($row['x']) && $row['x'] === $term_options[$i]) echo 'selected'; ?>><?php echo $i; ?></option>
$i++;

1 个答案:

答案 0 :(得分:0)

是的,你的担忧是正确的。如果这个页面将显示许多这些项目,并且每个项目都有一个像这样的大量字符串,那么最后一页将是巨大的。此页面将由您的服务器发送到客户端浏览器。页面越大,时间越长。

您正在从MySQL数据库中检索这些项目。每个项目可能都有一个主键。为什么不直接使用此主键作为单选按钮的部分名称,然后您可以再次检索所选项目?

这样的东西
<input type="radio" name="rb_1">

其中“rb_”附加的“1”是项目的关键字。然后你只需要打破这个字符串,恢复主键并搜索是否要恢复巨大的字符串。

当然,这可能会生成另一个数据库操作。但是,与一个大页面的传输相比,这将是没有任何意义,例如100倍2k项目。