обновление имени категории с php и sql не работает - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь обновить название категории без удачи ...

на functions.php У меня есть функция, чтобы показать все категории:

function get_all_categories(){
    global $connection;
    $query = 'SELECT * FROM categories';
    $select_categories = mysqli_query($connection,$query);
    while ($row = mysqli_fetch_assoc($select_categories)) {
    $cat_id = $row['cat_id'];
    $cat_title = $row['cat_title'];
    echo "<tr>";
    echo "<td>$cat_id</td>";
    echo "<td>$cat_title</td>";
    ?>
    <form method="post">
        <input type="hidden" name="delete_cat_id" value="<?php echo $cat_id; ?>">
        <?php 
        echo '<td class="text-center"><input class="btn btn-danger" type="submit" value="Delete" name="delete"></td>';
         ?>
    </form>

    <form method="post">
        <input type="hidden" name="update_category_id" value="<?php echo $cat_id; ?>">
        <?php 
        echo '<td class="text-center"><input class="btn btn-info" type="submit" value="Update" name="update_category"></td>';
        ?>
    </form>
<?php 
    // echo "<td class='text-center'><a class='btn btn-info' href='categories.php?update=$cat_id'>Update</a></td>";
    echo "</tr>";
    }

}

функцияв файле category.php:

    <form action="" method="post">
                                        <div class="form-group">
                                            <label for="my_new_cat">Add a new category
                                            <input class="form-control" type="text" name="my_new_cat">
                                            </label>
                                        </div>
 <input type="hidden" name="category_id" value="<?php echo $cat_id; ?>">
                                <div class="form-group">
                                    <input class="btn btn-primary" type="submit" name="submit" value="Add Category">
                                </div>
                            </form>
                <?php 
                if (isset($_POST['update_category'])) {
                include "includes/update_categories.php";
                }
                ?>

мой код в update_categories.php:

    <?php 
        $selected_cat_id = $_POST['update_category_id'];
        $query = "SELECT * FROM categories WHERE cat_id = $selected_cat_id";
        $select_edit_categories = mysqli_query($connection,$query);
        while ($row = mysqli_fetch_assoc($select_edit_categories)) {
            $cat_id = $row['cat_id'];
            $cat_title = $row['cat_title'];
        }        
        ?>
        <form method="post">
            <div class="form-group">
                <label for="updated_cat_name">Update category</label>
            <input class="form-control" type="text" name="updated_cat_name" value="<?php echo $cat_title; ?>">
            </div>
            <div class="form-group">
                <input class="btn btn-primary" type="submit" name="update_cat_title" value="Update Category">
            </div>
        </form>
        <?php
        if(isset($_POST['update_cat_title'])){
        $updated_cat_title = $_POST['updated_cat_name'];
$edited_category_id = $_POST['category_id'];
$update_cat_query = "UPDATE categories SET cat_title = '$updated_cat_title' WHERE cat_id = $edited_category_id ";
$update_query = mysqli_query($connection,$update_cat_query);
checkQuery($update_query);
}
        ?>

есть кнопка для обновления категории, название категории попадает вполе ввода в приведенном выше коде.

когда я нажимаю кнопку ОБНОВИТЬ, через include "includes/update_categories.php"; открывается новое поле, содержащее имя категории внутри него.

, когда я меняю имя на входеи нажмите «Обновить категорию» под новым полем имени категории. Я ничего не получаю и ничего не изменяю в БД.

Кроме того, нет ошибок ...

Есть идеи?спасибо!

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

OK

После долгих поисков ответа, включая замечательных людей, которые здесь пытаются помочь, я понял это.

Проблема была в этом коде:

if (isset($_POST['update_category'])) {
include "includes/update_categories.php";
}

Проблема заключалась в том, что когда я нажимал кнопку «Обновить», созданную в приведенном выше коде, он включал запрос на получение значения из поля SQL И запрос на обновление значения в SQL.

Дело в том, что когда я снова нажимаю кнопку «Обновить» в приведенном выше коде, вместо этого POST меняется на if(isset($_POST['update_cat_title'])).

В результате * POST if (isset($_POST['update_category'])) больше не доступен, что приводит кinclude формы, подлежащей удалению.

Таким образом, запрос ОБНОВЛЕНИЕ больше не находится на этой странице, и результаты не отправляются.

Итак, я поставил это:

    if(isset($_POST['update_cat_title'])){
    $newCatName = $_POST['updated_cat_name'];
    $catId = $_POST['category_id'];
    update_category($newCatName, $catId);
    }

(мог поместить все функции в один файл, но решил вместо этого переместить его в файл functions.php).

Итак, я создал эту функцию:

function update_category($newCatName, $catId){
global $connection;
$updated_cat_title = escape($newCatName);
$edited_category_id = escape($catId);
$update_cat_query = "UPDATE categories SET cat_title = '$updated_cat_title' WHERE cat_id = $edited_category_id ";
$update_query = mysqli_query($connection,$update_cat_query);
checkQuery($update_query);
header("Location: categories.php");
}

Теперь все отлично работает, спасибо всем!

0 голосов
/ 02 октября 2018

$_POST['update_category_id'] доступен в вашем коде первым делом, но для update_category_id.

нет ввода. Вы пропустили установку скрытого ввода для update_category_id в форме?

Вы можете отредактировать свой код, чтобы добавить скрытый ввод в

<input class="form-control" type="text" name="updated_cat_name" ...
<input type="hidden" name="update_category_id"
       value=<?php echo $selected_cat_id; ?> />

Редактировать:

  1. форма, содержащая update_category_id в " functions.php " должна иметьaction="categories.php".
  2. где update_category установлено в " category.php ", который проверяется в if (isset($_POST['update_category']))?
  3. Можете ли вы подтвердить, что файл " includes / update_categories.php"включено?
  4. Скрытый ввод по-прежнему отсутствует в форме в файле" includes / update_categories.php"
  5. <input type="hidden" name="update_category_id" ... в "functions.php" только что передан в " Categories.php ", чтобы иметь возможность отображать информацию о выбранном "update_category_id", где, как <input type="hidden" name="update_category_id" ... требуется сохранить изменения, сделанные в форме вфайл " включает / update_categories.php ".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...