2015-11-21 3 views
-1

Я узнаю о функциях php, и у меня возникли проблемы с назначением нового значения ключу в массиве сеансов на основе изменения пользователями для выбора. (Я немного нуб ..). .php function, вызванный onchange of html 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; 
     } 
    } 
} 

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

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

Так как я могу использовать onchange (или подобное) для изменения значения массива php-сеанса?

+1

Вы смешиваете JS и PHP вместе, если вы хотите отслеживать событие onchange в своем браузере и настроить его на сеансовую переменную, вам необходимо следить за событием с помощью Javascript и отправлять его на сервер с помощью AJAX. –

+0

Я думал, что это может быть так. Эта работа настолько близка к тому, чтобы быть готовой, просто подстраивая несколько вещей сейчас, и мне нужно пойти и изучить AJAX, чтобы закончить ее ... Ну, я должен научиться рано или поздно ... Спасибо за Подсказка. Если вы опубликуете это в качестве ответа, я дам вам отметку @Dontfeedthecode. – Tunna182

ответ

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

Еще раз спасибо :) – Tunna182

1

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

Да, вы смешиваете javascript и php, которые не будут работать таким образом.

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

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

1. Так внутри функции placechange(), добавить запрос Ajax с Javascript или библиотеки Jquery (я предлагаю JQuery, так как это проще), который посылает запрос на запись, содержащую новое значение сеанса, который вы хотите РНР назначить.

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

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

+1

Спасибо за кучи :) Вы мне очень хорошо показали, почему это нужно делать таким образом. Большой ответ :) – Tunna182

+1

Добро пожаловать. Продолжайте учиться, задавайте больше вопросов, и вам будет лучше в это мгновение :). –