2017-02-21 13 views
0

Вчера я столкнулся с конкретной и интересной проблемой. Предположим, мы имеем следующий HTML-код блока:Html Несколько элементов ввода с тем же именем

<div id="addresses"> 
<input type="text" name="address" id="addr1" /> 
<input type="text" name="address" id="addr2" /> 
<input type="text" name="address" id="addr3" /> 
</div> 

Хотя размещение этой формы, элементы ввода, которые имеют такое же имя, соединяются и значения разделяются запятыми характер. Например, если мы имеем значение, такие как:

addr1 = 'TEST TEST XXX' 
addr2 = 'YYY ZZZ 11111' 
addr3 = 'ZZZ KKK TEST ' 

представлены формы сообщения данных следующим образом:

address = 'TEST TEST XXX', 'YYY ZZZ 11111', 'ZZZ KKK TEST ' 

, то я могу получить каждый из этих значений в качестве элементов массива на стороне сервера (3 различные элементы массива). Но если значения, как:

addr1 = 'TEST, TEST XXX' 
addr2 = 'YYY ZZZ, 11111' 
addr3 = 'ZZZ KKK, TEST ' 

затем представлены данные формы становится:

address = 'TEST, TEST XXX', 'YYY ZZZ, 11111', 'ZZZ KKK, TEST ' 

то результирующий массив содержит 6 элементов, которые совершенно неправильно. Я считаю, что символ COMMA, который содержится в значении, не экранирован.

Любые идеи по этому вопросу. Спасибо заранее ...

ответ

0

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

<div id="addresses"> 
<input type="text" name="addr1" id="addr1" /> 
<input type="text" name="addr2" id="addr2" /> 
<input type="text" name="addr3" id="addr3" /> 
</div> 

На стороне PHP:

<?php 
$address = array($_REQUEST['addr1'], $_REQUEST['addr2'], $_REQUEST['addr3']); 
?> 
+0

Я не использую PHP на стороне сервера. Я использую Java - Spring MVC. То, что я прошу, - это универсальный способ решения общих/серверных технологий. Возможно, изменение символа разделителя (запятая) или, возможно, экранирование символа разделителя. – Ahmet

+0

Тогда измените разделитель, если это возможно в вашей ситуации. – Cagy79

1

Вы не используете массив.

Изменить каждый вход так:

<input type="text" name="address[]" id="addr1" /> 

и когда вы будете получать данные, которые вы будете иметь массив без какого-либо вопроса о запятой или других.

$_POST['adddess']=array(0=>'TEST, TEST XXX',1=>'YYY ZZZ, 11111',2=>'ZZZ KKK, TEST '); 

и вы можете получить доступ к каждому пункту на основе индекса

+0

Я не использую PHP на стороне сервера. Я использую Java - Spring MVC. То, что я прошу, - это универсальный способ решения общих/серверных технологий. Возможно, изменение символа разделителя (запятая) или, возможно, экранирование символа разделителя. – Ahmet

+0

Вы не размещали язык, который используете в своем вопросе. Отредактировал его.В любом случае, я думаю, что вы сможете включить вторую часть ответа в JAVA-способе получения опубликованных значений. –

0

Используйте этот HTML

<div id="addresses"> 
    <form:input path="address[0]" /> 
    <form:input path="address[1]" /> 
    <form:input path="address[2]" /> 
</div> 

и Spring должны заполнить свои входные тексты со значениями объекта String[] address на стороне сервера и тиски -versa.

Вы можете посмотреть здесь: http://bitbybitblog.com/forms-and-data-models-in-spring-mvc/

+0

В результате я изменил имена ввода на уникальные значения, добавив значение индекса к каждому имени ввода (то есть address_1, address_2). – Ahmet