可选字段更新查询

时间:2016-09-23 15:02:02

标签: php mysql

我有一个小表单连接到我的数据库中的可选字段。它不是以任何方式要求的。

如果您访问该页面,输入字段中没有任何内容,它会给我$ gamername undefined。在访问页面时,当我甚至没有单击表单按钮时,它会自动显示“GameName Updated”的echo语句。如果我在表单中添加了一些内容,它会将它的日期更新到它应该的数据库..但它也不会回显该字段,除非我刷新页面然后它再次提交它。

<?php

   if(isset($_SESSION['uid'])) {    
    $user_id = $_SESSION['uid'];

    $sql = "SELECT * FROM users WHERE uid = '{$user_id}' ";    
    $result = query($sql);

    while (($row = mysqli_fetch_assoc($result)) != false) {

        $user_id = $row['uid'];
        $gamename = $row['gamename']; 

    }
}

?>
<?php

function update_game_name(){

        $user_id = $_SESSION['uid'];           
        $gamename = escape($_POST['gamename']);        

        $sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'"; 
        $result = query($sql);

            echo ('GameName Updated.');



        }
 ?>
<div class="container no-scope-wrap">
  <div class="row">
    <div class="col-md-12">
     <?php update_game_name(); ?>
     <div class="no-scope-border">    
         <h2 class="form-field-title">Game Name</h2>
             <form role="form" action="<?php $_SERVER['PHP_SELF'];?>" method="post">
                <div class="form-group">
                    <label class="form-field-label">GameName</label>
                    <input class="form-control input-lg" id="name" name="gamename" type="text" placeholder="GameName" value="<?php echo $gamename;?>">
                </div>              
                <button type="submit" name="update_game_name" id="btn" class="btn btn-default btn-lg">Update GameName</button>              
             </form>
            </div>
        </div>
    </div>
</div>

2 个答案:

答案 0 :(得分:1)

在您的函数中,您需要在进行更新后检查是否有帖子数据:

  function update_game_name(){

    if ($_SERVER["REQUEST_METHOD"]!="POST") return;

    $user_id = $_SESSION['uid'];           
    $gamename = escape($_POST['gamename']);        

    $sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'"; 
    $result = query($sql);

    echo ('GameName Updated.');



  }

请注意,每次加载页面时都会调用此函数。显示警告消息是因为在没有发布数据的情况下调用了该函数。

答案 1 :(得分:1)

正如@FIgor已经说过的,每次加载页面时都会运行您的函数,而不会检查发布的数据。并且您也不会在发布后用新数据填充变量“$ gamename”。有两种选择可以达到你想要的效果。

  1. 使用您已有的功能,但仅在提交表单时以及从数据库中检索用户数据之前,请确保从数据库中读取新的更新数据:

       if(isset($ _ SESSION ['uid'])){
        $ user_id = $ _SESSION ['uid'];

    if(isset($_POST['gamename']) && $_POST['gamename'] != '')
         update_game_name();
    
    $sql = "SELECT * FROM users WHERE uid = '{$user_id}' ";    
    $result = query($sql);
    
    while (($row = mysqli_fetch_assoc($result)) != false) {
    
        $user_id = $row['uid'];
        $gamename = $row['gamename']; 
    
    }
    

    }
    ?&GT;`

  2. 你不再在你的html部分调用你的函数了。

    1. 检查您的函数内部的已发布数据,如FIgor建议的那样,但让它返回新的更新值。

      function update_game_name(){

      if ($_SERVER["REQUEST_METHOD"]!="POST") return;
      
      $user_id = $_SESSION['uid'];           
      $gamename = escape($_POST['gamename']);        
      
      $sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'"; 
      $result = query($sql);
      
      echo ('GameName Updated.');
      
      return $gamename;
      

      }

    2. 然后调用这个函数:

      $gamename = update_game_name();