【问题标题】:Update user account info is not working even after getting success message php即使在收到成功消息 php 后更新用户帐户信息也不起作用
【发布时间】:2018-08-05 16:36:59
【问题描述】:

您好,我希望登录后的用户能够更新他们的帐户信息。当我填写 for 并点击提交按钮时,我收到了成功消息,但是当我检查我的数据库时,实际上没有任何更新。

我是从这段代码开始的

<?php
    if(!isset($_SESSION['name'])){
    header("location: signin.php");
}


$name=$_SESSION['name'];
$submitted = '';

$sql = "SELECT `name`, `lastname`, `email`, `phone`, `address`, `apt`, `city`, `state`, `zip` FROM `Users` WHERE name = '$name'";
$result = mysqli_query($con,$sql); 
$row = mysqli_fetch_assoc($result);
$acc_name = $row['name'];
$acc_lastname = $row['lastname'];
$acc_email = $row['email'];
$acc_phone = $row['phone'];
$acc_address = $row['address'];
$acc_apt = $row['apt'];
$acc_city = $row['city'];
$acc_state = $row['state'];
$acc_zip = $row['zip'];

?>

<?php

 //UPDATE FORM
if(isset($_POST['save'])){ 

    $name=$_POST['name'];
    $name = mysqli_real_escape_string($con,$name);
    $lastname=$_POST['lastname'];
    $lastname = mysqli_real_escape_string($con,$lastname);
    $email=$_POST['email'];
    $email = mysqli_real_escape_string($con,$email);
    $phone=$_POST['phone'];
    $phone = mysqli_real_escape_string($con,$phone);
    $address=$_POST['address'];
    $address = mysqli_real_escape_string($con,$address);
    $apt=$_POST['apt'];
    $apt = mysqli_real_escape_string($con,$apt);
    $city=$_POST['city'];
    $city = mysqli_real_escape_string($con,$city);
    $state=$_POST['state'];
    $state = mysqli_real_escape_string($con,$state);
    $zip = $_POST['zip'];
    $zip = mysqli_real_escape_string($con,$zip);
    $password= $_POST['password'];
    $hash = password_hash($password, PASSWORD_BCRYPT);

$updateQuery = "UPDATE Users SET name = '$name', lastname = '$lastname', email = '$email', phone = '$phone', address = '$address', apt = '$apt', city = '$city', state = '$state', zip = '$zip', password = '$hash' WHERE name = '$name'";
$updateResult = mysqli_query($con, $updateQuery);
if(!$updateResult){
die('there was an error running query [' . $con->error . ']');

}else{
$submitted = 'Your account has been updated.';
}
}
?>




 <div class="container">

 <div class="row">
   <div class="col-sm-2">
     </div>
       <div class="col-sm-8 form">
          <form id="updateForm" method="post" class="form-horizontal" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" role="form" data-toggle="validator">
               <div class="controls">
                        <div class="text-center title">
                            <h1>Account Settings</h1>
                            <hr>
                            <div class="submitted">
                                <?php echo "<p> <font color=red size='5pt'>$submitted</font></p>"; ?>
                            </div>
                        </div>


              <!--parents info -->


                        <div class="heading">

                            <h2 class="rowspace">Parent's Information</h2> 
                            <!--   <hr>-->
                        </div>


                        <div class="row form-group">
                            <div class="col-sm-1"></div>
                            <div class="col-sm-3">
                                <label for="form_name" class="question">First Name</label>
                            </div>

                            <div class="col-sm-6">
                                <input id="name" type="text" name="name" class="form-control" data-error="First name is required." placeholder = "<?php echo $acc_name?>">
                                <div class="help-block with-errors"></div>
                            </div>
                        </div>

                  <div class="row form-group">
                      <div class="col-sm-1"></div>
                    <div class="col-sm-3">
                        Last Name</div>
                    <div class="col-sm-6">
                      <input id="lastname" type="text" name="lastname" class="form-control" data-error="Last name is required." placeholder = "<?php echo $acc_lastname?>">
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>

                    <div class="row form-group">
                        <div class="col-sm-1"></div>
                      <div class="col-sm-3">
                        <label for="email">Email Address</label></div>
                          <div class="col-sm-6">
                            <input id="email" type="email" name="email" class="form-control" data-error="Valid email is required." placeholder = "<?php echo $acc_email?>">
                              <span></span>
                              <div class="help-block with-errors"></div>
                          </div>
              </div>


                  <div class="row form-group">
                      <div class="col-sm-1"></div>
                    <div class="col-sm-3">
                        <label for="form_phone">Phone Number</label>
                      </div>
                    <div class="col-sm-6">
                      <input id="phone" type="tel" name="phone" class="form-control" data-error="Phone number is required." placeholder = "<?php echo $acc_phone?>" >
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>


              <!--ADDRESS-->

            <div class="heading container-fluid">
              <h2 class="rowspace">Address</h2> 
             <!-- <hr>-->
            </div>

                    <div class="row form-group">
                        <div class="col-sm-1"></div>
                      <div class="col-sm-3">
                        <label for="name">Address</label></div>
                          <div class="col-sm-6">
                            <input id="address" type="text" name="address" class="form-control" data-error="Address is required." placeholder = "<?php echo $acc_address?>">
                              <div class="help-block with-errors"></div>
                          </div>
                     </div>
                  <div class="row form-group">
                      <div class="col-sm-1"></div>
                    <div class="col-sm-3">
                        <label for="name">APT Number</label></div>
                    <div class="col-sm-6">
                      <input id="apt" type="text" name="apt" class="form-control" placeholder="<?php echo $acc_apt?>">
                    </div>
                  </div>

                    <div class="row form-group">
                        <div class="col-sm-1"></div>
                      <div class="col-sm-3">
                        <label for="name">City</label>
                        </div>
                          <div class="col-sm-6">
                            <input id="city" type="text" name="city" class="form-control" placeholder="<?php echo $acc_city?>">
                              <div class="help-block with-errors"></div>
                          </div>
                     </div>
                  <div class="row form-group">
                      <div class="col-sm-1"></div>
                    <div class="col-sm-3">
                        <label for="name">State</label>
                    </div>
                    <div class="col-sm-6">
                      <input id="state" type="text" name="state" class="form-control" placeholder="<?php echo $acc_state?>">
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>
                  <div class="row form-group">
                      <div class="col-sm-1"></div>
                    <div class="col-sm-3">
                        <label for="name">Zip</label></div>
                    <div class="col-sm-6">
                      <input id="zip" type="text" name="zip" class="form-control" placeholder="<?php echo $acc_zip?>">
                      <div class="help-block with-errors"></div>
                    </div>
                  </div>

              <!-- LOGING INFO -->

            <div class="heading container-fluid">
              <h2>Login Information</h2> 
              <!--<hr>-->
            </div>


                    <div class="row form-group">
                        <div class="col-sm-1"></div>
                      <div class="col-sm-3">
                        <label for="name">New Password</label></div>
                          <div class="col-sm-6">
                            <input id="password" type="text" name="password" class="form-control">
                              <div class="help-block with-errors"></div>
                          </div>
                     </div>

                    <div class="row form-group">
                        <div class="col-sm-1"></div>
                      <div class="col-sm-3">
                        <label for="name">Confirm Password</label></div>
                          <div class="col-sm-6">
                            <input id="confirmPw" type="text" name="confirmPW" class="form-control" >
                              <div class="help-block with-errors"></div>
                          </div>
                     </div>






          <div class="row">
              <div class="col-sm-12 text-center rowspace">
                    <input name="save" id="save" tabindex="5" value="Save Changes" type="submit" style="width:200px;">

              </div>
           </div>
      </div>
    </form> 

