Создание веб приложения на php+MySql. Редактирование и сохранение данных

Главная » Видеоуроки » PHP+MySQL » Создание веб приложения на php+MySql. Редактирование и сохранение данных
Мы продолжаем создание нашего веб приложения с использованием php+mysql. В этом уроке мы реализуем механизм редактирования и сохранения данных в БД
Вначале нам надо понять, как мы будем унифицировать тот объект, который мы редактируем. Ссылка на редактирование у всех будет одинаковой — edit.php, но мы будем добавлять к ссылке id того игрока, информацию о котором мы собираемся обновить. В результате ссылка будет иметь следующий вид — edit.php?player_id=1 (мы попадем на страницу редактирования игрока с id=1).

При сохранении мы будем действовать похожим образом — в форме редактирования мы будем передавать не только обновленные данные, но и id игрока с помощью input type=»hidden».

Код урока (players.php)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet" crossorigin="anonymous">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>
    </head>
    <body>
        <header>
            <nav class="navbar navbar-default">
              <div class="container-fluid">
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                  </button>
                  <a class="navbar-brand" href="#">Sport CRM</a>
                </div>

                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                  <ul class="nav navbar-nav">
                    <li><a href="/">Главная</a></li>
                    <li><a href="players.php">Игроки</a></li>
                    <li><a href="teams.php">Команды</a></li>
                  </ul>
                </div>
              </div>
          </nav>
        </header>

        <div class="container-fluid">
            <?php include 'db.php'; ?>
            <?php include 'api.php'; ?>
            <?php
                    $players = getAllPlayers($db);
             ?>
             <table class="table table-bordered">
                 <tr>
                     <th>Игрок</th>
                     <th>Команда</th>
                     <th>Страна</th>
                 </tr>
                 <?php foreach ($players as $player) { ?>
                    <tr>
                        <td><a href="edit.php?player_id=<?php echo $player['player_id']; ?>"><?php echo $player['player_name']; ?></a></td>
                        <td><?php echo $player['team_name']; ?></td>
                        <td><?php echo $player['country_name']; ?></td>
                    </tr>
                <?php } ?>

             </table>
        </div>

        <footer>

        </footer>
    </body>
</html>

Код урока (edit.php)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet" crossorigin="anonymous">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>
    </head>
    <body>
        <header>
            <nav class="navbar navbar-default">
              <div class="container-fluid">
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                  </button>
                  <a class="navbar-brand" href="#">Sport CRM</a>
                </div>

                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                  <ul class="nav navbar-nav">
                    <li><a href="/">Главная</a></li>
                    <li><a href="players.php">Игроки</a></li>
                    <li><a href="teams.php">Команды</a></li>
                  </ul>
                </div>
              </div>
          </nav>
        </header>

        <div class="container-fluid">
            <?php include 'db.php'; ?>
            <?php include 'api.php'; ?>
            <?php
                    $id = $_GET['player_id'];
                    if($id) {
                        $player = getPlayerById($db, $id);
                    }
                    else {
                        echo '<div class="alert alert-danger" role="alert">
                                <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                                  <span class="sr-only">Error:</span>
                                  Игрок не найден
                                </div>';
                    }
             ?>
            <form action="save.php" method="post">
                <input type="hidden" name="id" value="<?php echo $player['player_id']; ?>">
                <div class="form-group">
                    <label for="name">Игрок</label>
                    <input type="text" class="form-control" id="name" name="name" value="<?php echo $player['player_name']; ?>">
                  </div>
                  <button type="submit" class="btn btn-default">Сохранить</button>
            </form>
        </div>

        <footer>

        </footer>
    </body>

