I have a form that user can update their profile details. But when the user clicks the update button only two fields are updating. I have 6 input fields and only 2 updating. There is not errors in my code. I can’t find the problem.
My form is like this:
form
My database image:
db
My PHP code:
<?php include "includes/header.php" ?>
<?php include "includes/db.php" ?>
<br><br><br><br>
<?php //include "includes/navigation.php"
?>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid px-4">
<h1 class="mt-4">Profile Settings </h1>
<?php
if (isset($_SESSION['username'])) {
$username = $_SESSION['username'];
$query = "SELECT * FROM users WHERE username = '{$username}' ";
$select_user_profile_query = mysqli_query($connection, $query);
while ($row = mysqli_fetch_array($select_user_profile_query)) {
$user_id = $row['user_id'];
$username = $row['username'];
$user_password = $row['user_password'];
$user_firstname = $row['user_firstname'];
$user_lastname = $row['user_lastname'];
$user_email = $row['user_email'];
$user_image = $row['user_image'];
}
}
if (isset($_POST['update_profile'])) {
$user_firstname = $_POST['user_firstname'];
$user_lastname = $_POST['user_lastname'];
$user_image = $_FILES['image']['name'];
$user_image_temp = $_FILES['image']['tmp_name'];
$username = $_POST['username'];
$user_email = $_POST['user_email'];
$user_password = $_POST['user_password'];
move_uploaded_file($user_image_temp, "images_users/$user_image");
if (empty($user_image)) {
$query = "SELECT * FROM users WHERE username = '{$username}' ";
$select_image = mysqli_query($connection, $query);
while ($row = mysqli_fetch_array($select_image)) {
$user_image = $row['user_image'];
}
}
$query = "UPDATE users SET ";
$query .= "username = '{$username}', ";
$query .= "user_password = '{$user_password}', ";
$query .= "user_firstname = '{$user_firstname}', ";
$query .= "user_lastname = '{$user_lastname}', ";
$query .= "user_email = '{$user_email}', ";
$query .= "user_image = '{$user_image}' ";
$query .= "WHERE username = '{$username}' ";
$update_post = mysqli_query($connection, $query);
if(!$update_post) {
echo "Failed" . mysqli_error($connection);
}
}
?>
<form action="" method="post" enctype="multipart/form-data">
<div class="row">
<div class="col">
<div class="form-group">
<label for="title">First Name</label>
<input value="<?php echo $user_firstname ?>" type="text" name="user_firstname" class="form-control form-control-lg">
</div>
</div>
<div class="col">
<div class="form-group">
<label for="author">Last Name</label>
<input value="<?php echo $user_lastname ?>" type="text" name="user_lastname" class="form-control form-control-lg">
</div>
</div>
</div>
<div class="form-group">
<label for="post_status">Username</label>
<input value="<?php echo $username ?>" type="text" name="username" class="form-control">
</div>
<br>
<div class="form-group">
<label for="post_image">User Image</label>
<br>
<img width="50" src="images_users/<?php echo $user_image; ?>" alt="image">
<br>
<br>
<input type="file" name="image">
</div>
<br>
<div class="form-group">
<label for="post_tags">Email</label>
<input value="<?php echo $user_email ?>" type="email" name="user_email" class="form-control">
</div>
<br>
<div class="form-group">
<label for="post_tags">password</label>
<input autocomplete="off" type="password" name="user_password" class="form-control">
</div>
<br>
<div class="form-group">
<input type="submit" value="Update Profile" class="btn btn-primary" name="update_profile">
</div>
</form>
<!-- <form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="title">First Name</label>
<input value="<?php echo $user_firstname ?>" type="text" name="user_firstname" class="form-control">
</div>
<br>
<div class="form-group">
<label for="author">Last Name</label>
<input value="<?php echo $user_lastname ?>" type="text" name="user_lastname" class="form-control">
</div>
<br>
<div class="form-group">
<label for="post_status">Username</label>
<input value="<?php echo $username ?>" type="text" name="username" class="form-control">
</div>
<br>
<div class="form-group">
<label for="post_image">User Image</label>
<br>
<img width="50" src="../images_users/<?php echo $user_image; ?>" alt="image">
<br>
<br>
<input type="file" name="image">
</div>
<br>
<div class="form-group">
<label for="post_tags">Email</label>
<input value="<?php echo $user_email ?>" type="email" name="user_email" class="form-control">
</div>
<br>
<div class="form-group">
<label for="post_tags">password</label>
<input autocomplete="off" type="password" name="user_password" class="form-control">
</div>
<br>
<div class="form-group">
<input type="submit" value="Update Profile" class="btn btn-primary" name="update_profile">
</div>
</form> -->
</div>
<?php include "includes/footer.php" ?>
First name and the last name are updating. But other fields are not updating.
Thanks in advance!
>Solution :
I see the problem on your code. You are updating information related to the same username that user input to the username. Instead of checking username in the query, check for user_id
$query .= "WHERE user_id = '{$user_id}' ";
Like above. I hope ur problem fixed. Thanks!