[英]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.