【发布时间】:2018-07-19 12:50:44
【问题描述】:
所以我正在尝试创建一个模式,它将从显示的表格中编辑用户(选择)。
我已经尝试了 2 种不同类型的提交来让这个过程正常工作,但首先是我的 PHP 代码..(是的,清理变量,很快就会添加它)
if ($_POST['edituser']) {
$uid = strip_tags($_POST['edituser']);
if (isset($_POST['email'])) {
$newemail = $_POST['email'];
mysqli_query($con, "UPDATE `users` SET `email` = '$newemail' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
if (isset($_POST['usergroup'])) {
$newusergroup = $_POST['usergroup'];
mysqli_query($con, "UPDATE `users` SET `usergroup` = '$newusergroup' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
if (isset($_POST['paypal'])) {
$newpaypal = $_POST['paypal'];
mysqli_query($con, "UPDATE `users` SET `paypal` = '$newpaypal' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
if (isset($_POST['avatarlink'])) {
$newavatarlink = $_POST['avatarlink'];
mysqli_query($con, "UPDATE `users` SET `avatarlink` = '$newavatarlink' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
if (isset($_POST['job'])) {
$newjob = $_POST['job'];
mysqli_query($con, "UPDATE `users` SET `job` = '$newjob' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
if (isset($_POST['aboutme'])) {
$aboutme = $_POST['aboutme'];
mysqli_query($con, "UPDATE `users` SET `aboutme` = '$newaboutme' WHERE `uid` = '$uid'") or die(mysqli_error($con));
}
header("Location: /staff/users?success=true");
die();
}
现在这是我尝试过的两种提交方法...
1 -
<?php
$ug = $userRow['usergroup'];
$result = mysqli_query($con, "SELECT * FROM `users`") or die(mysqli_error($con));
while ($row = mysqli_fetch_array($result)) {
echo '
<div id="editUser'.$row['uid'].'" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Edit User</h4>
</div>
<form method="POST" action="users">
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="username" class="control-label">Username</label>
<input type="text" class="form-control" readonly="" id="username" value="'.$row['username'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="email" class="control-label">Email</label>
<input type="text" class="form-control" name="email" id="email" value="'.$row['email'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="usergroup" class="control-label">Usergroup</label>';
if ($ug == "Owner" || $ug == "Manager") {
echo '<select name="usergroup" class="form-control">
<option value="'.$row['usergroup'].'" selected="selected" disabled>'.$row['usergroup'].'</option>
<option value="Client">Client</option>
<option value="Freelancer">Freelancer</option>
<option value="Moderator">Moderator</option>
<option value="Manager">Manager</option>
<option value="Owner" disabled>Owner</option>
</select>';
} else {
echo '<input type="text" class="form-control" readonly="" id="usergroup" value="'.$row['usergroup'].'" disabled>';
}echo '
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="paypal" class="control-label">PayPal</label>';
if ($ug == "Owner" || $ug == "Manager") {
echo '<input type="text" class="form-control" name="paypal" id="paypal" value="'.$row['paypal'].'">';
} else {
echo '<input type="text" class="form-control" readonly="" id="paypal" value="'.$row['paypal'].'" disabled>';
}echo '
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="joindate" class="control-label">Join Date</label>
<input type="text" class="form-control" readonly="" id="joindate" value="'.$row['joindate'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="joinip" class="control-label">Join IP</label>
<input type="text" class="form-control" readonly="" id="joinip" value="'.$row['joinip'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="avatarlink" class="control-label">Avatar Link</label>
<input type="text" class="form-control" name="avatarlink" id="avatarlink" value="'.$row['avatarlink'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="job" class="control-label">Job / Skills</label>
<input type="text" class="form-control" name="job" id="job" value="'.$row['job'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="aboutme" class="control-label">About</label>
<input type="text" class="form-control" name="aboutme" id="aboutme" value="'.$row['aboutme'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="portfolio_link" class="control-label">Portfolio</label>
<input type="text" class="form-control" name="portfolio_link" id="portfolio_link" value="'.$row['portfolio_link'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="tos" class="control-label">Accepted TOS</label>
<input type="text" class="form-control" readonly="" id="tos" value="'.$row['tos_accepted'].'" disabled>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-danger btn-block" name="edituser">Edit User</button>
</div>
</form>
</div>
</div>
</div>
'; }
?>
使用此方法(如上),没有任何反应...页面只是刷新。
2
<?php
$ug = $userRow['usergroup'];
$result = mysqli_query($con, "SELECT * FROM `users`") or die(mysqli_error($con));
while ($row = mysqli_fetch_array($result)) {
echo '
<div id="editUser'.$row['uid'].'" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Edit User</h4>
</div>
<form method="POST" action="users">
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="username" class="control-label">Username</label>
<input type="text" class="form-control" readonly="" id="username" value="'.$row['username'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="email" class="control-label">Email</label>
<input type="text" class="form-control" name="email" id="email" value="'.$row['email'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="usergroup" class="control-label">Usergroup</label>';
if ($ug == "Owner" || $ug == "Manager") {
echo '<select name="usergroup" class="form-control">
<option value="'.$row['usergroup'].'" selected="selected" disabled>'.$row['usergroup'].'</option>
<option value="Client">Client</option>
<option value="Freelancer">Freelancer</option>
<option value="Moderator">Moderator</option>
<option value="Manager">Manager</option>
<option value="Owner" disabled>Owner</option>
</select>';
} else {
echo '<input type="text" class="form-control" readonly="" id="usergroup" value="'.$row['usergroup'].'" disabled>';
}echo '
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="paypal" class="control-label">PayPal</label>';
if ($ug == "Owner" || $ug == "Manager") {
echo '<input type="text" class="form-control" name="paypal" id="paypal" value="'.$row['paypal'].'">';
} else {
echo '<input type="text" class="form-control" readonly="" id="paypal" value="'.$row['paypal'].'" disabled>';
}echo '
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="joindate" class="control-label">Join Date</label>
<input type="text" class="form-control" readonly="" id="joindate" value="'.$row['joindate'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="joinip" class="control-label">Join IP</label>
<input type="text" class="form-control" readonly="" id="joinip" value="'.$row['joinip'].'" disabled>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="avatarlink" class="control-label">Avatar Link</label>
<input type="text" class="form-control" name="avatarlink" id="avatarlink" value="'.$row['avatarlink'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="job" class="control-label">Job / Skills</label>
<input type="text" class="form-control" name="job" id="job" value="'.$row['job'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="aboutme" class="control-label">About</label>
<input type="text" class="form-control" name="aboutme" id="aboutme" value="'.$row['aboutme'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="portfolio_link" class="control-label">Portfolio</label>
<input type="text" class="form-control" name="portfolio_link" id="portfolio_link" value="'.$row['portfolio_link'].'">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="tos" class="control-label">Accepted TOS</label>
<input type="text" class="form-control" readonly="" id="tos" value="'.$row['tos_accepted'].'" disabled>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<input type="submit" name="edituser" class="btn btn-danger btn-block" value="Edit User">
</div>
</form>
</div>
</div>
</div>
'; }
?>
尝试此方法时(上图),页面和通知显示..但数据库中没有任何更新。
感谢您的帮助:)
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
不要说“我稍后会做重要的安全工作”,因为有时以后永远不会发生。您需要首先做到这一点,并且始终就像您的生活依赖于它一样,因为它可能会发生。这段代码漏洞百出,如果运行太快就会发出声音。
-
@tadman 是对的。此外,您如何通过不参数化查询来节省时间?
-
感谢@tadman 的回复,我对编码有点陌生,所以我一定会按照你的建议去做。
-
enabling exceptions in
mysqli可以检测和解决很多问题,因此不会轻易忽略错误。设置完成后,请密切注意错误日志,以便在问题发生时发现问题。