Обновите данные пользователя и отобразите то же самое - PullRequest
0 голосов
/ 14 июля 2020

Итак, у меня есть следующий фрагмент кода, который обновляет профиль пользователя.

<?php 
    // FETCH THE DATA FIRST FROM DB
    $fetch_profile_data = "SELECT * FROM `users` WHERE `useremail` = :user_email";
    $exec_profile_data = $DB->prepare($fetch_profile_data);
    $exec_profile_data->bindValue(":user_email", $_SESSION['user_email'] );
    $exec_profile_data->execute();
    $user_profile_data = $exec_profile_data->fetch(PDO::FETCH_ASSOC);
    

    $base_upload_folder = "./uploads";
    $actual_user_avatar = $_FILES['myprofilepic']["name"];
    $base_target_file = $base_upload_folder.basename($_FILES['myprofilepic']["name"]);
    $user_avatar_extension = pathinfo($base_target_file, PATHINFO_EXTENSION);
    $user_avatar_size = $_FILES['myprofilepic']['size'];
    $maxsize    = 4097152;
    // set the allowed file types
    $avatar_allowed_array =  array('jpeg','jpg','png');

    // PROCESS THE FORM IF SUBMIT IS SET
    if ( isset( $_POST['submit'] ) ) {
       $bio = $_POST['userbio'];
       $url = $_POST['mysite'];
       
       if ( !empty( $bio ) || !empty( $url ) || !empty( $actual_user_avatar ) ){
          $update_user_bio = "UPDATE `users` SET userbio = :user_bio, userwebsite = :user_site, profilepicture = :user_picture WHERE useremail = :user_email";
       try {
          $execute_update_bio = $DB->prepare($update_user_bio);
          $execute_update_bio->bindValues(":user_bio", $bio);
          $execute_update_bio->bindValues(":user_site", $url);
          $execute_update_bio->bindValues(":user_picture", $actual_user_avatar);
          $execute_update_bio->bindValues(":user_email", $_SESSION['user_email']);
          move_uploaded_file($_FILES["myprofilepic"]["tmp_name"], $base_target_file)
          $execute_update_bio->execute();
      } catch (Exception $ex) {
          echo $ex->getMessage();
      }
       }
    }
?>
<form method="POST" enctype="multipart/form-data">
  Username: <input type="text" value="<?php echo $user_profile_data['username']; ?>" disabled="true">
  Email: <input type="text" value="<?php echo $user_profile_data['useremail']; ?>" disabled="true">
  BIO: <textarea name="mybio" id="mybio"><?php echo $user_profile_data['userbio']; ?></textarea>
  URL: <input type="url" name="mysite" id="mysite" value="<?php echo $user_profile_data['userwebsite']; ?>">
  PICTURE: <input type="file" name="myprofilepic" id="myprofilepic">
  <img src="./uploads/<?php echo $user_profile_data['profilepicture']; ?>">
  <button name="submit" id="submit">Update Profile</button>
</form>

Итак, в основном я хочу, чтобы пользователь мог редактировать свой профиль, после того как он отредактировал его, отображать то же самое. Но основная идея здесь - проверить, существует ли каждое отдельное значение, а затем обновить. Например:

  • Если изменено только значение textarea, обновите только соответствующий столбец и отобразите то же самое значение, и наоборот.
  • Если поле URL / файл изображения не изменилось или пусто не обновлять.

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

попробуйте это

try {
      $DB->beginTransaction();

      $execute_update_bio = $DB->prepare($update_user_bio);
      $execute_update_bio->bindValues(":user_bio", $bio);
      $execute_update_bio->bindValues(":user_site", $url);
      $execute_update_bio->bindValues(":user_picture", $actual_user_avatar);
      $execute_update_bio->bindValues(":user_email", $_SESSION['user_email']);
      move_uploaded_file($_FILES["myprofilepic"]["tmp_name"], $base_target_file)
      $execute_update_bio->execute();
      $DB->commit();
  } catch (Exception $ex) {
       $DB->rollBack();
      echo $ex->getMessage();
  }

если у вас есть ошибка, данные обновления не сохранятся ...

источник https://www.php.net/manual/en/pdo.begintransaction.php

0 голосов
/ 15 июля 2020

Можете попробовать: я только что переставил код

<?php 


 $base_upload_folder = "./uploads";
    $actual_user_avatar = $_FILES['myprofilepic']["name"];
    $base_target_file = $base_upload_folder.basename($_FILES['myprofilepic']["name"]);
    $user_avatar_extension = pathinfo($base_target_file, PATHINFO_EXTENSION);
    $user_avatar_size = $_FILES['myprofilepic']['size'];
    $maxsize    = 4097152;
    // set the allowed file types
    $avatar_allowed_array =  array('jpeg','jpg','png');
// PROCESS THE FORM IF SUBMIT IS SET
if ( isset( $_POST['submit'] ) ) {
   $bio = $_POST['userbio'];
   $url = $_POST['mysite'];
   
   if ( !empty( $bio ) || !empty( $url ) || !empty( $actual_user_avatar ) ){
      $update_user_bio = "UPDATE `users` SET userbio = :user_bio, userwebsite = :user_site, profilepicture = :user_picture WHERE useremail = :user_email";
   try {
      $execute_update_bio = $DB->prepare($update_user_bio);
      $execute_update_bio->bindValues(":user_bio", $bio);
      $execute_update_bio->bindValues(":user_site", $url);
      $execute_update_bio->bindValues(":user_picture", $actual_user_avatar);
      $execute_update_bio->bindValues(":user_email", $_SESSION['user_email']);
      move_uploaded_file($_FILES["myprofilepic"]["tmp_name"], $base_target_file)
      $execute_update_bio->execute();
  } catch (Exception $ex) {
      echo $ex->getMessage();
  }
   }
}

// FETCH THE DATA FIRST FROM DB
$fetch_profile_data = "SELECT * FROM `users` WHERE `useremail` = :user_email";
$exec_profile_data = $DB->prepare($fetch_profile_data);
$exec_profile_data->bindValue(":user_email", $_SESSION['user_email'] );
$exec_profile_data->execute();
$user_profile_data = $exec_profile_data->fetch(PDO::FETCH_ASSOC);



?>
<form method="POST" enctype="multipart/form-data">
  Username: <input type="text" value="<?php echo $user_profile_data['username']; ?>" disabled="true">
  Email: <input type="text" value="<?php echo $user_profile_data['useremail']; ?>" disabled="true">
  BIO: <textarea name="mybio" id="mybio"><?php echo $user_profile_data['userbio']; ?></textarea>
  URL: <input type="url" name="mysite" id="mysite" value="<?php echo $user_profile_data['userwebsite']; ?>">
  PICTURE: <input type="file" name="myprofilepic" id="myprofilepic">
  <img src="./uploads/<?php echo $user_profile_data['profilepicture']; ?>">
  <button name="submit" id="submit">Update Profile</button>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...