0

嗨,我在想办法在 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在 a 中包含语句,foreach这样我就可以检查设置了哪些选项,然后一次循环遍历所有选项,然后<tr></tr>foreach? 我正在考虑通过制作多个if语句来检查isset我的变量的每个组合并使用foreach仅包含集合选择的语句来做到这一点,但这似乎非常笨拙并且是一种迂回的方式来做我需要的事情。

4

3 回答 3

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>
于 2012-06-06T20:40:41.640 回答
0

是的,语句中允许使用条件foreach语句。您通常会包括它们。此外,您拥有的代码容易受到 XSS(跨站点脚本)攻击。您可能需要清理通过邮寄提交的数据。

如果我误解了这个问题,我很抱歉,它的措辞有点......有趣的是......

编辑:if(isset($var1) && isset($var2) &&...etc)

于 2012-06-06T20:38:14.903 回答
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>
于 2012-06-08T16:05:02.603 回答