php - 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>
解决方案
$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.
推荐阅读
- laravel - 一次从两个表中删除数据
- c# - 接口中不同类型的对象
- vue.js - Vue.filter 在 HTML 渲染时没有调用
- c - 在函数中使用指针的临时值
- xml - 如何通过命令行或使用 python/perl/sed/awk 从 pom.xml 中删除特定元素?
- html - Svg 动画未在 Safari 上运行
- c# - 有没有办法使用 c# 增加 POS 打印机的字体大小?
- android - 将数据从 Activity 发送到 Fragment - 如何?
- ruby-on-rails - 在 Rails 中使用 js.erb
- java - 再次将 StringIndexer 转换为 String。Apache Spark MLlib