функция php, вызываемая onchange of html select

Я узнаю о функциях php, и у меня возникают проблемы с назначением нового значения для ключа в массиве сеансов, основанного на изменении пользователя на выбор. (Я немного нуб ..).

Выбор входа является частью foreach цикл (foreach($_SESSION['results'] as $players){, $players[0] это идентификационный номер игрока.

Вот выбор входа:

<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;
}
}
}

Если четвертый игрок выигрывает игру, и поле выбора, соответствующее этому имени, изменяется на «1-й», желаемый результат:
$_SESSION['results'][3]['place'] => 1; но ничего не меняется.

Я не уверен, но я думаю, что я путаю php-функции с js-функциями? Использование изменений на компьютере пользователя для изменения значения массива, хранящегося на сервере …. хммм … я думаю, что это на самом деле не работает …

Итак, как я могу использовать onchange (или аналогичный) для изменения значения массива сессии php?

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

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

Другие решения

Рад видеть, что вы изучаете php.

Да, действительно, вы смешиваете JavaScript и PHP, которые не будут работать таким образом.

Любой php, который вы хотите использовать внутри javascript / html, вы должны включить их в <?php ?> тег.

К сожалению, вы не можете изменить переменную сеанса PHP прямо в JavaScript. Вам нужно будет отправить ajax-запрос на сервер, на котором есть php, а затем назначить там переменную сеанса.

1. Поэтому внутри вашей функции placechange () добавьте ajax-запрос с javascript или библиотекой jquery (я предлагаю jquery, поскольку это проще), который отправляет запрос post, содержащий новое значение сеанса, которое вы хотите назначить php.

2. Затем внутри php-файла получите поле post и назначьте его соответствующей переменной сеанса.

Я надеюсь, что это отвечает на ваш вопрос.

1

По вопросам рекламы [email protected]