使用上面的这段代码,我不断收到$submitted = 'Your account has been updated.'

但我的数据库中没有更新,我检查了错误日志,没有错误显示。

然后我尝试分离代码并将php放入edit_acc.php

所以我的表单标签操作将是:action="edit_acc.php

编辑-acc.php:

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    session_start();

    if(isset($_SESSION['name'])){
    $name=$_SESSION['name'];
    $submitted = '';
    }



    if(isset($_POST['save'])){ 

    $name=$_POST['name'];
    $name = mysqli_real_escape_string($con,$name);
    $lastname=$_POST['lastname'];
    $lastname = mysqli_real_escape_string($con,$lastname);
    $email=$_POST['email'];
    $email = mysqli_real_escape_string($con,$email);
    $phone=$_POST['phone'];
    $phone = mysqli_real_escape_string($con,$phone);
    $address=$_POST['address'];
    $address = mysqli_real_escape_string($con,$address);
    $apt=$_POST['apt'];
    $apt = mysqli_real_escape_string($con,$apt);
    $city=$_POST['city'];
    $city = mysqli_real_escape_string($con,$city);
    $state=$_POST['state'];
    $state = mysqli_real_escape_string($con,$state);
    $zip = $_POST['zip'];
    $zip = mysqli_real_escape_string($con,$zip);
    $password= $_POST['password'];
    $hash = password_hash($password, PASSWORD_BCRYPT);

    $updateQuery = "UPDATE Users SET name = '$name', lastname = '$lastname', email = '$email', phone = '$phone', address = '$address', apt = '$apt', city = '$city', state = '$state', zip = '$zip', password = '$hash' WHERE name = '$name'";
    $updateResult = mysqli_query($con, $updateQuery);
    if(!$updateResult){
    die('there was an error running query [' . $con->error . ']');

    }else{
    $submitted = 'Your account has been updated.';
    }
    }
    ?>

