首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更新查询不起作用

更新查询不起作用
EN

Stack Overflow用户
提问于 2019-03-22 04:07:09
回答 1查看 69关注 0票数 0

我正在尝试开发一个小型的“待办事项列表”应用程序。应用程序的数据存储在数据库中,它需要执行所有CRUD操作。现在,Select、Insert和Delete都可以正常工作。但是我被困在更新中了。index.php页面如下所示:

代码语言:javascript
复制
<?php
    session_start();
    require_once 'connect.php';

    if (isset($_POST['DeleteTask'])) {
        $sqldelete = "DELETE FROM Tasks WHERE dbTaskID = :bvTaskID";
        $stmtdelete = $db->prepare($sqldelete);
        $stmtdelete->bindValue(':bvTaskID', $_POST['taskID']);
        $stmtdelete->execute();
        echo "<div>Task successfully deleted</div>"; 
    }

    if (isset($_POST['theSubmit'])){
        echo '<p>New task added</p>';

        $formfield['ffTaskName'] = trim($_POST['taskName']);
        $formfield['ffTaskDue'] = trim($_POST['taskDue']);

        if(empty($formfield['ffTaskName'])){$errormsg .= "<p>Task field is empty.</p>";}
        if(empty($formfield['ffTaskDue'])){$errormsg .= "<p>Deadline field is empty.</p>";}

        if ($errormsg != "") {
                echo "<div class='error'><p>Please fill out all fields before submitting.</p>";
                echo $errormsg;
                echo "</div>";
        } else {
            try {
                $sqlinsert = 'INSERT INTO Tasks (dbTaskName, dbTaskDue, dbTaskDone)
                VALUES (:bvTaskName, :bvTaskDue, :bvTaskDone)';
                $stmtinsert = $db->prepare($sqlinsert);
                $stmtinsert->bindValue(':bvTaskName', $formfield['ffTaskName']);
                $stmtinsert->bindValue(':bvTaskDue', $formfield['ffTaskDue']);
                $stmtinsert->bindValue(':bvTaskDone', 0);
                $stmtinsert->execute();
                echo "<div><p>There are no errors.  Thank you.</p></div>";
            } catch(PDOException $e){
                echo 'ERROR!!!' .$e->getMessage();
                exit();
            }
        }   
    }

    $sqlselect = "SELECT * from Tasks";
    $result = $db->prepare($sqlselect);
    $result->execute();
?>


<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>To Do Application</title>
    </head>
    <body> 

        <h1><u>To-Do List</u></h1>
        <table border>
            <tr>
                <th>Task</th>
                <th>Deadline</th>
                <th>Status</th>
                <th>Complete</th>   
                <th>Edit</th>
                <th>Delete</th>
            </tr>
            <?php           
                while ($row = $result->fetch()) {
                    if ($row['dbTaskDone'] == 0) {
                        $status = "Unfinished";
                    } else {
                        $status = "Finished";
                    }
                    echo '<tr><td>' . $row['dbTaskName'] 
                    . '</td><td>' . $row['dbTaskDue']
                    . '</td><td>' . $status;

                    /*if ($status == "Unfinished"){
                        echo '</td><td>';
                        echo '<form action="'. $_SERVER['PHP_SELF'] . '" method="post">';
                        echo '<input type="hidden" name="taskID" value"' . $row['dbTaskID'] . '">';
                        echo '<input type="submit" name="CompleteTask" value="Complete Task">';
                        echo '</form>';
                    }*/

                    echo '</td><td>';
                    echo '<form action="updateTask.php" method="post">';
                    echo '<input type="hidden" name="taskID" value="' . $row['dbTaskID'] . '">';
                    echo '<input type="submit" name="EditTask" id="EditTask" value="Edit Task">';
                    echo '</form></td><td>';

                    echo '<form action="'. $_SERVER['PHP_SELF'] . '" method="post">';
                    echo '<input type="hidden" name="taskID" value="' . $row['dbTaskID'] . '">';
                    echo '<input type="submit" name="DeleteTask" value="Delete Task">';
                    echo '</td></tr>';
                }
            ?>
        </table>   
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="toDoForm">
            <fieldset><legend>New Task</legend>
                <table>
                    <tr>
                        <th>Task</th>
                        <td><input type="text" name="taskName" id="taskName"
                        value="<?php echo $formfield['ffTaskName']; ?>"></td>
                    </tr><tr>
                        <th>Deadline</th>
                        <td><input type="text" name="taskDue" id="taskDue"
                        value="<?php echo $formfield['ffTaskDue']; ?>"></td>
                    </tr>
                </table>
                <input type="submit" name = "theSubmit" value="Add Task">
            </fieldset>
        </form>
    </body>
