I’m just learning MySQL/PHP and I’m trying to update a mysql record of a selected value from the dropdown list. I have read through several tutorials, and tried to apply them, but I cannot get this working…
What I want : I got a dropdown list with two options (Approved, Disapproved). I want to UPDATE the selected value from the dropdown menu to the specific user using its user_id.
Problem: When I change the SQL query from WHERE user_id = ‘$user_id’ to WHERE user_id = 75 it will update the record with id 75. So it has something to do with that.
<table id="UserTable">
<tr bgcolor="#2ECCFA">
<th>ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Approval</th>
</tr>
<?php
while ($course = mysqli_fetch_assoc($records)) {
?>
<tr>
<td><?php echo $course['user_id'] ?></td>
<td><?php echo $course['first_name'] ?></td>
<td><?php echo $course['last_name'] ?></td>
<td><?php echo $course['email'] ?></td>
<td>
<form method="post">
<select id="options">-->
<select name="admin_approved">
<option value="1">Approved</option>
<option value="0">Dissaproved</option>
</select>
<button type="submit" name="selectSubmit">Submit</button>
</form>
</td>
</tr>
<?php
} ?>
</table>
<?php
if (isset($_POST['selectSubmit'])) { // Use button name
$admin_approved = $_POST ['admin_approved'];
$query = "UPDATE tbl_users SET admin_approved = '$admin_approved' WHERE user_id = 75";//WHERE user_id = '$user_id'";
$statement = mysqli_prepare($con, $query);
mysqli_stmt_execute($statement);
$con->close();
}
?>
Advertisement
Answer
You need to pass the user_id
via a hidden field in the form to be able to update a specific user.
<form method="post">
<input type="hidden" name="user_id" value="<?php echo $course['user_id'] ?>">
<!-- the rest of the form -->
</form>
Then your query becomes (is sql injectable):
$admin_approved = $_POST['admin_approved'];
$user_id = $_POST['user_id'];
$query = "UPDATE tbl_users SET admin_approved = '$admin_approved' WHERE user_id = '$user_id'";
$statement = mysqli_prepare($con, $query);
mysqli_stmt_execute($statement);
While you say you’re not concerned with sql injection, to protect the query you can replace the code with the following which will protect it against sql injection:
$admin_approved = $_POST['admin_approved'];
$user_id = $_POST['user_id'];
$query = "UPDATE tbl_users SET admin_approved = ? WHERE user_id = ?";
$statement = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($statement, 'si', $admin_approved, $user_id);
mysqli_stmt_execute($statement);