2013-03-06 3 views
0

У меня есть два окна выбора и link.i выберите одно значение из первого окна выбора, а другое из второго поля выбора и нажмите ссылку. Значения должны быть сохранены в массиве каждый раз, когда предыдущее значение не заменяется. Как я могу сделать это, не используя несколько полей выбора?Сохранение значений полей выбора в массив

<select name="sq" id="sq" > 
<option value=""></option> 
</select> 

<select name="as" id="as" > 
<option value=""></option> 
</select> 

извините забыл mention..its в CodeIgniter

+1

Как вы относитесь к хранению? Каждый раз, когда они меняются на странице или каждый раз после отправки? Можете ли вы добавить еще один код? – jtheman

+0

Привет и приветствую StackOverflow. Вы сформулировали свой вопрос таким образом, который мне очень трудно понять. Попробуйте добавить пример ввода/вывода или примеры, чтобы помочь нам лучше понять вашу проблему/цель. –

+0

Проверьте и попробуйте этот образец. [Щелкните здесь] (http://stackoverflow.com/questions/6437763/remembering-options-in-a-select-box-array-after-submitting-through-php) – 2013-03-06 10:27:54

ответ

0

Это передавать данные с помощью AJAX без перезагрузки страницы:

Используйте для ссылки <a href="#" id="submitlink">Submit data</a>

Затем добавить следующий JQuery скрипт (вам необходимо включить JQuery библиотеку первый)

$('#submitlink').click(function(event) { 
    event.preventDefault(); // Stops default link behaviour on click   
    $.ajax({ 
     url: "yourphp.php", // where to send 
     data: 'sq=' + $('#sq').val() + '&as=' + $('#as').val(), // select values 
     type: "POST", 
     success: function(data){ 
      // If you want to confirm 
      alert('Added'); 
     } 
    }); 
}); 

Затем в вашем хранилище php хранятся данные $ _POST в базе данных или сеансе ...

Пример сеанса хранения:

<?php 
    session_start(); 
    if (!isset($_SESSION['sq']) $_SESSION['sq'] = array(); 
    $_SESSION['sq'][] = $_POST['sq']; 

    if (!isset($_SESSION['as']) $_SESSION['as'] = array(); 
    $_SESSION['as'][] = $_POST['as']; 

    ?> 

Чтобы получить результаты, которые вы могли бы использовать:

<?php 
    session_start(); 
    if (isset($_SESSION['sq']) print_r($_SESSION['sq']); 
    if (isset($_SESSION['as']) print_r($_SESSION['as']); 
?> 

Но это, конечно, можно было бы разработать.

+0

Я не мог следить за частью сессии. Как я могу отправить эти значения в свой контроллер и отобразить его там без сессии? – user2138679

+0

Это использование PHP родных сессий самым простым способом. Вы ничего не сказали нам о контроллерах, которые используете. Это просто базовый скрипт для добавления данных формы в файл cookie сеанса. Я не могу угадать вашу настройку, поэтому, пожалуйста, включите соответствующую информацию о вашей инфраструктуре PHP и опубликуйте как редактирование в исходном вопросе. Тем не менее, я думаю, что мое решение - это то, что вы ищете. – jtheman

1

Вы можете использовать событие изменения для сохранения выбранных значений.

Html

<select name="sq" id="sq" > 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select> 

Javascript

arrSelected = [] 
$("#sq").change(function(){ 
    arrSelected.push($(this).val()); 
}); 
0

Если вы хотите иметь настойчивость в вашем веб-сайте, то я бы рекомендовал смотреть в PHP Cookies.

В вашем случае вы хотите сохранить массив, настойчиво, поэтому у вас есть несколько вариантов.

Либо установите HTML Hidden Element, либо вы можете использовать Serialization для хранения массива внутри файла cookie.

1

С дополнительной информации от комментариев, вот мое предложение:

HTML:

<div class="selectLine"> 
<select name="sq[]" > 
<option value=""></option> 
</select> 

<select name="as[]" > 
<option value=""></option> 
</select></div> 
<a id="addOption"> 

JavaScript:

$('#addOption').click(function(){ 
    $('.selectLine').last().after($('.selectLine').outerHtml()); 
    $('.selectLine').last().prev().hide(); 
}); 

PHP получать почту:

foreach($_POST['sq'] as $key=>$name){ 
    //Make sure you stay consistent with the keys to make sure the 2 values were entered at the same time. 
    echo '<p>'.$name.' is a '.$_POST['as'][$key].'</p>'; 
} 

Добавление [] до конца имени входов будет помещаться в массивы. Но вам нужно больше одного, если вы хотите больше одного значения ...

Вы можете удалить $('.selectLine').last().prev().hide();, чтобы линии отображались пользователю, чтобы он мог изменять значения, если хотите.

+0

Это на самом деле довольно интересно! Я не знал, что атрибуты имени html действуют так. Не могли бы вы создать скрипку, демонстрирующую это? –

+0

Это не то, о чем просит ОП. Каждое поле выбора используется только один раз на странице. – jtheman

+0

@jtheman все еще довольно близко ... Небольшая настройка может быть в порядке, но вопрос не так уж и ясен. – Salketer

Смежные вопросы