php中的表问题

时间:2010-04-28 08:45:03

标签: php html

我正在尝试在php中创建一个表,该表将根据用户选中的复选框显示mysql数据库中的数据。 正如您在此屏幕截图中看到的那样,当您在最后一个复选框之前没有选中复选框时会出现问题: http://www.mypicx.com/04282010/1/

这是我的代码:

if($_POST['general'] == 'ADDRESS'){
$result2 = mysql_query("SELECT * FROM student WHERE ADDRESS='$saddress'");
 ?>



<table border='1'>
<tr>
<th>IDNO</th>
<th>YEAR</th>
<th>SECTION</th>

<?php if ( $ShowLastName )
echo "<th>LASTNAME</th>" ?>

<?php if ( $ShowFirstName  )
echo "<th>FIRSTNAME</th>" ?>


<?php if ( $ShowMidName  )
echo "<th>MIDNAME</th>" ?>


<?php if ( $ShowAddress  )
echo "<th>ADDRESS</th>" ?>


<?php if ( $ShowGender  )
echo "<th>GENDER</th>" ?>

<?php if ( $ShowReligion  )
echo "<th>RELIGION</th>" ?>

<?php if ( $ShowBday  )
echo "<th>BIRTHDAY</th>" ?>

<?php if ( $ShowContact  )
echo "<th>CONTACT</th>" ?>
</tr>


<?php
while($row = mysql_fetch_array($result2))
  {?>
    <tr> 
    <td><?php echo $row['IDNO']?> </td>
 <td><?php echo $row['YEAR'] ?> </td>
   <td><?php echo $row['SECTION'] ?></td>


  <td><?php
   if ( $ShowLastName  )
  echo $row['LASTNAME'] ?></td>

    <td><?php
   if ( $ShowFirstName  )
  echo $row['FIRSTNAME'] ?></td>

             <td><?php
   if ( $ShowMidName  )
  echo $row['MI'] ?></td>


   <td><?php
   if ( $ShowAddress  )
  echo $row['ADDRESS'] ?></td>

  <td><?php
   if ( $ShowGender  )
  echo $row['GENDER'] ?></td>



  <td><?php
   if ( $ShowReligion  )
  echo $row['RELIGION'] ?></td>

  <td><?php
   if ( $ShowBday  )
  echo $row['BIRTHDAY'] ?></td>

  <td><?php
   if ( $ShowContact  )
  echo $row['S_CONTACTNUM'] ?></td>



   </tr>

<?PHP   }  ?>
    </table>

<?PHP }






mysql_close($con);
?>

如果您未单击复选框之前的复选框之一,可以推荐什么,以便输出看起来不像这样:http://www.mypicx.com/04282010/2/ alt text http://www.mypicx.com/uploadimg/1702270558_04282010_1.png

5 个答案:

答案 0 :(得分:4)

而不是

   <td><?php
       if ( $ShowGender  )
         echo $row['GENDER'] ?>
    </td>
你应该做点什么

<?php
   if ( $ShowGender  )
  echo "<td>".$row['GENDER']."</td>" ?>

因此,只有“if”语句为真时才会出现<td>标记。

答案 1 :(得分:2)

如果设置了相应的<th>变量,则只打印表头元素($isField),但是打印所有表格单元格,仅测试是否打印单元格内容。

而不是所有这些,循环遍历要打印的字段。无需测试每个领域。

示例表单:

<form action="..." method="POST">
  <h4>Student Information</h4>
  <?php foreach ($studentFields as $key => $label) { ?>
    <input type="checkbox" name="show[<?php echo $key; ?>]" id="show_<?php echo $key; ?>"/><label for="show_<?php echo $key; ?>"><?php echo $label; ?></label>
  <?php } ?>
  <h4>Parent Information</h4>
  <?php foreach ($parentFields as $key => $label) { ?>
    <input type="checkbox" name="show[<?php echo $key; ?>]" id="show_<?php echo $key; ?>"/><label for="show_<?php echo $key; ?>"><?php echo $label; ?></label>
  <?php } ?>
</form>

表单处理程序:

<table>
  <thead><tr>
    <?php foreach ($fields as $key => $label) { ?> 
      <th><?php echo $label; ?></th> 
    <?php } ?>
  </tr></thead>
  <tbody>
    <?php foreach ($results as $row) { ?>
      <tr>
        <?php foreach ($fields as $key => $label) { ?>
          <td><?php echo $row[$key]; ?></td>
        <?php } ?>
      </tr>
    <?php ?>
  </tbody>

如果您坚持使用过时的mysql驱动程序,foreach ($results as $row) {需要重写为while循环,但可以使用PDOStatement。切换到PDO还可以更容易地注入漏洞,因为prepared statement参数对它们是无懈可击的。您还可以重写SELECT *以仅获取请求的列,从而减少数据库负载。

$validFields = array('last' => 'Last Name', 'first' => 'First Name', 'stAddr' => 'Address', ...);
$fields = array_intersect($validFields, $_POST['show']);

您甚至可以通过检查数据库表来构建$validFields数组来进行自我配置,但这会产生额外的表查询。

答案 2 :(得分:2)

好的第一件事是第一件事,让我们清理你的代码,因为它很难以当前的格式阅读:

<?php
        if($_POST['general'] == 'ADDRESS'){
        $result2 = mysql_query("SELECT * FROM student WHERE ADDRESS='$saddress'");
?>
<table border='1'>
        <tr>
                <th>IDNO</th>
                <th>YEAR</th>
                <th>SECTION</th>
                <?php if ( $ShowLastName ) { ?><th>LASTNAME</th><?php } ?>
                <?php if ( $ShowFirstName ) { ?><th>FIRSTNAME</th><?php } ?>
                <?php if ( $ShowMidName ) { ?><th>MIDNAME</th><?php } ?>
                <?php if ( $ShowAddress ) { ?><th>ADDRESS</th><?php } ?>
                <?php if ( $ShowGender ) { ?><th>GENDER</th><?php } ?>
                <?php if ( $ShowReligion ) { ?><th>RELIGION</th><?php } ?>
                <?php if ( $ShowBday ) { ?><th>BIRTHDAY</th><?php } ?>
                <?php if ( $ShowContact ) { ?><th>CONTACT</th><?php } ?>
        </tr>

<?php while($row = mysql_fetch_array($result2)) {?>
        <tr> 
                <td><?php echo $row['IDNO']?> </td>
                <td><?php echo $row['YEAR'] ?> </td>
                <td><?php echo $row['SECTION'] ?></td>
                <?php if ( $ShowLastName ) { echo('<td>'.$row['LASTNAME'].'</td>'); } ?></td>
                <?php if ( $ShowFirstName ) { echo('<td>'.$row['FIRSTNAME'].'</td>'); } ?>
                <?php if ( $ShowMidName ) { echo('<td>'.$row['MI'].'</td>'); } ?>
                <?php if ( $ShowAddress ) { echo('<td>'.$row['ADDRESS'].'</td>'); } ?>
                <?php if ( $ShowGender ) { echo('<td>'.$row['GENDER'].'</td>'); } ?>
                <?php if ( $ShowReligion ) { echo('<td>'.$row['RELIGION'].'</td>'); }?>
                <?php if ( $ShowBday ) { echo('<td>'.$row['BIRTHDAY'].'</td>'); }?>
                <?php if ( $ShowContact ) { echo('<td>'.$row['S_CONTACTNUM'].'</td>'); }?>
        </tr>
<?php } ?>
</table>
<?php }
        mysql_close($con);
?>

您最好的选择是尝试将此代码放入并告诉我们这是否可以改善事情?

修改

啊,正如其他人已经说过你的<td>标签不在你的情况之内,上面的代码更容易阅读并有助于将来的调试: - )

答案 3 :(得分:1)

是的,以与你完成th标签相同的方式进行,使用if语句围绕td标签,而不是在它们内部。无论选择了哪个复选框,现在你已经完成它的方式将始终显示9列。

答案 4 :(得分:1)

您在迭代中打印单元格,但只有内容取决于条件。

<?php
if ( $ShowContact  )
echo '<td>' . $row['S_CONTACTNUM'] . '</td>' ?>