Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL - Część 6

To jest część 5 serii poświęconej tworzeniu systemu zarządzania kontami użytkowników w PHP. Pozostałe części znajdziesz tutaj:część 1, część 2, część 3, część 4 i część 5.

Utwórz plik o nazwie editProfile.php w folderze admin/users.

editProfile.php:

<?php include('../../config.php'); ?>
<?php include(INCLUDE_PATH . '/logic/common_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/middleware.php'); ?>
<?php include(ROOT_PATH . '/admin/users/userLogic.php'); ?>
<?php
  $sql = "SELECT id, username, email, profile_picture FROM users WHERE id=?";
  $user = getSingleRecord($sql, 'i', [$_SESSION['user']['id']]);
  $roles = getMultipleRecords("SELECT * FROM roles");

  $user_id = $user['id'];
  $username = $user['username'];
  $email = $user['email'];
  $profile_picture = $user['profile_picture'];
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>UserAccounts - Edit Profile</title>
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
    <!-- Custom styles -->
    <link rel="stylesheet" href="../../assets/css/style.css">
  </head>
  <body>
    <?php include(INCLUDE_PATH . "/layouts/admin_navbar.php") ?>

    <div class="container">
      <div class="row">

        <form action="editProfile.php" method="post" enctype="multipart/form-data">
          <input type="hidden" name="user_id" value="<?php echo $user_id ?>">
          <div class="col-md-8 col-md-offset-2">
            <h2 class="text-center">Edit Your Profile Info</h2>
            <hr>
              <div class="col-md-6" style="text-align: center;">
                  <?php if (isset($profile_picture)): ?>
                    <img src="<?php echo BASE_URL . '/assets/images/' . $profile_picture; ?>" id="profile_img" style="height: 150px; border-radius: 50%" alt="">
                  <?php else: ?>
                    <img src="http://via.placeholder.com/150x150" id="profile_img" style="height: 150px; border-radius: 50%" alt="">
                  <?php endif; ?>
                  <h3>Change Profile Picture</h3>
                  <!-- hidden file input to trigger with JQuery  -->
                  <input type="file" name="profile_picture" id="profile_input" value="" style="display: none;">
              </div>

              <div class="col-md-6">
                <div class="form-group <?php echo isset($errors['username']) ? 'has-error' : '' ?>">
                  <label class="control-label">Username</label>
                  <input type="text" name="username" value="<?php echo $username; ?>" class="form-control">
                  <?php if (isset($errors['username'])): ?>
                    <span class="help-block"><?php echo $errors['username'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group <?php echo isset($errors['email']) ? 'has-error' : '' ?>">
                  <label class="control-label">Email Address</label>
                  <input type="email" name="email" value="<?php echo $email; ?>" class="form-control">
                  <?php if (isset($errors['email'])): ?>
                    <span class="help-block"><?php echo $errors['email'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group <?php echo isset($errors['passwordOld']) ? 'has-error' : '' ?>">
                  <label class="control-label">Old Password</label>
                  <input type="password" name="passwordOld" class="form-control">
                  <?php if (isset($errors['passwordOld'])): ?>
                    <span class="help-block"><?php echo $errors['passwordOld'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group <?php echo isset($errors['password']) ? 'has-error' : '' ?>">
                  <label class="control-label">Password</label>
                  <input type="password" name="password" class="form-control">
                  <?php if (isset($errors['password'])): ?>
                    <span class="help-block"><?php echo $errors['password'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group <?php echo isset($errors['passwordConf']) ? 'has-error' : '' ?>">
                  <label class="control-label">Password confirmation</label>
                  <input type="password" name="passwordConf" class="form-control">
                  <?php if (isset($errors['passwordConf'])): ?>
                    <span class="help-block"><?php echo $errors['passwordConf'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group <?php echo isset($errors['role_id']) ? 'has-error' : '' ?>">
                  <label class="control-label">User Role</label>
                  <select class="form-control" name="role_id" >
                    <option value="" ></option>
                    <?php foreach ($roles as $role): ?>
                      <?php if ($role['name'] === $_SESSION['user']['role']): ?>
                        <option value="<?php echo $role['id'] ?>" selected><?php echo $role['name'] ?></option>
                      <?php else: ?>
                        <option value="<?php echo $role['id'] ?>"><?php echo $role['name'] ?></option>
                      <?php endif; ?>
                    <?php endforeach; ?>
                  </select>
                  <?php if (isset($errors['role_id'])): ?>
                    <span class="help-block"><?php echo $errors['role_id'] ?></span>
                  <?php endif; ?>
                </div>
                <div class="form-group">
                  <button type="submit" name="signup_btn" class="btn btn-danger pull-right">Delete Your Account</button>
                  <button type="submit" name="update_profile" class="btn btn-success">Update Profile</button>
                </div>
              </div>
          </div>
      </form>

      </div>
    </div>
  <?php include(INCLUDE_PATH . "/layouts/footer.php") ?>
  <script type="text/javascript" src="../../assets/js/display_profile_image.js"></script>

Teraz ta strona przedstawia formularz, w którym użytkownik może edytować swoje informacje w profilu. Jest to bardzo podobne do funkcji aktualizacji użytkownika, więc użyjemy tej samej funkcji, która aktualizuje użytkowników, aby zaktualizować profil użytkownika. Otwórz więc userLogic.php i dodaj tę instrukcję if wśród instrukcji if w górnej części pliku.

userLogic.php:

// ... more code here

if (isset($_POST['update_profile'])) {
    $user_id = $_SESSION['user']['id'];
    if (!isset($user_id)) {
      $_SESSION['success_msg'] = "You have to be logged in to update your profile";
      header("location: " . BASE_URL . "login.php");
      exit(0);
    } else {
      updateUser($user_id); // Update logged in user profile
    }
}

// ... more code here ...

Teraz zaloguj się za pomocą swojego konta administratora, które utworzyliśmy wcześniej. Po zalogowaniu kliknij swoją nazwę użytkownika na pasku nawigacyjnym i wybierz „Profil” z wyświetlonego menu. Spowoduje to przejście do strony edycji profilu. Zmodyfikuj informacje i naciśnij przycisk aktualizacji, a Twoje konto użytkownika zostanie zaktualizowane.

Kiedy aktualizujesz swój profil, zostanie wyświetlony komunikat informujący, że pomyślnie zaktualizowałeś konto, ale nie zobaczysz tego konta na liście kont użytkowników. Dzieje się tak dlatego, że jesteś aktualnie zalogowanym użytkownikiem, więc Twoje konto nie powinno być wyświetlane w tabeli kont, gdy jesteś zalogowany. Jest to oczywiście osobiste preferencje, jeśli chcesz dodać swoje konto do tabeli, możesz zmodyfikować odpowiedni kod źródłowy.

Wniosek

Bardzo dziękuję za śledzenie tego samouczka. To była dla mnie dość długa podróż, ale podobała mi się. Mam nadzieję, że ty też. Ze względu na to, jak długo trwał ten samouczek, być może zapomniałem coś dodać lub usunąć. Mogłem popełnić błąd w tym czy innym miejscu. Jeśli zauważyłeś takie błędy, dodaj komentarz w sekcji komentarzy, abym mógł to naprawić.

Prosimy o wsparcie przez udostępnianie.

Miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LINQ to Entities nie rozpoznaje metody „System.String ToString()” i tej metody nie można przetłumaczyć na wyrażenie sklepu

  2. Podziel ciąg i przeprowadź pętlę przez wartości w procedurze MySql

  3. Najlepszy sposób na WSTAWIANIE wielu wartości w mysqli?

  4. Jak zresetować/zmienić wiersz poleceń MySql root w wierszu poleceń ubuntu linux?

  5. UNIKALNE OGRANICZENIE MYSQL