【问题标题】:php function called by onchange of html selecthtml select的onchange调用的php函数
【发布时间】:2015-11-21 03:09:19
【问题描述】:

我正在学习 php 函数,但我无法根据用户更改为选择来为会话数组中的键分配新值。 (我有点菜鸟..)。

选择输入是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'] =&gt; 1; 但没有任何改变。

我不确定,但我认为我将 php 函数与 js 函数混淆了?使用用户计算机上的更改来更改存储在服务器上的数组值......嗯......我想这并不真正有效......

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

【问题讨论】:

  • 您将 JS 和 PHP 混合在一起,如果您想在浏览器中监控 onchange 事件并设置会话变量,您需要使用 Javascript 监控事件并将其发送到服务器AJAX。
  • 我认为可能是这样。这项工作即将完成,现在只需调整一些东西,我将不得不去学习AJAX来完成它......哦,我迟早要学习它......谢谢提示。如果您将其发布为答案,我会给您打勾@Dontfeedthecode。

标签: php function select this onchange


【解决方案1】:

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

<?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>

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

【讨论】:

    【解决方案2】:

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

    是的,确实,你正在混合 javascript 和 php,这不会那样工作。

    您想在 javascript/html 中使用任何 php,您必须将它们包含在 &lt;?php ?&gt; 标记中。

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

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

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

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

    【讨论】:

    • 谢谢大家 :) 你已经很好地向我展示了为什么需要这样做。很好的答案:)
    • 不客气。不断学习,提出更多问题,你很快就会变得更好:)。
    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2020-01-08
    • 2014-06-23
    • 1970-01-01
    • 2014-11-26
    • 2019-05-12
    相关资源
    最近更新 更多