2016-09-23 105 views
0

我有一个小型表单连接到我的数据库中的可选字段。这不是必需的。可选字段更新查询

如果您访问的页面上没有任何输入字段,它会给我一个$ 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> 

回答

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.'); 



    } 

注意,这个函数被调用每次加载页面的时间。显示警告消息是因为该功能在没有发布数据的情况下被调用。

+0

Flgor它仍然不会在现场除非回声出值我重新访问该页面。 – Amoro

+0

检查$ sql是否在创建变量后在某个parte中执行'echo $ sql'。在使用$ _SESSION之前检查会话是否打开 –

+0

Flgor ok我添加了这个头文件(“Location:”。$ _SERVER ['REQUEST_URI']);它的作品,但更新时不会显示游戏名称更新回声 – Amoro

1

正如@FIgor所说,您的函数在您每次加载页面时都会运行,并且不会检查发布的数据。而且你也不会在发布后用新数据填充变量“$ gamename”。有2个选项可以实现你想要的。

  1. 使用功能,你已经有了,但只有当表单提交,并从数据库中检索用户数据之前,以确保您在您的变量从DATABSE读取新的,更新的数据:

    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']; 
    
    } 
    

    }
    ?>`

你不要在你的HTML部分再调用你的函数。

  • 检查你函数内部张贴的数据显示,截至FIgor建议,但要返回新的,更新的价值。

    功能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; 
    

    }

  • 然后调用这样的功能:

    $gamename = update_game_name(); 
    
    +0

    moni_dragu它一切正常,但它回声gamername更新2次一个内部的div之外 – Amoro

    +0

    你使用哪种方法? –

    +0

    我按照你的建议使用,如果你看我的html我使用这个<?php update_game_name(); ?>致电 – Amoro