当我分离代码时,提交edit_acc.php后会显示一个空白页面。表格仍然没有更新,错误日志中仍然没有任何内容。

谁能帮忙?

编辑

我需要更改我的查询:

$updateQuery = "UPDATE Users SET name = '$name', lastname = '$lastname', email = '$email', phone = '$phone', address = '$address', apt = '$apt', city = '$city', state = '$state', zip = '$zip', password = '$hash' WHERE name = '$name'";

到:

$updateQuery = "UPDATE Users SET name = '$name', lastname = '$lastname', email = '$email', phone = '$phone', address = '$address', apt = '$apt', city = '$city', state = '$state', zip = '$zip', password = '$hash' WHERE id = '23'";

感谢 Asisito 推荐使用 id 而不是 name。

【问题讨论】:

  • 尝试 var_dump 你的 $updateResult 变量
  • 当我在 edit_acc.php 中执行 var_dump($updateResult) 时,整个页面都是白色的并打印了“bool(true)”,但它仍然没有在我的数据库中更新。

标签: php html mysqli


【解决方案1】:

我在你的代码中看不到任何初始化 mysqli 数据库连接的部分,比如

$con = mysqli_connect("my_host","my_user","my_password","my_db");

我建议把这段代码放在edit-acc.php之后

if(isset($_SESSION['name'])){
$name=$_SESSION['name'];
$submitted = '';
}

因为那时你开始使用 $con。

编辑:我认为使用唯一 ID 比使用 $name 更好,因为可以多次使用相同的名称。因此,您可以将用户 ID 存储在 Session 中,并根据数据库的需要在某些点获取您需要的所有数据。

【讨论】:

  • 会话开始后,我确实在两个页面上都有数据库连接。我的问题中没有包含那段代码。我会更新它。尽管即使连接了数据库,它也不起作用。我知道它已提交,但在我的数据库中没有更新。
  • 是的,不久前我意识到使用 id 会更好。一切正常后,我会回去更改它。
  • @Asisito 感谢您将我的更新查询从 WHERE name = '$name' 更改为 WHERE id='23' 它开始工作。我想使用名称的问题是我也在尝试更新名称。所以我肯定会回去并将 id 存储在我的会话中。
猜你喜欢
  • 2020-04-05
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2014-02-23
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多