Подскажите можно ли сделать добавление полей формы налету средствами PHP ... т.е. как сделано на многих почтовых серверах и на форуме при добавлении вложений.... аля кнопочка "добавить поле". И как ее значение в поседующем обработать?
<офтоп> За называние JS явой многие Java программисты убивают. Причем в особо извращенной форме. </офтоп>
Наковырял ))) Файл отправки формы Код (Text): <script> function dropFile(btn){ if(document.getElementById) { tr = btn; while (tr.tagName != 'TR') tr = tr.parentNode; tr.parentNode.removeChild(tr); checkForLast(); } } function addFile(btn){ if(document.getElementById) { tr = btn; while (tr.tagName != 'TR') tr = tr.parentNode; var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling); thisChilds = newTr.getElementsByTagName('td'); for (var i = 0; i < thisChilds.length; i++){ if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = ''; if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="f1[]" type="text">'; } checkForLast(); } } function checkForLast(){ btns = document.getElementsByName('drop'); for (i = 0; i < btns.length; i++){ btns[i].disabled = (btns.length == 1) ? true : false; } } </script> <body onload="checkForLast();"> <form action="presult.php" method="POST" ENCTYPE="multipart/form-data"> <TABLE cellSpacing=0 cellPadding=4 border="1"> <TD ><INPUT type=text size=22 name="f1[]"><INPUT type=text size=22 name="f2[]"><INPUT type=text size=5 name="f3[]"><INPUT type=text size=5 name="f4[]"></TD> <TD noWrap><INPUT onclick=dropFile(this); type=button value=" - " name=drop><INPUT onclick=addFile(this); type=button value=" + "></TD> </TABLE> <input type="submit" value="отправить"> </form> Файл ее приема и обработки Код (Text): <?php echo "<--переменные POST-->\n\n"; echo "<--".dump_array($HTTP_POST_VARS)."-->\n"; function dump_array($array) { if(is_array($array)) { $size = count($array); $string = ""; if($size) { $count = 0; $string .="{ "; foreach($array as $var => $value) { $string .="$var = $value"; if($count++ <($size-1)) { $string .= ", "; } } $string .=" }"; } return $string; } else { return $array; } } ?> При обработке у меня выводит Как мне добраться до данных находящихся в этом масииве?
Советую создавать формы сразу на странице и средствами CSS скрыть, а с помощью JavaScript показывать их в нужный момент.
вы хотите сразу на странице создать сто полей? не известно сколько полей понадобиться юзеру. И еще интересно если в CSS стоит display:none, поля будут отправляться или нет, надо бы проверить..
А вы наверное собираетесь создать JS, в котором будет описываться сто полей? Все работает, по крайне мере у меня: HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> input.hidden { display:none; } </style> <script type="text/javascript"> function show_hidden_input() { document.getElementById("hidden_input").style.display = "block"; } </script> <title>FORM HIDDEN-></title> </head> <body> <h3>Ответ сервера: " <?php if(isset($_POST["text"])) { echo($_POST["text"]); } ?> " </h3> <form action="/index.php" method="post"> <p><input class="hidden" id="hidden_input" name="text" type="text"></p> <p><input type="button" value="Показать поле ввода" onclick="show_hidden_input();"></p> <p><input type="submit"></p> </form> </body> </html>
вы просто показываете поле, а надо что бы динамически поля появлялись при нажатии на кнопку. что то вроде [js] <script> var $id=2; function add_pole(){ var $main_div = document.getElementById("input-div"); var $HTML = '<input type="text" name="text_'+$id+'" value=""><span style="cursorointer; text-decoration:underline" onClick="remove('+$id+')">remove this</span>'; var $new_div = document.createElement("div"); $new_div.innerHTML = $HTML; $new_div.setAttribute("id", "div-"+$id); $main_div.appendChild($new_div); $id++; } function remove($div_id){ document.getElementById("input-div").removeChild(document.getElementById("div-"+$div_id)); } </script> [/js] HTML: <button onClick="add_pole()">add field</button> <div id="input-div"> <input type="text" id="text_1"> </div>