html select的onchange调用的php函数


php function called by onchange of html select

我正在学习php函数,在根据用户对select的更改为会话数组中的键分配新值时遇到了问题。(我有点傻…)

选择输入是foreach循环的一部分(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;
      }
   }
}

如果第4名玩家赢得了游戏,并且与该名称对应的选择框更改为"1st",则所需输出为:$_SESSION['results'][3]['place'] => 1;,但一切都没有改变。

我不确定,但我想我把php函数和js函数混在一起了?使用用户计算机上的更改来更改存储在服务器上的数组值。。。。嗯……我想那真的不管用。。。

那么,我如何使用onchange(或类似的)来更改php会话数组值呢?

这里有一个你需要做什么的粗略例子,它没有经过测试,但它会为你指明正确的方向:

<?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'] );

很高兴看到您正在学习php。

的确,您将javascript和php混合在一起,但这样做是行不通的。

任何想要在javascript/html中使用的php,都必须将它们包含在<?php ?>标记中。

遗憾的是,您无法直接在javascript中更改php会话变量。您必须向具有php的服务器发送ajax请求,然后在那里分配会话变量。

1.因此,在您的placechange()函数中,添加一个带有javascript的ajax请求或jquery库(我建议使用jquery,因为它更容易),后者发送一个包含您希望php分配的新会话值的post请求。

2.然后在php文件中,获取post字段,并将其分配给相应的会话变量。

我希望这能回答你的问题。