我正在尝试在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
答案 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>' ?>