Build CRUD Application PHP & Mysql. Edit and sava data

Home » Tutorials » PHP+MySQL » Build CRUD Application PHP & Mysql. Edit and sava data
We continue to build our php+mysql applicaiton. Today we will realize opportunity for editing and saving data to database.
First of all you need understand, how we make our object unique. The page for every object edit.php. But we will add id player which we are going to edit. In result link will be edit.php?player_id=1 (page for editing information about player with id=1).

While saving we will act in a similar way. But we will pass id in input type=”hidden”.

Code lesson (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>

Code lesson (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>

Code lesson (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>

Code lesson (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();
}

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.

Pin It on Pinterest

Share This