php 由 html 的 onchange 调用的函数 select
php function called by onchange of html select
我正在学习 php 函数,但我无法根据用户对 select 的更改为会话数组中的键分配新值。 (我有点菜鸟..)。
select 输入是 foreach
循环的一部分(foreach($_SESSION['results'] as $players){
。$players[0]
是玩家 ID 号。
这里是 select 输入:
<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 位玩家赢得游戏,并且与该名称对应的 select 框更改为“1st”,则所需的输出为:
$_SESSION['results'][3]['place'] => 1;
但什么都没有改变。
我不确定,但我想我混淆了 php 函数和 js 函数?使用用户计算机上的更改来更改存储在服务器上的数组值......嗯......我想这实际上不起作用......
那么如何使用 onchange(或类似的)来更改 php 会话数组值?
很高兴看到您正在学习 php。
是的,确实如此,您将 javascript 和 php 混合使用,这样是行不通的。
任何您想在 javascript/html 中使用的 php,您必须将它们包含在 <?php ?>
标签中。
遗憾的是,您无法直接在 javascript 中更改 php 会话变量。您必须向具有 php 的服务器发送一个 ajax 请求,然后您在那里分配会话变量。
1. 因此,在您的 placechange() 函数中,使用 javascript 或 jquery 库添加一个 ajax 请求(我建议jquery,因为它更容易)发送一个 post 请求,其中包含您希望 php 分配的新会话值。
2. 然后在 php 文件中,获取 post 字段,并将其分配给相应的会话变量。
我希望这能回答你的问题。
这是您需要执行的操作的粗略示例,它未经测试,但会为您指明正确的方向:
<?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 函数,但我无法根据用户对 select 的更改为会话数组中的键分配新值。 (我有点菜鸟..)。
select 输入是 foreach
循环的一部分(foreach($_SESSION['results'] as $players){
。$players[0]
是玩家 ID 号。
这里是 select 输入:
<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 位玩家赢得游戏,并且与该名称对应的 select 框更改为“1st”,则所需的输出为:
$_SESSION['results'][3]['place'] => 1;
但什么都没有改变。
我不确定,但我想我混淆了 php 函数和 js 函数?使用用户计算机上的更改来更改存储在服务器上的数组值......嗯......我想这实际上不起作用......
那么如何使用 onchange(或类似的)来更改 php 会话数组值?
很高兴看到您正在学习 php。
是的,确实如此,您将 javascript 和 php 混合使用,这样是行不通的。
任何您想在 javascript/html 中使用的 php,您必须将它们包含在 <?php ?>
标签中。
遗憾的是,您无法直接在 javascript 中更改 php 会话变量。您必须向具有 php 的服务器发送一个 ajax 请求,然后您在那里分配会话变量。
1. 因此,在您的 placechange() 函数中,使用 javascript 或 jquery 库添加一个 ajax 请求(我建议jquery,因为它更容易)发送一个 post 请求,其中包含您希望 php 分配的新会话值。
2. 然后在 php 文件中,获取 post 字段,并将其分配给相应的会话变量。
我希望这能回答你的问题。
这是您需要执行的操作的粗略示例,它未经测试,但会为您指明正确的方向:
<?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'] );