【问题标题】:PHP: My button doesn't properly work inside a foreach loopPHP:我的按钮在 foreach 循环中无法正常工作
【发布时间】:2013-05-16 23:01:41
【问题描述】:

我有这个 find_all() 函数,它写在一个单独的文件中:

public static function find_all() {
    return self::find_by_sql("SELECT * FROM ".self::$table_name);
}

它在包含我的 foreach 循环的文件顶部被引用:

<?php require_once("../../includes/initialize.php"); ?>
<?php if (!$session->is_logged_in()) { redirect_to("login.php"); } ?>
<?php
    $parents = UserParent::find_all();
?>

这是 foreach 循环:

<?php foreach($parents as $parent): ?>
        <div class='popup-screen' id = "popup">
          <div class = "spacing">
            Do you want to delete this data?
          </div>
            <a href="list_users.php?parentNum=<?php echo $parent->parentNum; ?>"> <input type="button" value="YES" class = "popup-button"> </a>
            <input type="button" value="CANCEL" class = "popup-button" onClick = "hide();">
        </div> 
        <tr class = "tr-1">
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent->parentNum; ?>';"><img src="../<?php echo $parent->image_path(); ?>" width="100" height = "100" class = "profile-pic"/></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent->parentNum; ?>';">Parent</td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent->parentNum; ?>';"><?php echo $parent->username; ?></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent->parentNum; ?>';"><?php echo ucwords($parent->firstName); ?></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent->parentNum; ?>';"><?php echo ucwords($parent->lastName); ?></td>
          <td onClick = "show();"><img src = "../stylesheets/images2/delete-icon.png" height="25" width="25" ></td>  
        </tr>
<?php endforeach; ?>

这是 javascript 代码:

function show() 
{
    document.getElementById("popup").style.display='block';
}

function hide(){
    document.getElementById("popup").style.display='none';
}

基本上,我的代码所做的是创建从 foreach 循环中获取数据的信息行。每行的末尾是一个删除图标,如 img 标签所示。单击删除图标后,show() 函数将运行(show() 函数仅显示弹出 div,它是不可见的)——确认用户是否要删除他/她的数据。如果用户单击取消,窗口将关闭,如 javascript 代码所示。如果用户单击“是”,则应该转到链接:list_users.php?parentNum=parentNum; ?> (每行的 $parent->parentNum 的值不同)。但是,锚标签总是检索第一行的链接,无论它是第三行还是其他任何东西(顺便说一下,其他 td 标签上的链接都有效)。现在,我的问题是,如何正确链接弹出 div 上每一行的“是”按钮?

【问题讨论】:

  • 您是否在任何地方声明 parentNum 的值?
  • 显示你为$parents赋值的代码
  • parentNum在父类内部,不需要声明。它从我的数据库中获取数据。顺便说一句,td 上的链接有效,因此 parentNum 并不是真正的问题。
  • 嗨亚伦,欢迎来到 SO。
  • 谢谢,史蒂夫。我确实觉得这里很受欢迎。

标签: php javascript html foreach


【解决方案1】:
<?php 

$parentNum = 0;

foreach($parents as $parent): ?>
        <div class='popup-screen' id = "popup">
          <div class = "spacing">
            Do you want to delete this data?
          </div>
            <a href="list_users.php?parentNum=<?php echo $parent[$parentNum]; ?>"> <input type="button" value="list_users.php?parentNum=<?php echo $parent[$parentNum]; ?>" class = "popup-button"> </a>
            <input type="button" value="CANCEL" class = "popup-button" onClick = "hide();">
        </div> 
        <tr class = "tr-1">
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent[$parentNum]; ?>';"><img src="../<?php echo $parent->image_path(); ?>" width="100" height = "100" class = "profile-pic"/></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent[$parentNum]; ?>';">Parent</td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent[$parentNum]; ?>';"><?php echo $parent[$parentNum]->username; ?></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent[$parentNum]; ?>';"><?php echo ucwords($parent[$parentNum]->firstName); ?></td>
          <td onClick = "document.location = 'viewParent.php?parentNum=<?php echo $parent[$parentNum]; ?>';"><?php echo ucwords($parent[$parentNum]->lastName); ?></td>
          <td onClick = "show();"><img src = "../stylesheets/images2/delete-icon.png" height="25" width="25" ></td>  
        </tr>
<?php 

$parentNum++;

endforeach; ?>

【讨论】:

  • 如何为 parentNum 创建一个数组?以及如何正确循环数组?
  • 感谢您的回复。我忘了告诉我我有这个函数:$parents = UserParent::find_all();。而且, $parent->parentNum 是您从 userParent 类中检索 parentNum 的方式。它从数据库中检索数据,它不应该被初始化,因为数据已经可用。
  • 在这种情况下,现在就试试吧。我删除了初始化。您仍然需要遍历数组。如果这不起作用,请上传您的查找所有功能以及您引用它的位置,以便我们查看整个图片。
  • 我编辑了我的帖子。检查您是否能够获得必要的信息。我可以提供更多。
  • 是的,所以你不需要初始化它,因为就像你说的那样,你已经是了。但是你仍然需要遍历它。你试过我上面的代码了吗?
【解决方案2】:

$parent->parentNum 每行的值都不一样

但在你的代码中,它不是:

<?php echo $parent->parentNum; ?>

该值不会增加或更改或任何其他内容,因此所有行都相同。


另外,我强烈建议为此使用&lt;button&gt;&lt;a&gt; 元素。这就是他们的目的。 &lt;td&gt;s 不应该被点击。良好的设计实践(几乎)总是值得付出一点额外努力。

IMO,您的代码应该看起来更像

...
<td><a href='viewParent.php?n=<?php echo $n; ?>'></a></td>
...
<button name='show' value='1'>Show</button>

...$n 来自 for 循环。然后在页面顶部

if (isset($_POST['show'])) { ...logic... }

接收您的“表演”活动。

【讨论】:

  • 我也这么认为。我只是不知道如何正确链接按钮。
  • 不确定您的意思?制作一个&lt;form method='post' action=''&gt; 元素并将所有内容都包含在其中。然后,当您单击按钮时,页面提交(重新加载)并填充了 $_POST。 &lt;a&gt; 标签将自行处理,可以在表单内部或外部。
  • 我在您编辑回复之前发布了该帖子。只是无视我的评论。不管怎样,谢谢你的回复,史蒂夫。我稍后再做。
  • 如何增加 parentNum 的值?顺便说一句,数据来自数据库。所以,改变它的价值不是一种选择。我需要的是如何为 foreach 循环之外的每一行访问正确的 parentNum。 parentNum 是一个数组吗?如果是,我将如何获取每个数组索引的值,以便我可以将它们放在弹出 div 内的链接中?
  • 不用担心,很高兴为您提供帮助,听起来您有一些工作要做:) 我将从研究foreach($data as $k=&gt;$v) 开始迭代您的数据集。其他问题将在您理解这一点后得到解答。顺便说一句,如果这个答案有帮助你能接受吗;)
猜你喜欢
  • 2015-02-13
  • 2012-08-21
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2015-03-14
  • 2013-10-13
相关资源
最近更新 更多