首页 > 解决方案 > How to make an address Default from multiple addresses in PHP

问题描述

A user can multiple addresses. Then he as the option to make an address Default. Currently i am totally confused either to do in 1 table or second table. Here what i did so far and DB pic is alose attached.

<?php
if (isset($_POST['make_default'])) {
$is_default     = $_POST['is_default'];
$UpdateDaddress  = mysqli_query($con, "UPDATE buyer_address SET

is_default      = '$is_default'

WHERE user_id='$userId'");
if ($UpdateDaddress) {
$_SESSION['success'] = "<h4 style='color:#ed2324; align:center'>Your address is updated successfully!</h4>";
echo '<script>window.location.href = "user-admin.php";</script>';
} else {
$tempalert = "Query Error 404";
include('libraries/alertmodalyet.php');
         }
}
?>
<form method="post">
<div class="deliver-areas py-5">
<?php
$ShowAdresses = mysqli_query($con, "SELECT * FROM buyer_address WHERE user_id='$userId'");
while($ADrow=mysqli_fetch_assoc($ShowAdresses)){
?>
<label>
<input type="radio" name="is_default" value="<?php echo $ADrow['id'];?>"> <?php echo $ADrow['address'];?>, <?php echo $ADrow['city'];?>, 
<?php echo $ADrow['suburb'];?>, <?php echo $ADrow['post_code'];?>
</label>
<?php } ?>

<input type="submit" name="make_default" class="savebtn" vlaue="Update">
                                       
   </div>
</form>

enter image description here

标签: php

解决方案


$is_default     = $_POST['is_default'];
$UpdateDaddress = mysqli_query($con, "UPDATE buyer_address SET

is_default      = '$is_default'

WHERE user_id='$userId'");

So you have an attempt at doing this at the top of your code...

Basically, what you need to do is set all addresses for the user to "false" (or in your case it looks like '') and then update the newly appointed default as "default".

Note: we'll use 0 and 1 as true/false

$user_id = $_SESSION["user_id"]; // Or wherever you get it from!

$default_address_id = $_POST["is__default"];



// With mysqli and `IF` logic
$sql = "
    UPDATE buyer_address SET is_default = IF(id = ?, 1, 0) WHERE user_id = ?;
";
$query = $con->prepare($sql);
$query->bind_param("ii", $default_address_id, $user_id);
$query->execute();

// With mysqli and `CASE` logic
$sql = "
    UPDATE buyer_address SET is_default = CASE
        WHEN
            id = ?
        THEN
            1
        ELSE
            0
    WHERE user_id = ?;
";

$query = $con->prepare($sql);
$query->bind_param("ii", $default_address_id, $user_id);
$query->execute();

// With PDO and emulate prepares
$sql = "
    UPDATE buyer_address SET is_default = 0 WHERE user_id = ?;
    UPDATE buyer_address SET is_default = 1 WHERE user_id = ? AND id = ?;
";
$query = $pdo->prepare($sql);
$query->execute([$user_id, $user_id, $default_address_id]);

You may want to add in additional checks to see if the form was submitted etc.


推荐阅读