使用onclick在while循环中发布单行的值

时间:2013-05-29 04:50:40

标签: php mysqli

我正在尝试从while循环生成的单行传递列值。单击链接时,我希望该行中的某些值作为隐藏字段传递给另一个页面。

代码:

<form id="repeat" name="repeat" action="edit_user.php" method="post">
<?php
$counter = 0;
while($row = $result->fetch_array()) {
$color = ($counter & 1)? "#D7ECEC" : "#DEDEDE";
$counter++;
?>
<tr align="left" valign="middle" style="background: <?php print $color; ?>">
<td><a href="#" onclick="document.getElementById('repeat').submit();" >
    <?php echo $row['firstname']; ?> <?php echo $row['surname']; ?></a></td>
<td><?php echo $row['userlogin']; ?></td>
<td><?php echo $row['accesslvl']; ?></td>
<td ><?php echo $row['chgpasswrd']; ?></td>
</tr>
<input type="hidden" name="id" value="<?php echo $row['userID']; ?>" />
<input type="hidden" name="lvl" value="<?php echo $row['accesslvl']; ?>" />
<?php } ?>
</table>
</form>

发生的事情是隐藏字段正在传递while循环的最后一行的值。是否可以这样做,以便传递的隐藏值来自被点击的链接的同一行?

我尝试了一些事情,没有任何作用,我找不到任何与这个问题直接相关的东西。任何帮助,将不胜感激。干杯

1 个答案:

答案 0 :(得分:0)

你需要将它分成两页。第一页显示每个唯一用户的用户信息和链接,第二页提供用于发布表单数据的编辑表单,如下所示...

<table>
<?php
$counter = 0;
while($row = $result->fetch_array()) {
    $color = ($counter & 1)? "#D7ECEC" : "#DEDEDE";
    $counter++;
?>
<tr align="left" valign="middle" style="background: <?php print $color; ?>">
    <td>
        <a href="edit_user.php?userID=<?php echo $row['userID']; ?>&accesslvl=<?php echo $row['accesslvl']; ?>">
            <?php echo $row['firstname']; ?> <?php echo $row['surname']; ?>
        </a>
    </td>
    <td><?php echo $row['userlogin']; ?></td>
    <td><?php echo $row['accesslvl']; ?></td>
    <td ><?php echo $row['chgpasswrd']; ?></td>
</tr>
<?php } ?>
</table>

在edit_user页面上,您可以使用url查询字符串传入的信息填充隐藏字段。请记住清除值以防止sql注入或xss攻击。我在这里使用了htmlentities作为示例,您可能想要增强此功能,请阅读htmlentites上的php文档页面以获取更多信息(ENT_QUOTES)。

$userID    = htmlentities($_GET['userID']);
$accesslvl = htmlentities($_GET['accesslvl']);

<form action="modify_user.php" method="post">
    <input type="hidden" name="id" value="<?php echo (int)$userID; ?>" />
    <input type="hidden" name="lvl" value="<?php echo $accesslvl; ?>" />

    //rest of form html