嗨,我很难找到一种方法来包含foreach中的if子句。
我正在编写一个页面,允许用户在将数据提交到数据库之前查看他们在上一个表单中输入的数据。他们可以选择从先前为不同尺寸,数量等输入的数据中进行选择,以及输入他们自己的新选项。现在我的方式设置了所有选项,但它们都在一行并堆叠在一个单元格中。我的问题是我需要它来创建一个新行并为每个值打印$size
和$side
。
<tr>
<td>
<?php
if(isset($_POST['var1'])) {
$var1 = $_POST['var1'];
foreach($var1 as $value) {
echo $value . "<br>";
}
}
if(isset($_POST['new_var1'])) {
$new_var1 = $_POST['new_var1'];
foreach($new_var1 as $value) {
echo $value . "<br>";
}
}
?>
</td>
<td>
<?php
if(isset($_POST['var2'])) {
$var2 = $_POST['var2'];
foreach($var2 as $value) {
echo $value . "<br>";
}
}
if(isset($_POST['new_var2'])) {
$new_var2 = $_POST['new_var2'];
foreach($new_var2 as $value) {
echo $side . "<br>";
}
}
?>
</td>
</tr>
有没有办法在if
中加入foreach
语句,以便我可以查看设置了哪些选项,然后一次循环所有选项,然后包含<tr></tr>
foreach
中的标签?我正在考虑通过制作多个if
语句来检查我的变量isset
的每个组合,并且foreach
语句仅包含设置选项,但这看起来非常笨重且环形交叉做我需要的方式。
答案 0 :(得分:2)
我真的不了解你的情况,但我建议你改变你的形式:
<input name="screws[0][size]" />
<input name="screws[0][side]" />
<input name="screws[1][size]" />
<input name="screws[1][side]" />
<input name="screws[2][size]" />
<input name="screws[2][side]" />
当PHP得到它时,你可以这样做:
<?php
$screws = @$_GET['screws'];
$newscrews = @$_GET['newscrews'];
?>
<table>
<?php if($screws) foreach($screws as $screw): ?>
<tr>
<td><?php echo $screw['size'] ?></td>
<td><?php echo $screw['side'] ?></td>
</tr>
<?php endforeach ?>
</table>
答案 1 :(得分:0)
是的,foreach
声明中允许使用条件。你可以正常包括它们。
此外,您拥有的代码易受XSS(跨站点脚本)攻击。您可能希望清理邮寄提交的数据。
如果我误解了这个问题,我很抱歉,有点措辞......有趣的是..
编辑:if(isset($var1) && isset($var2) &&...etc)
答案 2 :(得分:0)
以下是使用现有数据格式的另一种解决方案:
<?php
$sizes = @$_GET['screw_sizes'];
$sides = @$_GET['screw_sides'];
$screws = array()
if($sides && $sizes) {
$n = min(count($sizes), count($sides))
for ($i=0; $i < $n; $i++) {
$screws[$i]['side'] = $sides[$i];
$screws[$i]['size'] = $sizes[$i];
}
}
?>
回应它的方法是相同的:
<table>
<?php foreach($screws as $screw): ?>
<tr>
<td><?php echo $screw['size'] ?></td>
<td><?php echo $screw['side'] ?></td>
</tr>
<?php endforeach ?>
</table>