Код урока (save.php)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet" crossorigin="anonymous">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>
    </head>
    <body>
        <header>
            <nav class="navbar navbar-default">
              <div class="container-fluid">
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                  </button>
                  <a class="navbar-brand" href="#">Sport CRM</a>
                </div>

                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                  <ul class="nav navbar-nav">
                    <li><a href="/">Главная</a></li>
                    <li><a href="players.php">Игроки</a></li>
                    <li><a href="teams.php">Команды</a></li>
                  </ul>
                </div>
              </div>
          </nav>
        </header>

        <div class="container-fluid">
            <?php include 'db.php'; ?>
            <?php include 'api.php'; ?>
            <?php


                    if(!empty($_POST['name']) && !empty($_POST['id'])) {
                        $name = $_POST['name'];
                        $id = $_POST['id'];
                        savePlayer($db, $name, $id);
                    }
                    else {
                        echo '<div class="alert alert-danger" role="alert">
                                <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                                  <span class="sr-only">Error:</span>
                                  Ошибка сохранения
                                </div>';
                    }
             ?>

        </div>

        <footer>

        </footer>
    </body>
</html>

Код урока (api.php)

<?php

function getAllPlayers($db) {

    $sql = "SELECT * FROM players
            INNER JOIN teams ON players.team_id = teams.team_id
            INNER JOIN countries ON players.country_id = countries.country_id;
    ";
    $result = array();

    $stmt = $db->prepare($sql);
    $stmt->execute();

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result[$row['player_id']] = $row;
    }

    return $result;
}

function getAllTeams($db) {
    $sql = "SELECT * FROM teams
            INNER JOIN countries ON teams.country_id = countries.country_id;
    ";
    $result = array();

    $stmt = $db->prepare($sql);
    $stmt->execute();

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result[$row['team_id']] = $row;
    }

    return $result;
}

function getPlayerById($db, $id) {
    $sql = "SELECT * FROM players
            WHERE player_id = :player_id;
    ";

    $stmt = $db->prepare($sql);
    $stmt->bindValue('player_id', $id, PDO::PARAM_INT);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    return $row;
}

function savePlayer($db, $name, $id) {
    $sql = "UPDATE players
            SET player_name = :player_name
            WHERE player_id = :player_id
    ";

    $stmt = $db->prepare($sql);
    $stmt->bindValue(':player_name', $name, PDO::PARAM_STR);
    $stmt->bindValue(':player_id', $id, PDO::PARAM_INT);
    $stmt->execute();
}

6 комментариев

  1. Елизавета

    Добрый день! Подскажите, пожалуйста, как сформировать код, если нужно отредактировать выпадающий список?

    <select name="kod_post" class="form-control" id="kod_post" value="»>
    $value) {
    echo «».$value[‘name_post’].»»;
    }
    ?>

    Данная конструкция выдает просто список, а необходимо чтобы изначально в списке стояло значение, которое записано в строке БД.

    Ответить
    • Камиль

      Здравствуйте, Елизавета. Прошу прощения за ожидание. Вам нужно вывести option с атрибутом selected

      Ответить
  2. Виктор

    Добрый день. Денлаю простой редактор по вашему уроку. Мне нужно, зная ID изменять Status.

    для этого написал форму

    <form action="edit.php?search_id=» method=»GET»>
    ID

    Search

    получаем ID, стираница edit.php

    ID
    <input type="text" name="id" value="»>

    Status

    Save

    страница save.php

    <?php
    if(!empty($_GET['Status']) && !empty($_GET['id'])) {
    $Status = $_GET['Status'];
    $id = $_GET['id'];
    saveStatus($db, $Status, $id);
    }
    else {
    echo "Save error»;
    }
    ?>

    у меня в api.php только одна функция

    prepare($sql);
    $stmt->bindValue(‘:Status’, $Status, PDO::PARAM_STR);
    $stmt->bindValue(‘:id’, $id, PDO::PARAM_INT);
    $stmt->execute();
    }

    ?>

    Все время выдает ошибку Save error. как понять на каком этапе? По идее не передается параметр Status?

    Ответить
    • Виктор

      Проблема была в том, что у меня никак не читался вводимый мной Status. а потому выдавало ошибку. Я добавил еще один input на предыдущей странице edit.php и на страницу save.php статус и ID уже приходили методом GET потому я просто наживаю на сохранить и данные добавляются.

      Ответить
      • Камиль

        Я правильно понимаю, что вы решили вашу проблему?

        Ответить
    • Камиль

      Здравствуйте, Виктор. Прошу прощения, что отвечаю так поздно. Прошу вас не оставлять код в комментариях. Пишите подобные вопросы по почте или в соц сетях

      Ответить

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.

Pin It on Pinterest

Share This