동적 필드 설정에 대한 질문 (Javascript Function to add/remove fields 참조)을 통해 JavaScript에서 사용자가 추가 및 삭제할 수있는 양식을 제공하는 좋은 해결책이라고 생각했던 것을 생각해 냈습니다. 필드 그룹을 제거하십시오. 여기에 자바 스크립트 함수는 다음과 같습니다JavaScript 함수에서 PHP의 필드 이름 재정의
var fieldcount = 2;
var count = 2;
window.createinput = function (field1, field2, field3, area, limit) {
if (count > limit) return;
field_area = document.getElementById(area);
var qty = document.createTextNode("Quantity");
var msr = document.createTextNode(" Measure");
var ing = document.createTextNode(" Ingredient Name");
var li = document.createElement("li");
var input = document.createElement("input");
input.id = field1 + fieldcount;
input.name = field1 + fieldcount;
input.size = "10";
input.type = "text"; //Type of field - can be any valid input type like text,file,checkbox etc.
li.appendChild(qty);
li.appendChild(input);
var input2 = document.createElement("input");
input2.id = field2 + fieldcount;
input2.name = field2 + fieldcount;
input2.size = "20";
input2.type = "text"; //Type of field - can be any valid input type like text,file,checkbox etc.
li.appendChild(msr);
li.appendChild(input2);
var input3 = document.createElement("input");
input3.id = field3 + fieldcount;
input3.name = field3 + fieldcount;
input3.size = "30";
input3.type = "text"; //Type of field - can be any valid input type like text,file,checkbox etc.
li.appendChild(ing);
li.appendChild(input3);
field_area.appendChild(li);
//create the removal link
var removalLink = document.createElement('a');
removalLink.className = "remove";
removalLink.onclick = function() {
this.parentNode.parentNode.removeChild(this.parentNode);
count = count - 1;
}
var removalText = document.createTextNode('Remove Field Group');
removalLink.appendChild(removalText);
li.appendChild(removalLink);
fieldcount++ //loop in php to handle renaming variables for database entry based on total number of field groups
count++
}
이 기능이 될 것이다 참조하는 HTML 코드 :
<ul id="ingredients">
<li>Quantity<input type="text" name="ingredient_quantity_1" id="ingredient_quantity_1" size="10" /> Measure<input type="text" name="ingredient_measure_1" id="ingredient_measure_1" size="20" /> Ingredient Name<input type="text" name="ingredient_name_1" id="ingredient_name_1" size="30" /></li>
</ul>
<input type="button" value="Add Ingredient" onclick="createinput('ingredient_quantity_','ingredient_measure_','ingredient_name_','ingredients', 5)" />
또한 http://jsfiddle.net/wtX7Y/82/
문제에서 볼 수 있습니다입니다 내가 얻고 싶은 경우 이러한 폼 값은 PHP에서 필드 이름은 함수 호출에 정의 된 제한에 도달 할 수 있지만 값은 필드에 필드를 제거 할 수 있기 때문에 시퀀스에 갭 (예 : 성분 __name_1, 성분 __name, 성분 _4)이있을 수 있습니다. 일 removeLink.onclick 함수.
데이터베이스에 보내거나 JavaScript 기능을 다시 작성하여 필요를 없애고 PHP의 정상적인 순서로 POST 할 수 있도록 일부 필드 형식 값에서이 필드 이름 값을 검색/재정의 할 수있는 메커니즘을 작성해야합니다. 간단한 반복 루프를 사용하여 값을 검색하십시오. 나는이 특정 질문을 어디에서든지 내 검색에서 발견하지 못했다. 그러나 나는 사람들이 가변 변수의 이름을 처리 할 수있는 배열을 제안하고 이것이 적절한 접근법인지 궁금해하고있다.
내 기존 코드 - 다음과 같이 PHP for 루프를 사용하여 문제점을 해결하려고 시도했지만 루프 내에서 두 개의 개별 카운트를 처리하는 방법을 알 수 없습니다 (하나는 새로운 필드 이름 값을 검색하기위한 변수 이름 및 하나) 재정의 할 :
$field_count = 1;
for($i = 1; $i <= 25; $i++)
{
if(isset($_REQUEST['ingredient_quantity_' . $field_count]))
{
${'ingredient_quantity_' . $i} = $_REQUEST['ingredient_quantity_' . $field_count];
${'ingredient_measure_' . $i} = $_REQUEST['ingredient_measure_' . $field_count];
${'ingredient_name_' . $i} = $_REQUEST['ingredient_name_' . $field_count];
echo $i . ". Field Count:" . $field_count . " - " . ${'ingredient_quantity_' . $i} . " " . ${'ingredient_measure_' . $i} . " " . ${'ingredient_name_' . $i} . "<br />";
}
$field_count++;
}
결론 난 그냥 특정 필드 이름 접두사로 설정 필드의 수를 계산하는 방법이 필요하다 (예를 들어, 'ingredient_quantity_ ')와 그들의 특정 번호, 그래서 나는 데이터를 삽입하는 데이터베이스 쿼리를 실행할 수 있습니다. 입력란에서 배열을 만듭니 까? 다른 것?
감사합니다. 나는 이것을 시도 할 것이다. 필자는 배열 작성에 익숙하지 않지만 필드 이름 값을 찾기 위해 복잡한 메커니즘을 만들고 값을 재 할당하려고 시도하는 것이 아니라 문제에 접근하는 것이 가장 좋은 방법이라고 생각했습니다. 세 가지 필드 ('ingredients_quantity_', 'ingredient_measure_', 'ingredient_name_')에 모두 해당 데이터가 있다고 가정하면 양식의 유효성을 검사해야합니다. 그래서 그것은 좋은 해결책입니다. 그러나 위의 코드에서 값 16을 이해할 수 있는지 확실하지 않습니다. –
필드 이름의 처음 16자를 "성분 __name"(길이가 16 자임)과 비교하도록 'strncmp'에게 말하고 있기 때문에 처음 16 명이 있습니다. 처음 16 문자가 일치하면 함수는 0을 반환합니다. 문자열이 다른 문자열로 시작하는지 확인하는 것은 깔끔한 방법입니다. 나머지 두 16은'substr'에게 "ingredients_name_"다음에 나오는 숫자를 추출하도록 지시합니다 (처음 16자를 무시 함). 문자열을 자르는 것은 PHP의 빵과 버터입니다! – kijin
설명해 주셔서 감사합니다. –