</html>

每条记录显示一个“编辑”按钮,该按钮从"Tasks“表中抓取PK并将其发送到updateTask.php页面:

代码语言:javascript
复制
<?php 
    require_once 'connect.php';
    $errormsg = "";
    if (isset($_POST['EditTask']) ) {
        $formfield['ffTaskID'] = $_POST['taskID'];
        $sqlselect = "SELECT * FROM Tasks WHERE dbTaskId = :bvTaskID";
        $result = $db->prepare($sqlselect);
        $result->bindValue(':bvTaskID', $formfield['ffTaskID']);
        $result->execute();
        $row = $result->fetch(); 

        if( isset($_POST['theEdit']) )
        {   
            $formfield['ffTaskID'] = $_POST['taskID'];
            $formfield['ffTaskName'] = trim($_POST['taskName']);
            $formfield['ffTaskDue'] = trim($_POST['taskDue']);

            if(empty($formfield['ffTaskName'])){$errormsg .= "<p>Task field is empty.</p>";}
            if(empty($formfield['ffTaskDue'])){$errormsg .= "<p>Deadline field is empty.</p>";}

            if ($errormsg != "") {
                echo "<div class='error'><p>Please fill out all fields before submitting.</p>";
                echo $errormsg;
                echo "</div>";              
            } else {
                try
                {
                    $sqlUpdate = "UPDATE Tasks SET dbTaskName = :bvTaskName,
                                  dbTaskDue = :bvTaskDue
                                  WHERE dbTaskID = :bvTaskID";
                    $stmtUpdate = $db->prepare($sqlUpdate);
                    $stmtUpdate->bindvalue(':bvTaskName', $formfield['ffTaskName']);
                    $stmtUpdate->bindvalue(':bvTaskDue', $formfield['ffTaskDue']);
                    $stmtUpdate->bindvalue(':bvTaskID', $formfield['ffTaskID']);
                    $stmtUpdate->execute();
                }
                catch(PDOException $e)
                {
                    echo 'ERROR!!!' .$e->getMessage();
                    exit();
                }
            }
        }
    }   
?>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>To Do Application</title>
    </head>
    <body> 
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="editForm">
            <fieldset><legend>Edit Task</legend>
                <table>
                    <tr>
                        <th>Task</th>
                        <td><input type="text" name="taskName" id="taskName"
                        value="<?php echo $row['dbTaskName'];?>" ></td>
                    </tr><tr>
                        <th>Deadline</th>
                        <td><input type="text" name="taskDue" id="taskDue"
                        value="<?php echo $row['dbTaskDue']; ?>"></td>
                    </tr>
                    <tr>
                        <th>Submit Changes</th>
                        <input type="hidden" name="taskID" value="<?php echo $_formfield['ffTaskID']; ?>">
                        <td><input type="submit" name="theEdit" value="Submit Changes">
                </table>

            </fieldset>
        </form> 
    </body>
</html>

Name和Deadline字段根据从上一页传递的pk值相应地填充。但是,每当我按下“提交更改”按钮时,更新似乎不会执行。页面只是刷新,我看到数据库中的表数据保持不变。

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 05:40:17

解决了问题!

我发现了几个问题。

1.)在updateTask.php中,我将第二个if语句嵌套在第一个语句中。因此,它在页面加载时运行更新查询,而不更改数据。因此,'theEdit‘按钮没有做任何事情,因为它需要前一个if语句的条件才能运行。

2.)updateTask.php表单底部的表单字段'ffTaskID‘键入错误,该表单字段将在按下'theEdit’按钮时传递。

$_formfield

..should已经..

$formfield

此时,update查询功能正常。

3.)“编辑”按钮的问题已修复。尽管老实说我不能确定它是如何修复的。这可能与问题的第一部分有关。因此,当这个问题得到解决时,这个问题也就解决了。

无论哪种方式,一切似乎都在发挥应有的作用。再次感谢所有发表评论和提供帮助的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档