如何使用MySQL处理多个单选按钮?

时间:2010-06-09 04:22:20

标签: php mysql

我正在尝试使用MySQL处理多个无线电。第一步是让我回应流程页面上的结果。每次我选择任何无线电选项时,它只显示第一行结果。这是我在尝试提交表单后看到的内容:

  

通知

     

谢谢。通知已成功更新。

     

statusid:14 notc2:1

     

返回

这是表格的代码:

<div style="padding: 15px;">

<span class="loginfail" style="font-size:24px; font-weight: bold">Notifications</span><p>

<?php include("progress_insertcomment.php"); ?>

 <?php 

// Make a MySQL Connection
mysql_select_db("speedycm_data") or die(mysql_error());

$query_comment = "select * from tbl_alert order by id desc limit 1";
$comment = mysql_query($query_comment, $speedycms) or die(mysql_error());
$row_comment = mysql_fetch_assoc($comment);
$totalRows_comment = mysql_num_rows($comment);

?>

<!--- add notification --->

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <span id="sprytextarea1">

<textarea id='comment' name="comment" style="height: 75px; width:330px;"><?php echo $row_comment['comment']; ?></textarea> 
</span>
<p>
<button type="submit">Add</button>
               <input type="hidden" name="notc" value="1"/>
               </form>

               <!--- notification history --->

               <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

               <table border="0" cellspacing="2" cellpadding="2">
                  <?php

if ( $row_comment == 0 ) {

        echo "<span style='font-size: 11px;'>No current alerts.</span>";

    } else {

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM tbl_alert ORDER BY id DESC") 
or die(mysql_error());  

while($rows=mysql_fetch_array($result)){ ?>
  <tr>
    <td>
     <?php
echo "<div class='bubble'><div class='pimped'>
        <blockquote>" . $rows['comment'] . "
        </blockquote></div>
        <cite><strong>" . $rows['user'] . "</strong> @ " . $rows['date'] . "</cite>
        <span style='font-size: 10px;'>
        <p>
    <a href='editalert.php?id=". $rows['id'] ."' class='form' >Edit</a>&nbsp;&#8226;&nbsp;<a href='deletealert.php?id=". $rows['id'] ."' class='form'>Delete</a>
    </span>
    </div>
    "; 
    ?> 

    </td>
    <td valign="top" align="center"><div style="padding-left: 30px;"><span style="font-size: 10px;">Completed?</span>
    <p class="field switch">

    <!--- determine status of notification --->

    <?php 
    $status = $rows['status'];
    $id = $rows['id'];
    ?>

    <input type="radio" name="selstatus[<?php echo $id; ?>]" value="no" <?php if($status == 'yes') {echo 'checked';} else {echo '';} ?>/>
    <input type="radio" name="selstatus[<?php echo $id; ?>]" value="yes" <?php if($status == 'yes') {echo 'checked';} else {echo '';} ?>/>
    <input type="hidden" name="statusid" value="<?php echo $id; ?>"/>
    <label for="radio1" class="cb-enable <?php if($status == 'yes') {echo 'selected';} else {echo '';} ?>"><span>Yes</span></label>
    <label for="radio2" class="cb-disable <?php if($status == 'no') {echo 'selected';} else {echo '';} ?>"><span>No</span></label>

    </p>
    </div></td>
  </tr>
  <tr>
    <td></td>
      <?php
    }
    }
    ?>
    <td align="center"><div style="padding-left: 30px;">
<button type="submit">Update</button>
        <input type="hidden" name="notc2" value="1"/>
    </div></td>
  </tr>
</table>
</form>
</div>

这是处理页面的代码:

          <?php   

        // 6) update notifications

        if (array_key_exists('notc2',$_POST)) {

        $update = $_POST['selstatus']; 

echo "<p style='font-size: 12px;'>Thank you. The notifications have been updated successfully.<p>";

foreach($_POST as $key => $value){
echo $key . ': ' . $value . '<br>';
}

    echo "<p><span style='font-size: 12px;'>
                            <a onClick=\"history.go(-1)\" class='form'>Return</a></p>
                            <p></span>
                ";

            exit;

                };  
                ?>

我希望在将处理页面插入表格之前显示所选复选框的ID和值。

1 个答案:

答案 0 :(得分:3)

嗯,这里有一些需要修复的脚本:

1)您进行查询以检查是否有任何要发布的内容,但是通过获取所有匹配的行来执行此操作,然后将结果放弃。

即使您在初始查询中有'限制1',您仍然强制MySQL使用'order by'指令处理整个结果集。它必须首先找到所有匹配的行,然后将它们降序排序,然后它只能拉出第一行。

稍后,您执行完全相同的查询,但没有'limit'子句。

没有理由你应该运行两个查询。在伪代码中:

$results = mysql_query("SELECT * FROM tbl_alert ORDER BY id DESC;") or die(mysql_error());
if (mysql_num_rows() == 0) {
   echo "No current alerts."
} else {
   ... start form here ...
   while($row = mysql_fetch_array($results)) {
      ... generate table rows here ...
   }
   ... finish off form here ...
}

2)在表单中生成一个名为=“statusid”的隐藏字段。但是,您正在为具有相同名称的每个生成的行输出此内容。这意味着在提交表单时,只会提交LAST生成的值。也许这只是为了跟踪您所在的行,但是您可以从其他字段推断出,因为您已经在其字段名称中嵌入了$id值,所以我认为这是一个错误。

3)您正在动态地在单选按钮上生成“已检查”值。这很好,但你对'selstatus'无线电上的'no'和'yes'按钮都有相同的检查/条件,所以如果$ status为'yes',BOTH按钮检查checked属性。同样,您正在使用else子句来回显空字符串。这只会使代码的可读性略低。尝试使用以下内容替换它们:

<input ... value="yes" <?php echo ($status == 'yes') ? 'checked' : '' ?> />
<input ... value="no" <?php echo ($status == 'no') ? 'checked' : '' ?> />

对于像这样的东西使用第三级运算符会使代码更加紧凑,并且比内联if()更容易阅读。

4)同样,您要添加到标签标签的“已选择”类属性。 “else输出空白字符串”部分只会增加无用的代码膨胀。

5)在吐出表行的while()循环中,使用带有多个“breakouts”的多行echo语句来插入PHP变量。您应该调查PHP的heredoc语法的使用,该语法专门用于此类多行文本生成。

现在,说完所有这些,要确切了解提交给服务器的内容,请尝试使用以下内容替换整个或“处理页面”脚本:

<?php
   var_dump($_POST);
?>

这将输出整个POST数据,其中包含一些添加的格式和可变类型/长度信息。如果您的表单生成正确,您应该看到每个表行的单选按钮的一个部分。如果你得到的只是一行的数据,那么你将不得不调试你的表单,因为那就是问题所在。