我可以在这样的表单元素中使用php吗?

时间:2012-08-22 06:20:28

标签: php html css codeigniter codeigniter-datamapper

我正在制作一个广告系列项目,管理员可以使用管理面板预订一些席位。当他想要编辑它时,先前选择的座位应该突出显示。这就是我为实现这个目标而做的。

if ($mode == 'EDIT')
        {
            $k=1;
            for($i=1;$i<=10;$i++)
            {
            for($j=1;$j<=10;$j++)
            { ?>
                <div id='<?php echo $k ;?>' class="seat_selection"
                <?php foreach($seat_data as $seats)
                {
                if($seats->iSeatNumber == $k)
                {?>
                    style='min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;'
                <?php
                }
                else
                {?>
                    style='min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;'
                <?php
                }
                }
                ?>
                >
                <?php echo $k;?>
                </div>
            <?php $k++;
            } ?>
            <br /><br />
            <?php
            }
        }

但只有所选座位中的第一个座位才会突出显示(如第五个座位,如屏幕截图所示)。休息保持不变。

截图 Seats Selection

我认为问题在于foreach的循环。我是以错误的方式做的吗?或者还有其他方法吗?任何帮助将不胜感激。

我正在为datamapper(php框架)使用codeigniter(db操作)。

3 个答案:

答案 0 :(得分:4)

如果我理解你的任务,我认为这是实现它的一种非常糟糕的方式。

首先尝试制作一个包含所有突出显示的座位的数组:

$highlighted = array();
foreach($seat_data as $seat) {
    $highlighted[] = $seat->iSeatNumber;
}

$k = 1;
for($i=1;$i<=10;$i++)
{
    for($j=1;$j<=10;$j++)
    {
        if(in_array($k, $highlighted))
        {
             echo '<div id="'.$k.'" class="seat_selection" style="min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;">'.$k.'</div>';
        } else {
             echo '<div id="'.$k.'" class="seat_selection" style="min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;">'.$k.'</div>';
        }
        $k++;
    }
    echo "<br/><br/>";
}

它更干净。虽然我没有测试它,但它应该有用。

答案 1 :(得分:2)

这是一个类似于Vlakarados的例子,但只使用一个循环。我们的想法是,您构建一个突出显示的座位ID数组,然后在循环时检查此数组中是否$i,如果是,则添加突出显示的类。

您可以创建一个突出显示/未突出显示的类,而不是拥有所有内联CSS,如下例所示。

$highlightedSeats = array(2, 6, 12, 21, 44);
for($i=1; $i<=100; $i++) { 
    $class = (in_array($i, $highlightedSeats)) ? 'highlighted' : 'not-highlighted';
    echo '<div id="' . $i . '" class="seat_selection ' . $class . '">' . $i . '</div>';
    if($i % 10 == 0) {
        echo '<br /><br />';
    } 
} 

答案 2 :(得分:0)

尝试更改为:

if ($mode == 'EDIT'){
$k=1;
for($i=1;$i<=10;$i++){
for($j=1;$j<=10;$j++){ ?>
<?php foreach($seat_data as $seats){
if($seats->iSeatNumber == $k){
$style="min-height:25px;min-width:25px;background-color:#12B22F;float:left;margin:0 0 5px 10px;cursor:pointer;";
}
else{
$style='min-height:25px;min-width:25px;background-color:#969696;float:left;margin:0 0 5px 10px;cursor:pointer;';
} 
}
?>
<div id='<?php echo $k ;?>' class="seat_selection" style="<?php echo $style; ?>">
<?php echo $k;?>
</div>
<?php $k++;
} ?>
<br /><br />
<?php
}
}