Запрос на обновление не работает - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь разработать небольшое приложение «Список дел».Данные для приложения хранятся в базе данных и должны выполнять все операции CRUD.Как сейчас, Select, Insert и Delete работают просто отлично.Я застрял на обновлении, хотя.Страница index.php показана ниже:

<?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>

В каждой записи отображается кнопка «Редактировать», которая берет PK из таблицы «Задачи» и отправляет его на страницу updateTask.php:

<?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, переданного с последней страницы.Однако всякий раз, когда я нажимаю кнопку «Отправить изменения», обновление не выполняется.Страница просто обновляется, и я вижу, что данные таблицы остаются неизменными в базе данных.

1 Ответ

0 голосов
/ 22 марта 2019

Решил проблему!

Было несколько проблем, которые я обнаружил.

1.) В updateTask.php у меня был второй if-оператор, вложенный в первый. Таким образом, он выполнял запрос на обновление при загрузке страницы без изменений данных. Таким образом, кнопка 'theEdit' ничего не сделала, так как требовала выполнения условия предыдущего оператора if.

2.) Поле формы «ffTaskID» в нижней части формы файла updateTask.php, передаваемое при нажатии кнопки «Редактировать», было введено неправильно.

$ _ * 1010 поле формы *

.. должен был быть ..

$ * 1016 поле формы *

На этом этапе запрос на обновление работает правильно.

3.) Исправлена ​​проблема с кнопками «Редактировать». Хотя я честно не могу сказать наверняка, как это было исправлено. Возможно, это было связано с первой частью проблемы. Так что, когда это было исправлено, так было и так.

В любом случае, кажется, все работает так, как должно. Еще раз спасибо всем, кто прокомментировал и помог.

...