簡體   English   中英

由onselect的html select調用的php函數

[英]php function called by onchange of html select

我正在學習有關php函數的信息,並且在根據用戶更改為select的值向會話數組中的鍵分配新值時遇到麻煩。 (我有點菜了。)

選擇輸入是foreach循環的一部分( foreach($_SESSION['results'] as $players){ $players[0] foreach($_SESSION['results'] as $players){$players[0]是玩家ID號。

這是選擇輸入:

<select name='place" . $players[0] ."' onchange='placechange(". $players[0] .", this)'> 
<option value='5'>5th</option>
<option value='4'>4th</option>
<option value='3'>3rd</option>
<option value='2'>2nd</option>
<option value='1'>1st</option> 
</select>

和功能

function placechange($id, $pla){
   for ($x = 0; $x < count($_SESSION['results']); $x++){
      if ($_SESSION['results'][$x][0] == $id){
         $_SESSION['results'][$x]['place'] = $pla;
      }
   }
}

如果第四名玩家贏得比賽,並且與該名稱對應的選擇框更改為“第一”,則期望的輸出為: $_SESSION['results'][3]['place'] => 1; 但是什么都沒有改變。

我不確定,但是我想我將php函數與js函數混為一談? 使用用戶計算機上的更改來更改存儲在服務器上的數組值..hmmm .....我想那實際上是行不通的...

那么,如何使用onchange(或類似方法)來更改php會話數組值?

很高興看到您正在學習php。

是的,確實,您正在混合使用javascript和php,但這種方式無法正常工作。

您想在javascript / html中使用的任何php,都必須將它們包含在<?php ?>標記中。

可悲的是,您不能直接在javascript中更改php會話變量。 您將不得不向具有php的服務器發送ajax請求,然后在此處分配會話變量。

1.因此,在您的placechange()函數中,使用javascript或jquery庫添加ajax請求(我建議使用jquery,因為這樣比較容易),該請求發送包含您希望php分配的新會話值的發布請求。

2.然后在php文件中,獲取post字段,並將其分配給相應的session變量。

我希望能回答您的問題。

這是您需要做的一個粗略示例,它未經測試,但可以為您指明正確的方向:

<?php foreach($_SESSION['results'] as $players): ?>
<select name="place<?=$players[0] ?>" class="placechange" data-place="<?=$players[0] ?>"> 
<option value="5">5th</option>
<option value="4">4th</option>
<option value="3">3rd</option>
<option value="2">2nd</option>
<option value="1">1st</option> 
</select>
<?php endforeach ?>

<script>
$(document).ready(function() {

    // Monitor your selects for change by classname
    $('.placechange').on('change', function() { 

         // Save the place increment and value of the select
         var place = $(this).data('place'),
             value = $(this).val();

         // Send this data to a script somewhere via AJAX
         $.ajax({
             method: "POST",
             url: "script.php",
             data: { 
                 place: place,
                 value: value
             }
          })
          .done(function( msg ) {
              alert( "Data Saved: " + msg );
          });
    });
});
</script>

script.php

<?php
// This is your function I'm not sure what you're doing here but
// you can send the data to it with the post vars below
function placechange($id, $pla){
    for ($x = 0; $x < count($_SESSION['results']); $x++){
        if ($_SESSION['results'][$x][0] == $id){
            $_SESSION['results'][$x]['place'] = $pla;
        }
    }
}

placechange( $_POST['place'], $_POST['value'] );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM