【问题标题】:Edit User Modal won't work :?编辑用户模式不起作用:?
【发布时间】: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">&times;</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">&times;</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 queriesbind_param 将用户数据添加到查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 不要说“我稍后会做重要的安全工作”,因为有时以后永远不会发生。您需要首先做到这一点,并且始终就像您的生活依赖于它一样,因为它可能会发生。这段代码漏洞百出,如果运行太快就会发出声音。
  • @tadman 是对的。此外,您如何通过参数化查询来节省时间?
  • 感谢@tadman 的回复,我对编码有点陌生,所以我一定会按照你的建议去做。
  • enabling exceptions in mysqli 可以检测和解决很多问题,因此不会轻易忽略错误。设置完成后,请密切注意错误日志,以便在问题发生时发现问题。

标签: php jquery mysql mysqli


【解决方案1】:

正如 cmets 中所述,您的代码目前非常不安全。您绝对应该使用parametrised queries 来防止人们弄乱您的数据库,并使用protect yourself from xss attacks 来防止您的网站成为恶意软件。

不过,您的问题的答案是为您的输入字段提供name attribute in addition to an id

目前,您的表单没有发布任何数据 - 因此没有任何更改。

【讨论】:

  • 我注意到有人反对这个答案。据我所知,这是一个正确且相关的答案。如果有什么不正确或令人反感的地方,我将非常有义务了解那是什么。
  • 不是我的反对意见,而是一个糟糕的答案。即使在 SO 上链接到其他东西也不是一个好的答案。至少从 OP 的代码中添加一个代码 sn-p 来演示 name 属性的使用
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多