未使用 isset() 函数调用按钮

问题描述

我在尝试构建一个非常简单的库存管理系统时遇到了一些问题。 我正在做的是在 html 表中显示数据库中的数据,并在每一行中创建两个按钮:一个用于编辑,一个用于删除项目。问题是我无法使用 isset() 函数调用这些按钮,我不明白为什么。我试图为这些创建一个特定的函数,但仍然不起作用。有人有什么想法吗?

代码如下:

P.S.:不要介意小的英文错误或缺少括号。我不得不稍微更改代码

 function searchTablet(){
    
      if(isset($_POST['btnSearchTablet'])){
            
            global $connection;

            $query="SELECT * FROM tablet";
            $run=MysqLi_query($connection,$query);
            echo "<table class='table table-striped'>";
                echo "<thead>";
                    echo "<tr>";
                        echo "<th>ID</th>";
                        echo "<th>Brand</th>";
                        echo "<th>Model</th>";
                        echo "<th>Color</th>";
                        echo "<th>Price</th>";
                        echo "<th>Fabrication Date</th>";
                        echo "<th>Provider</th>";
                        echo "<th>Registration Date</th>";
                        echo "<th>Edit</th>";
                        echo "<th>Delete</th>";
                    echo "</tr>";
                echo "</thead>";  
                while($obj=MysqLi_fetch_object($run)){
                    echo "<tr>";
                        echo "<td>$obj->id</td>";
                        echo "<td>$obj->idBrand</td>";
                        echo "<td>$obj->idModel</td>";
                        echo "<td>$obj->idColor</td>";
                        echo "<td>$obj->price</td>";
                        echo "<td>$obj->fabricationDate</td>";
                        echo "<td>$obj->idProvider</td>";
                        echo "<td>$obj->registrationDate</td>";
                        echo "<td><a href='resultTablet.PHP?btnEditTablet{$obj->id}'class='btn btn-primary' name='btnEditTablet'>Alterar</a></td>";
                        echo "<td><a href='resultTablet.PHP?btnDeleteTablet{$obj->id}' class='btn btn-danger' name='btnDeleteTablet'>Excluir</a></td>";
                    echo "</tr>";

                    if(isset($_POST["btnDeleteTablet{$obj->id}"])){   
                        $idTablet=$obj->id;
                        $delQuery="DELETE FROM tablet WHERE id='$idTablet'";
                        $delRun=MysqLi_query($connection,$delQuery);
                        if($delRun){
                            echo "<div class='alert alert-success' role='alert'>Device was successfuly deleted.</div>";
                        }else{
                            echo "<div class='alert alert-danger' role='alert'>Error.</div>";
                        }    
                    }
}
                    

解决方法

和往常一样......看起来 StackOverflow 用户是有害的和不友好的,他们甚至不尝试帮助想要进入编程的新人。

所以我会尽力帮助你。

如果您通过 URL 传递参数,则必须使用 $_GET 而不是 $_POST 方法。

另外,我会改变

<a href='resultTablet.php?btnEditTablet{$obj->id}'class='btn btn-primary' name='btnEditTablet'>Alterar</a>

<a href='resultTablet.php?btnEditTablet={$obj->id}'class='btn btn-primary' name='btnEditTablet'>Alterar</a>

所以你可以这样做:

if(isset($_GET["btnDeleteTablet"])){  

你会像这样通过 $_GET 获得 id:

$idTablet=$_GET["btnDeleteTablet"];

此更改后,您可以关闭您之前使用的while loopif(isset($_GET["btnDeleteTablet"]))行,
你也不需要$obj->id 不再,因为您将 $_GET 数据与 while loop 或您之前编写的任何其他代码分离。

另外,我看到您在桌子上忘记了 <tbody> </tbody>

编辑:

还有,你在做什么

 if(isset($_POST['btnSearchTablet'])){

这在删除按钮点击后不起作用。

您不应该那样使用它,因为在点击删除按钮后,您的页面将转到带有 $_GET 参数的 URL,并且如果逻辑将阻止

 if(isset($_GET["btnDeleteTablet"])){  

逻辑工作。 所以整体移动

if(isset($_GET["btnDeleteTablet"])){  
...
}

if(isset($_POST['btnSearchTablet'])){

同时阅读 $_POST$_GET 方法,阅读表单 你真的需要它。

此外,我建议您使用程序来分析请求,以便您可以查看发布和获取数据的移动方式。 我建议您安装Fiddler程序,这样您就可以看到postget数据是如何移动的。

好的,我最后会尝试修复您的代码,以便它可以工作:

<?php

function searchTablet(){
    global $connection;
    if(isset($_GET['btnDeleteTablet'])){
        deleteTablet();
    }
    //I dont why are you using it so I commented it out. 
    //if(isset($_POST['btnSearchTablet'])){
    //}
    
    displaySearchTablet();
}

function displaySearchTablet(){
    global $connection;

    $query      = "SELECT * FROM tablet";
    $run        = mysqli_query($connection,$query);

    while($obj = mysqli_fetch_object($run)){
        //Combine all rows into one variable
        $table_rows .= "
        <tr>
            <td>{$obj->id}</td>
            <td>{$obj->idBrand}</td>
            <td>{$obj->idModel}</td>
            <td>{$obj->idColor}</td>
            <td>{$obj->price}</td>
            <td>{$obj->fabricationDate}</td>
            <td>{$obj->idProvider}</td>
            <td>{$obj->registrationDate}</td>
            <td>
                <a href='resultTablet.php?btnEditTablet={$obj->id}' class='btn btn-primary' name='btnEditTablet'>Alterar</a>
            </td>
            <td>
                <a href='resultTablet.php?btnDeleteTablet={$obj->id}' class='btn btn-danger' name='btnDeleteTablet'>Excluir</a>
            </td>
        </tr>";
    }
    $result_table =
    "<table class='table table-striped'>
        <thead>
            <tr>
                <th>ID</th>
                <th>Brand</th>
                <th>Model</th>
                <th>Color</th>
                <th>Price</th>
                <th>Fabrication Date</th>
                <th>Provider</th>
                <th>Registration Date</th>
                <th>Edit</th>
                <th>Delete</th>
            </tr>
        </thead>
        <tbody>
            $table_rows
        </tbody>
    </table>";
    echo $result_table;
}
function deleteTablet(){
    global $connection;
    
    $id    = $_GET['btnDeleteTablet'];
    $query = "DELETE FROM tablet WHERE id = '$id'";
    $run   = mysqli_query($connection,$query);
    
    if($run){
        echo "<div class='alert alert-success' role='alert'>Device was successfuly deleted.</div>";
    }else{
        echo "<div class='alert alert-danger' role='alert'>Error.</div>";
    }
}

我把它写得很基础,所以你能理解。 我没有传递参数或返回任何东西,这样你会更容易理解。

祝你编程之旅好运。

, 如果提交空字符串,

isset() 将返回 false,因此请尝试改用 !empty()