PHP循环生成按钮 - 只有最后一个工作?

时间:2015-01-14 19:21:18

标签: php loops while-loop

第一次发帖,PHP不是我最强的领域,所以这里......

我的代码生成一个按钮列表,具体取决于在我的数据库表中找到多少个值,然后在单击按钮时应该触发第二段代码。一切正常,但第二段代码仅适用于生成的最后一个按钮。有什么想法吗?

<?php
$username = $_SESSION['sess_user'];

$con=mysql_connect('localhost','root','root') or die(mysql_error());
mysql_select_db('user_registration') or die("cannot select DB");

$loop = mysql_query("SELECT * FROM `vaults` WHERE username = '$username' ORDER BY vaultname asc") or die ('Error Getting User Data! <br />' .mysql_error());
$chk = mysql_num_rows($loop);

$myvalue = '';
while ($row = mysql_fetch_assoc($loop)) {
$myvalue = "{$row['vaultname']}";
echo '<form method="post"><input class="text-center" type="submit" name=' . $myvalue . ' value=' .     $myvalue . ' id="vaultSelecter"></form>';
}
?>

<?php
if(isset($_POST[$myvalue])){
echo '<script type="text/javascript">window.onload = function() {     document.getElementById("instructions").innerHTML = " HELLO WORLD! "; }</script>';}
?>

谢谢大家的回复,我很感激。我理解每个人都在说什么,但我在getELementByID()中引用的ID是按钮的单独DIV,我想用ID&#34;指令更改单个DIV的内容&#34;,当任何一个单击按钮,但它仅适用于循环创建的最后一个按钮。这仍然是由于我按下ID按钮的方式吗?

例如说上面的循环创建了三个按钮,我希望每个按钮用&#34; Hello Word&#34;来改变以下DIV的内容。

<div id=instructions>
 replace this text
</div>

我猜我必须将循环创建的每个$ myvalue存储到一个数组中,这样每个值都可以分别分配给每个按钮,我只是不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

您正在重复此行中的ID:

echo '<form method="post"><input class="text-center" type="submit" name=' . $myvalue . ' value=' .     $myvalue . ' id="vaultSelecter"></form>';

和ID必须是唯一的。尝试上课。例如:

var elems = document.getElementsByClassName("text-center");
for (var i = 0; i < elems.length; i++) {
    console.log('x')
    elems[i].addEventListener('click', function () {
        alert('hello');
    }, false);
}

答案 1 :(得分:0)

您正在为同一id分配多个输入,并将其分配给class,因为id必须是唯一的。

你还为每个按钮制作了一个表单,这对我来说似乎毫无意义,请尝试这样做:

echo '<form method="post">';
while ($row = mysql_fetch_assoc($loop)) {
    $myvalue = "{$row['vaultname']}";
    echo '<input class="text-center vaultSelecter" type="submit" name=' . $myvalue . ' value=' .     $myvalue . '>';
}
echo '</form>';

名为vaultSelector的id现在是一个类,因此可以通过getElementByClassName()访问

答案 2 :(得分:0)

而不是:

name=' . $myvalue . ' value=' .     $myvalue . ' id="vaultSelecter"

也许试试

name="' . $myvalue . '" value=' .     $myvalue . ' id="' . $myvalue . '"

在我看来,最好唯一地标识将用作编程元素的任何元素。

只是另一个未提出异议的意见。如果你可以将所有东西都放在一个表格中,那么它可能会让事因此,当按钮提交时,设置一个隐藏字段并继续表单提交。