2016-01-06 4 views
1

У меня есть PHP страница с 2 кнопки отправки и кнопки 2 радио:

<?php 
$choiceIdx = 1; 
$language = 'English'; 

if($_GET) 
{ 
    if(isset($_GET['choice'])) 
    { 
     $choiceIdx = $_GET['choice']; 
    } 
    if(isset($_GET['language'])) 
    { 
     $language = $_GET['language']; 
    } 
} 
?> 

<form method="get"> 
    <button type='submit' name='choice' value='1'>Choice1</button> 
    <button type='submit' name='choice' value='2'>Choice2</button> 

    <input id="English" type="radio" name="language" value="English" <?php echo ($language=='English')?'checked':'' ?> onchange="this.form.submit();" /> 
    <label for="English">English</label> 

    <input id="Slovenian" type="radio" name="language" value="Slovenian" <?php echo ($language=='Slovenian')?'checked':'' ?> onchange="this.form.submit();" /> 
    <label for="Slovenian">Slovenian</label> 
</form> 

Если я нажимаю на кнопку словенского радио, я получаю:

http://localhost/index.php?language=Slovenian 

Если я после этого нажмите на кнопку Choice2 представить, «язык» сохраняется, и я получаю:

http://localhost/index.php?choice=2&language=Slovenian 

Если я после этого нажмите на английском радио-кнопки, «выбор» не сохраняется, и я получаю:

http://localhost/index.php?language=English 

Это моя первая страница PHP и после нескольких часов прибегая к помощи я добавил эту строку:

<input type="hidden" name="choice" value="<?php echo $choiceIdx; ?>"> 

этом «выбор» теперь сохранен, но я получаю:

http://localhost/index.php?choice=1&language=Slovenian&choice=2 

Я надеваю Я не хочу его дважды в url. Пожалуйста, объясните, что я делаю неправильно. Спасибо!

EDIT: Я хочу использовать GET (а не POST), потому что URL-адрес должен быть сохранен как закладка.

+0

Просто используйте POST вместо GET. То есть он не может быть в URL дважды, если его не в URL-адрес один раз. – developerwjk

+0

Хорошо, никогда, POST не исправит это. Вам нужно найти новый способ сохранить выбор, потому что любая кнопка, которую вы нажмете для отправки, представит значение этой кнопки (вы назвали выбор кнопок), и ваш скрытый выбор ввода всегда будет отправлен ... так что да, вы получите два параметра выбора. – developerwjk

+0

Возможно, выберите вариант выбора, а не две кнопки. – developerwjk

ответ

1

Вот альтернативный вариант (как продолжение к моему первому ответу), который обновляет скрытое значение при нажатии на выбор кнопки:

<script> 
function setChoice(val) { 
    document.getElementById('hiddenChoice').value=val; 
} 
</script> 

<form method="get"> 
    <button type='submit' onClick="setChoice(1);">Choice1</button> 
    <button type='submit' onClick="setChoice(2);">Choice2</button> 
    <input type='hidden' id='hiddenChoice' name='choice' value='<?php echo $choiceIdx; ?>'> 
    <input id="English" type="radio" name="language" value="English" <?php echo ($language=='English')?'checked':'' ?> onchange="this.form.submit();" /> 
    <label for="English">English</label> 

    <input id="Slovenian" type="radio" name="language" value="Slovenian" <?php echo ($language=='Slovenian')?'checked':'' ?> onchange="this.form.submit();" /> 
    <label for="Slovenian">Slovenian</label> 
</form> 

Если у вас есть несколько значений для извлечения вы можете создать более сложную и менее конкретную js-функцию. Вы можете легко передать идентификатор целевого ввода f.e.

Также вы должны переосмыслить, если это действительно необходимо, чтобы всегда отправить форму, или если было бы лучше сначала собрать все данные и только отправить одну форму обратно на сервер.

+0

Спасибо! Я всегда должен представить форму - я создаю древовидную структуру, где вы начинаете в корне дерева, и выбираете выбор и отправляете его для удаления текущих узлов/вариантов и отображения дочерних узлов/вариантов выбранного родительского узла/выбор. – JinJi

0

Добавьте к вашей форме:

<input type='hidden' name='choiceStored' value='<?php echo $choiceIdx; ?>'> 

Это сохранит последний принятый Вэл для выбора и повторно отправить его в следующей форме представить.

и изменить свой РНР:

$choiceIdx = 1; 
$language = 'English'; 

if($_GET) 
{ 
    // eighter get new value 
    if(isset($_GET['choice'])) 
    { 
     $choiceIdx = $_GET['choice']; 

     // or if we don't have a new value, take the 'stored' one: 
    } elseif (isset($_GET['choiceStored'])) 
    { 
     $choiceIdx = $_GET['choiceStored']; 
    } 

    if(isset($_GET['language'])) 
    { 
     $language = $_GET['language']; 
    } 
} 
+0

Если вы внимательно прочитаете мой вопрос, вы увидите, что это именно то, что я добавил после многих часов работы в Интернете, но это создает плохой URL. – JinJi

+0

взлеты, извините, я это перепробовал. Я отредактирую свой ответ! – Jeff

+0

теперь я получаю: index.php? ChoiceStored = 1 & language = Slovenian & choice = 2 - причина, по которой я не хочу, это то, что я хочу, чтобы URL-адрес закладки был недвусмысленно работать – JinJi

0

Вы передаете то же имя дважды. «Выбор» был определен как имя скрытого значения, так и имя кнопки. Чтобы иметь возможность различать, вы должны изменить имя скрытого значения на что-то вроде «savedchoice». И ссылаться на него под этим именем

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