2016-09-23 109 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