【发布时间】:2022-01-04 17:32:52
【问题描述】:
我想更新数据库中的一条记录,但一次只能更新一条。目前,当我单击提交时,所有其他值都是空的,将从数据库中删除。我如何使它保持其他值?
我能想到的唯一解决方法是让每个字段本身成为一个单独的进程,但这似乎效率低下
这是处理文件:
<?php
session_start();
$host="localhost";
$user="root";
$password="";
$db="portal";
$data=mysqli_connect($host,$user,$password,$db);
$currentuser = $_SESSION["username"];
if($data===false)
{
die("connection error");
}
if(isset($_POST['submit']))
{
$username=$_POST['username'];
$password=$_POST['password'];
$name=$_POST['name'];
$phonenum=$_POST['phonenum'];
$address=$_POST['address'];
$email=$_POST['email'];
$sql="UPDATE user SET username='$username', password='$password', name='$name', phonenum='$phonenum', address='$address', email='$email' WHERE username = '$currentuser'";
$result=mysqli_query($data,$sql);
}
?>
<!doctype html>
<html>
<head>
<title>User Updated!</title>
<!--Icons-->
<script src="https://kit.fontawesome.com/5669020dd7.js" crossorigin="anonymous"></script>
<!--Font-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600&display=swap" rel="stylesheet">
<!--For navbar-->
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<style>
body {
background-image:url('bg5.png');
background-color:#9ec6e4;
background-size: 100% auto;
font-family: 'Source Sans Pro', sans-serif;
}
.main {
margin-left: 220px; /* Same as the width of the sidenav */
padding: 0px 10px;
}
.bgbox {
position: absolute;
z-index: -1;
}
.container {
border-radius: 5px;
background-color: #fffdd0;
padding: 20px;
}
h1 {
font-family: 'Source Sans Pro', sans-serif;
font-size: 50px;
}
.padding {
margin-left: 50px;
}
/*button*/
.button {
background-color: #d1b7a0;
border-radius: 8px;
font-family: 'Source Sans Pro', sans-serif;
color: black;
text-align: center;
text-decoration: none;
display: inline-block;
padding: 5px 20px;
margin: 8px 0;
border: none;
border-radius: 8px;
cursor: pointer;
}
.button:hover {
background-color: #5f4f47;
color: #d1b7a0;
}
/*button*/
</style>
</head>
<body>
<!--navbar-->
<div id="usernav">
</div>
<script>
$(function(){
$("#usernav").load("usernav.html");
});
</script>
<!--navbar-->
<div class="main">
<br>
<a>Welcome, </a><?php echo $_SESSION["username"] ?><a>!</a>
</div>
<br>
<div class="bgbox">
<img src="box.png" style="opacity:0.6; width: 100%;">
</div>
<div class="main">
<br><br>
<div class="container">
<h1>User Updated!</h1>
<div class="padding">
<?php echo "<b>Username:</b> $username<br/><br/>";
echo "<b>Name:</b> $name<br/><br/>";
echo "<b>Phone Number:</b> $phonenum<br/><br/>";
echo "<b>Office Address:</b> $address<br/><br/>";
echo "<b>Email:</b> $email";?>
</div>
</div>
</div>
</body>
</html>
这是我的html:
<?php
session_start();
$host="localhost";
$user="root";
$password="";
$db="portal";
$data=mysqli_connect($host,$user,$password,$db);
$currentuser = $_SESSION["username"];
if($data===false)
{
die("connection error");
}
if(isset($_POST['submit']))
{
$username=$_POST['username'];
$password=$_POST['password'];
$name=$_POST['name'];
$phonenum=$_POST['phonenum'];
$address=$_POST['address'];
$email=$_POST['email'];
$sql="UPDATE user SET username='$username', password='$password', name='$name', phonenum='$phonenum', address='$address', email='$email' WHERE username = '$currentuser'";
$result=mysqli_query($data,$sql);
}
?>
<!doctype html>
<html>
<head>
<title>User Updated!</title>
<!--Icons-->
<script src="https://kit.fontawesome.com/5669020dd7.js" crossorigin="anonymous"></script>
<!--Font-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600&display=swap" rel="stylesheet">
<!--For navbar-->
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<style>
body {
background-image:url('bg5.png');
background-color:#9ec6e4;
background-size: 100% auto;
font-family: 'Source Sans Pro', sans-serif;
}
.main {
margin-left: 220px; /* Same as the width of the sidenav */
padding: 0px 10px;
}
.bgbox {
position: absolute;
z-index: -1;
}
.container {
border-radius: 5px;
background-color: #fffdd0;
padding: 20px;
}
h1 {
font-family: 'Source Sans Pro', sans-serif;
font-size: 50px;
}
.padding {
margin-left: 50px;
}
/*button*/
.button {
background-color: #d1b7a0;
border-radius: 8px;
font-family: 'Source Sans Pro', sans-serif;
color: black;
text-align: center;
text-decoration: none;
display: inline-block;
padding: 5px 20px;
margin: 8px 0;
border: none;
border-radius: 8px;
cursor: pointer;
}
.button:hover {
background-color: #5f4f47;
color: #d1b7a0;
}
/*button*/
</style>
</head>
<body>
<!--navbar-->
<div id="usernav">
</div>
<script>
$(function(){
$("#usernav").load("usernav.html");
});
</script>
<!--navbar-->
<div class="main">
<br>
<a>Welcome, </a><?php echo $_SESSION["username"] ?><a>!</a>
</div>
<br>
<div class="bgbox">
<img src="box.png" style="opacity:0.6; width: 100%;">
</div>
<div class="main">
<br><br>
<div class="container">
<h1>User Updated!</h1>
<div class="padding">
<?php echo "<b>Username:</b> $username<br/><br/>";
echo "<b>Name:</b> $name<br/><br/>";
echo "<b>Phone Number:</b> $phonenum<br/><br/>";
echo "<b>Office Address:</b> $address<br/><br/>";
echo "<b>Email:</b> $email";?>
</div>
</div>
</div>
</body>
</html>
【问题讨论】:
-
请注意,通过手动将
$_POST数据连接到查询中,您对 SQL 注入持开放态度。有关防止这种情况的建议,请参阅stackoverflow.com/questions/60174/…。你能澄清一下问题是什么吗?您的查询已经有WHERE username = x,所以它应该只更新用户x。你能在查询运行之前确认$currentuser的值是多少吗?看起来您在问题中粘贴了两次相同的 HTML 文件。 -
如果您要提交一个值数组 (
<input name="username[]" />),那么$_POST['username']应该默认返回一个数组,您可以对其进行迭代以对每个提交的用户进行查询。请参阅stackoverflow.com/questions/21750478/retrieve-post-array-values 了解更多信息。 -
当我更新名称时,它会更新正确的用户,但所有其他字段(电子邮件、密码等)都是空白的,因为该字段是空的,因为我只想更新名称。我正在寻找一种能够仅更新用户输入的字段的方法。
-
然后,无论如何,从
UPDATE语句中删除其他字段,并且只更新您真正想要更新的内容。 ;) -
啊,那么您可以使用条件动态构建查询,或者您可以将查询更改为
SET phonenum = IFNULL($phonenum, phonenum)这样它会设置新值,如果它为空,它将使用现有的phonenum查询中的值。