【问题标题】:Can i use php inside a form element like this? [closed]我可以在这样的表单元素中使用 php 吗? [关闭]
【发布时间】:2012-10-09 21:55:33
【问题描述】:

我正在做一个活动项目,其中管理员可以使用管理面板保留一些席位。当他想编辑它时,以前选择的座位应该突出显示。这就是我为实现这一目标所做的工作

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
            }
        }

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

截图

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

我将datamapper(数据库操作)用于codeigniter(php 框架)。

【问题讨论】:

  • $seats-&gt;isSeatNumber() 返回什么?
  • 你能举一个$seat_data的例子吗?
  • 显示数据库中的数据。展示你获取数据的方式。帮助我们为您提供帮助。
  • @deifwud $seat_data 返回表数据的数组,如“campaignId”、“seatNumber”等。$seats-&gt;iSeatNumber() 返回之前预留的座位。5,10,15 在这种情况下

标签: php html css codeigniter codeigniter-datamapper


【解决方案1】:

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

尝试先将所有突出显示的座位组成一个数组:

$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/>";
}

干净多了。虽然我没有对此进行测试,但它应该可以工作。

【讨论】:

  • 感谢伙伴.. 工作得很好:) 感谢您的提示。我将单个值等同于数组:O。 in_array() 是正确的做法
【解决方案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 />';
    } 
} 

【讨论】:

  • 是的,对于这个任务来说甚至是更好的解决方案,但我认为使用 mod 放置换行符的用途有点少,反正我自己会用你的方式。
【解决方案3】:

尝试更改为:

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
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多