我有一个存储商品(商品和服务)的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++;
答案 0 :(得分:0)
是的,你的担忧是正确的。如果这个页面将显示许多这些项目,并且每个项目都有一个像这样的大量字符串,那么最后一页将是巨大的。此页面将由您的服务器发送到客户端浏览器。页面越大,时间越长。
您正在从MySQL数据库中检索这些项目。每个项目可能都有一个主键。为什么不直接使用此主键作为单选按钮的部分名称,然后您可以再次检索所选项目?
像
这样的东西<input type="radio" name="rb_1">
其中“rb_”附加的“1”是项目的关键字。然后你只需要打破这个字符串,恢复主键并搜索是否要恢复巨大的字符串。
当然,这可能会生成另一个数据库操作。但是,与一个大页面的传输相比,这将是没有任何意义,例如100倍2k项目。