【问题标题】:How to remove a deleted value after form submit on page如何在页面上提交表单后删除已删除的值
【发布时间】:2021-01-05 12:03:34
【问题描述】:

我又被一个问题困住了。

我有一个表格,用于检查一些产品,完成后我提交此表格以删除一些产品。我的页面正在重定向到同一页面。

该值已从数据库中删除,但不在页面上。我必须刷新页面才能在页面上完成此操作,并且产品已被删除。

我以为我可以刷新页面但是 javascript 但我没有用 JS 保存我会尝试在表单提交后使用 onformsubmit location.reload() 刷新页面

我以为我找到了解决方案,因为这与我遇到的问题完全相同:Refresh value on page after form submit

我的表格:

  echo "<form method='post' action='../controller/product_view.php' name='removeProduct' id='removeProduct'>";
        echo "<div class='product_navigation_bar'>";
        echo "<span class='product_navigation_bar_title'> Product List </span>";
        echo "<span class='product_navigation_bar_content'> If you want to delete some products Check the checkboxes and submit it with this button: </span>";
        echo "<button class='btn btn-danger remove_button' onclick='reloader();' type='submit' id='submit'>Submit</button>";
        
    echo "</div>";
    
    echo "<div class='product_view_wrap'>";
        $n = 0;

        foreach ($getProduct AS $arr)
        {
            echo "<div class='product_block'>";
            echo "<input type='checkbox' id='remove_product' name='remove_product[".$n."]' value='".$arr["SKU"]."'>";
            echo "<span>"."SKU: ".$arr["SKU"]."</span>";
            echo "<span>"."Name: ".$arr["NAME"]."</span>";
            echo "<span>"."Price: ".$arr["PRICE"]." €"."</span>";
            $type = $arr["TYPE"];

            switch($type)
            {
                case $type == "DVD":
                    echo "<span>".$arr["VALUE"]." mb</span>";
                    break;

                case $type == "BOOK":
                    echo "<span>".$arr["VALUE"]." Kg</span>";
                    break;

                case $type == "FURNITURE":
                    $dimension = explode(";", $arr["VALUE"]);
                    echo "<span>".$dimension[0]."cm x ".$dimension[1]."cm x ".$dimension[2]."cm </span>";
            }

            echo "</div>";
            $n++;
        }

    echo "</div>";
    echo "</form>";

我的功能:

public function removeProduct()
    {
        $db = $this->getDb();
        $array =  [$_POST['remove_product']];
        $value = '';

        foreach ($array AS $arr => $key){
            $result = $key;
        }

        if($result > 0)
        {
            $value = implode(",",$result);
        }

        try {
            $query = "DELETE FROM `products` WHERE SKU IN ({$value})";
            $result = $db->exec($query);
            return $result;
        } catch (PDOException $e)
        {
            echo "Sorry something went wrong ".$e->getMessage();
        }
    }

更新:

所以我会在点击提交按钮后尝试刷新页面我调用js函数:

function reloader() {
    if(!alert('The products will be deleted.')){window.location.reload();}
}

但它不起作用。我的产品已从数据库中删除。但它不会刷新页面以显示没有已删除产品的新列表。

【问题讨论】:

  • 您对prepare语句的使用是危险的,不要使用这样的prepare查询。这不是您问题的答案,但很重要。
  • 感谢您的帮助,我将了解如何更好地做到这一点。谢谢
  • 您可以重新加载页面或制作一个javascript函数来删除表格中的元素

标签: javascript php html css mysql


【解决方案1】:

您的代码不完整,但问题肯定是您在运行 removeProduct() 函数之前生成了 $getProduct

记住 PHP 是服务器端的,这意味着它是在服务器中执行的,所以一旦您发布表单,首先您必须删除产品,其次您必须使用表格中剩余的产品填充 $getProduct

另一种选择是使用 Javascript/Ajax 组合来删除和刷新页面。

【讨论】:

  • 谢谢,这帮助了我。我在我的视图中更改了顺序并在 getProduct 之前调用 removeProduct() 它是如此简单,我没有看到它。谢谢亚历克斯
【解决方案2】:

试试这个:

$query = "DELETE FROM `products` WHERE SKU IN ({$value})";
$result = $db->exec($query);

return $result;

echo '<script type="text/javascript">
        window.location.href = window.location.href;
</script>';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2017-09-23
    • 1970-01-01
    • 2013-11-18
    • 2019-04-21
    相关资源
    最近更新 更多