【问题标题】:Array for-loop and remove button php数组for循环和删除按钮php
【发布时间】:2012-11-26 17:04:42
【问题描述】:

我有这个代码:

<?php
$animals = array('cat', 'dog', 'mouse', 'elephant');
for($i=0, $n = count($animals); $i++){
    echo $animals[$i]. '<input type="submit" name="remove" value="remove"/><br/>';
    if(isset($_POST['remove'])){
        unset($animals[$i]);
    }
}
?>

当我单击删除按钮时,没有任何反应。有什么想法吗?

【问题讨论】:

  • 您是否尝试像 JS 一样使用 PHP? -1
  • 你在这里遗漏了很多元素,这段代码是否包含在其他包含form元素的php中?

标签: php arrays for-loop unset


【解决方案1】:

这也是可以使用的另一种方法

$animals = array('cat', 'dog', 'mouse', 'elephant');
if(isset($_POST['remove'])) $animals=array_diff($animals, array($_POST['animal']));
foreach($animals as $pet)
{
    echo'<form method="post" action="">';
    echo $pet.'<input type="submit" name="remove" value="remove"/><br/>';
    echo '<input type="hidden" name="animal" value="'.$pet.'"/>';
    echo '</form>';
}

更新:(对于您可以使用的 JavaScript 解决方案)

$animals = array('cat', 'dog', 'mouse', 'elephant');
echo'<form name="animalForm" method="post" action="">'; // action should be your this file name, i.e. 'pets.php'
foreach($animals as $pet)
{
    echo '<label>'.$pet.'<input type="button" class="remove" value="remove"/></label><br/>';
}
echo '</form>';

这是JavaScript 代码,可用于head 标签之间的script 标签,如

<script type="text/javascript">
    window.onload=function(){
        var btns=document.getElementsByClassName('remove');       
        for(i=0;i<btns.length;i++)
        {
            if(btns[i].type==='button' && btns[i].className==='remove')
                btns[i].onclick=remove;
        }
    };
    function remove(event){
        var e = event || window.event;
        var el = e.target || e.srcElement;
        document.animalForm.removeChild(el.parentNode);
    }
</script>

JS Demo.

【讨论】:

  • 感谢@samuel 和Sheikh,我试过你的代码,第一次按下按钮删除一个动物被删除,第二次没有删除任何东西,而是用丢失的动物替换它。我希望每次按下按钮时删除一个动物,无需更换。这里的页面:[链接]designnerd.it/prova/index.php[链接]designnerd.it/prova/index1.php
  • @AlbertoGrimaldi,您不能以这种方式执行此操作,因为当您按下删除按钮时,它会向服务器删除一项,并且您的阵列不会以任何方式保存。我认为您可以为此使用JavaScript
  • 好的,你能解释一下我该怎么做吗?我尝试了很多方法,但我找不到解决方案!再次感谢!
  • 我尝试了更新,但是当我点击删除时并没有删除任何内容。
  • 很抱歉打扰您,但我是初学者,我想尽可能多地学习。
【解决方案2】:

如果您要将“删除”显示为每个按钮的值,那么最简单的方法是为name attribute 显示一个数组。发送 $_POST 后,您可以遍历 remove 数组并根据密钥取消设置任何内容。

<?php
$animals = array('cat', 'dog', 'mouse', 'elephant');
if(isset($_POST['remove']) && is_array($_POST['remove'])){
    foreach($_POST['remove'] as $k=>$remove){
        unset($animals[$k]);
    }
}

echo '<form method="post" action="./">';
foreach($animals as $key=>$animal){
    echo $animal. '<input type="submit" name="remove['.$key.']" value="remove"><br/>';
}
echo '</form>';?>

注意:有很多方法可以实现您的目标。这是一种可能性。

【讨论】:

  • 谢谢塞缪尔!你的解决方案很好,但是我第一次按下按钮删除动物被删除,第二次没有删除任何东西,而是用丢失的动物替换它。我希望每次按下按钮时删除一个动物,无需更换。 Sheikh Heera 说我应该考虑 javascript,你怎么看?你有别的方法吗?
  • @AlbertoGrimaldi:这是因为项目删除中的 forech 循环约束。
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 2016-03-20
相关资源
最近更新 更多