2013-06-25 19 views
0

它总是删除第一个复选框,但不是复选框代表的记录的实际部分。如果我继续单击“保存”,它会从下一个复选框和第一条记录中删除。例如,如果记录是'DMG,SCR,KLS,AST',当我点击'保存'并刷新页面时,DMG复选框不被选中,但记录仍然显示'DMG,SCR,KLS,AST'如果我点击它再次成为'SCR,KLS,AST'并且SCR复选框未被选中。表单的复选框部分靠近底部。PHP HTML第一个复选框未选中

谢谢!

// delete 
if(isset($_GET['id']) && $_GET['x'] == "d") { 
    $eventType = EventType::find_by_id($_GET['id']); 
    if($eventType && $eventType->delete()) { 
     $message = "The Event Type '{$eventType->name}' was deleted."; 
    } else { 
     $message = "The Event Type could not be deleted."; 
    } 
} 

// save 
if(isset($_POST['submit'])) { 

    $eventType = new EventType(); 
    if(isset($_POST['id'])) { 
     $eventType->id = mysql_prep($_POST['id']); 
    } 
    $eventType->name = mysql_prep($_POST['name']); 

    $scoreTypes = ScoreType::find_all(); 
    $score_set = array(); 
    foreach($scoreTypes as $scoreType) { 
     if(isset($_POST[$scoreType->name]) && $_POST[$scoreType->name] == $scoreType->name) { 
      array_push($score_set, mysql_prep($_POST[$scoreType->name])); 
     } 
    } 

    if(!empty($score_set)) { 
     $scores = implode(", ", $score_set); 
    } else { 
     $scores = "empty"; 
    } 
    if(isset($scores)) { $eventType->score_types = $scores; } else { $eventType->score_types = ""; } 
    if(isset($_POST['is_disp'])) { $eventType->is_disp = mysql_prep($_POST['is_disp']); } 
    $eventType->save(); 
} 

// edit 
if(isset($_GET['id']) && ($_GET['x'] == "e")) { 
    $eventType = EventType::find_by_id($_GET['id']); 
} 

//view 
$eventTypes = EventType::find_all($ord="name"); 
$scoreTypes = ScoreType::find_all(); 
?> 
<div id="admin_table"> 
<div id="admin_thead"> 
    <table> 
     <tr> 
      <td width="35%">Name</td> 
      <td width="40%">Score Types</td> 
      <td width="5%">Display</td> 
      <td width="7%">Actions</td> 
      <td width="12"></td> 
     </tr> 
    </table> 
</div> 
<div id="admin_tdata"> 
    <table> 
     <colgroup></colgroup> 
     <colgroup class="odd"></colgroup> 
     <colgroup></colgroup> 
     <colgroup class="actions"></colgroup> 
    <?php foreach($eventTypes as $eventType_v): ?> 
     <tr> 
      <td width="35%"><?php echo $eventType_v->name; ?></td> 
      <td width="40%" title="<?php echo $eventType_v->score_types; ?>"><?php echo $eventType_v->score_types; ?></td> 
      <td width="5%" class="bool"><img src="../images/<?php echo ($eventType_v->is_disp == 1) ? "x_yes.png" : "x_no.png"; ?>"></td> 
      <td width="7%" class="but_admin"><a class="but_admin_edit" title="edit" href="index.php?con=event_types&id=<?php echo $eventType_v->id; ?>&x=e">edit</a><a class="but_admin_delete" title="delete" href="index.php?con=event_types&id=<?php echo $eventType_v->id; ?>&x=d" onclick="return confirm('Are you sure you want to delete the Event Type <?php echo "\'{$eventType_v->name}\'"; ?>?')">delete</a></td> 
     </tr> 
    <?php endforeach; ?> 
    </table> 
</div> 
</div> 
<div id="admin_ops_cont"> 
<div id="admin_lt_panel"> 
    <div id="admin_msg"> 
     <h2>Messages</h2> 
     <p><?php if(!$message) { echo "no message"; } else { echo $message; } ?></p> 
    </div> 
</div> 
<div id="admin_form"> 
<?php if(isset($_GET['id'])) { if(isset($_GET['x'])) { if($_GET['x'] == "e") { $edit = 1; } else { $edit = 0; }}} else { $edit = 0; } ?> 
    <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>?con=event_types<?php if(isset($_GET['id'])) { echo "&x=e&id={$eventType->id}"; } ?>" method="post"> 
     <fieldset> 
      <legend><?php if($edit == 1) { echo "Edit: <span>{$eventType->name}</span>"; } else { echo "New EventType"; } ?></legend> 
      <?php if($edit == 1): ?> 
       <input type="hidden" name="id" id="id" value="<?php echo $eventType->id; ?>"> 
      <?php endif; ?> 
      <p> 
       <label for="name">Name</label> 
       <input name="name" id="name" type="text"<?php if($edit == 1): ?> value="<?php echo $eventType->name; ?>"<?php endif; ?>> 
      </p> 
      <p> 
      <?php foreach($scoreTypes as $scoreType): ?> 
       <label for="<?php echo $scoreType->name; ?>"><?php echo $scoreType->description; ?></label> 
       <input type="checkbox" id="<?php echo $scoreType->name; ?>" name="<?php echo $scoreType->name; ?>" value="<?php echo $scoreType->name; ?>" 
        <?php if($edit == 1): if(strpos("{$eventType->score_types}", "{$scoreType->name}")): ?> checked<?php endif; endif; ?>> 
      <?php endforeach; ?> 
      </p> 
      <p> 
       <label for="is_disp">Display?</label> 
       <input type="checkbox" id="is_disp" name="is_disp" value="1"<?php if($edit == 1) { if($eventType->is_disp == 1) { echo " checked"; }} ?>> 
      </p> 
      <p> 
       <button type="submit" name="submit">Save</button><?php if($edit == 1): ?><a class="btn_cancel" href="index.php?con=event_types">done</a><?php endif; ?> 
      </p> 
     </fieldset> 
    </form> 
</div><!-- end .admin_form --> 
</div><!-- end #admin_ops_con --> 
+3

不要谈论代码,显示代码 – 2013-06-25 20:21:28

+2

tl; dr请显示代码。 –

+0

对不起。从整个页面添加了代码。给我带来麻烦的部分接近底部,但是我认为这是整个事情,以防万一我的整个概念存在缺陷并引发问题。谢谢。 – sinrise

回答

0

我认为这个问题是在该行

<?php if($edit == 1): if(strpos("{$eventType->score_types}", "{$scoreType->name}")): ?> checked<?php endif; endif; ?>> 

如果条目是在第一位置(String中的指数为0)strpos返回0 PHP假定0等于false,所以与索引0匹配的第一个条目将不会被“检查”。

此代码应解决的问题

<?php if($edit == 1): if(strpos("{$eventType->score_types}", "{$scoreType->name}")!==false): ?> checked<?php endif; endif; ?>> 

// Not tested since i dont have PHP installed on this machine. but will try to confirm this asap 

更新(检查假==!):

信息strpos(...)返回字符串中的索引。计数从0开始,因此您必须明确检查false(=== false)oder(!== false)以确保PHP不会将索引0视为false。这里是手册的链接(Link

+0

好吧,这有点帮助,但为什么它这样做,我该如何改变它,所以它做我想要的?也许strpos是错误的功能? – sinrise

+0

我更新了应该工作的示例代码。我希望它能起作用 –

+0

Dude,@winner_joiner你是我的英雄。它的作品非常漂亮!非常感谢。 我仍然好奇,为什么它的行为方式没有检查错误。再次感谢! – sinrise