Суть задачи заключается вот в этой теме. Сразу оговорюсь что денег я за это не получу, так как решил просто помоч, да и самому показалась задачка интересная. Вот полный листинг кода: HTML <?php error_reporting (0); session_start(); ?> <html> <head> <script language="JavaScript" type="text/javascript"> // TextArea MaxLength var ns6=document.getElementById&&!document.all function restrictinput(maxlength,e,placeholder){ if (window.event&&event.srcElement.value.length>=maxlength) return false else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){ var pressedkey=/[a-zA-Z0-9\.\,\/]/ if (pressedkey.test(String.fromCharCode(e.which))) e.stopPropagation() } } function countlimit(maxlength,e,placeholder){ var theform=eval(placeholder) var lengthleft=maxlength-theform.value.length var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder) if (window.event||e.target&&e.target==eval(placeholder)){ if (lengthleft<0) theform.value=theform.value.substring(0,maxlength) placeholderobj.innerHTML=lengthleft } } function displaylimit(theform,thelimit){ var limit_text='<em>Разрешается ввести не более <span id="'+theform.toString()+'" style="color: #888;">'+thelimit+'</span> символов в форму</em>' if (document.all||ns6) document.write(limit_text) if (document.all){ eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)} eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)} } else if (ns6){ document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); } } </script> <script> var c=2; //счётчик количества строк function addline() { c++; // увеличиваем счётчик строк s=document.getElementById('table').innerHTML; // получаем HTML-код таблицы s=s.replace(/[\r\n]/g,''); // вырезаем все символы перевода строк re=/(.*)(<p id=.*>)(<\/p>)/gi; // это регулярное выражение позволяет выделить последнюю строку таблицы s1=s.replace(re,'$2'); // получаем HTML-код последней строки таблицы s2=s1.replace(/\[\d+\]/gi,'['+c+']'); // заменяем все цифры к квадратных скобках // на номер новой строки s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')'); // заменяем аргумент функции rmline на номер новой строки s=s.replace(re,'$1$2'+s2+'$3'); // создаём HTML-код с добавленным кодом новой строки document.getElementById('table').innerHTML=s; // возвращаем результат на место исходной таблицы return false; // чтобы не происходил переход по ссылке } function rmline(q) { if (c==2) return false; else c--; // если раскомментировать предыдущую строчку, то последний (единственный) // элемент удалить будет нельзя. s=document.getElementById('table').innerHTML; s=s.replace(/[\r\n]/g,''); re=new RegExp('<p id="?newline"? nomer="?\\['+q+'.*?<\\/p>','gi'); // это регулярное выражение позволяет выделить строку таблицы с заданным номером s=s.replace(re,''); // заменяем её на пустое место document.getElementById('table').innerHTML=s; return false; } </script> </head> <body> <form method="Post" action="sendmail.php" name="limit"> <table class="table_content"> <tr> <td class="td_border">Ваше имя<font color="#FF0000">*</font>:</td> <td class="td_border"><input type="Text" name="name1"/></td> </tr> <tr> <td class="td_border">Ваш E-Mail<font color="#FF0000">*</font>:</td> <td class="td_border"><input type="Text" name="email1"/></td> </tr> <tr> <td class="td_border">Тема сообщения<font color="#FF0000">*</font>:</td> <td class="td_border"><input type="Text" name="theme"/></td> </tr> <tr> <td class="td_border">Сообщение:</td> <td class="td_border"> <textarea cols=40 rows=5 name="message"> Привет друг %Такой-то% Это твой друг %Такой-то%, хочу сообщить тебе об интересном сайте таком-то... Вот %ссылка% на этот сайт Если будут вопросы - спрашивай на форуме Удачи мой друг %Такой-то% </textarea> <div align="center"><script>displaylimit("document.limit.message",1000)</script></div></td> </tr> <tr> <td class="td_border" colspan="2" align="center"> <h3>Введите текст с картинки:</h3> <p><img src="captcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></p> <p><input type="text" name="keystring"></p> </td> </tr> </table> <div id="table"> <p id="newline" nomer="[0]"> Имя<font color="#FF0000">*</font> <input type="text" name="name[0]"> E-mail<font color="#FF0000">*</font> <input type="text" name="email[0]"> <a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a> </p> <p id="newline" nomer="[1]"> Имя<font color="#FF0000">*</font> <input type="text" name="name[1]"> E-mail<font color="#FF0000">*</font> <input type="text" name="email[1]"> <a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a> </p> <p id="newline" nomer="[2]"> Имя<font color="#FF0000">*</font> <input type="text" name="name[2]"> E-mail<font color="#FF0000">*</font> <input type="text" name="email[2]"> <a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a> </p> </div> <p><a href="#" onclick="return addline();"><img src="plus.gif" border="0"></a></p> <input type="image" src="submit.gif" /> </form> </body> </html> PHP <? session_start(); $date = date("d/m/Y"); $name1 = $_POST['name1']; $theme = $_POST['theme']; $email1 = $_POST['email1']; $message = $_POST['message']; $name = $_POST['name']; $email = $_POST['email']; $arr2 = array($email[1]); $arr = array($name[1]); if(count($_POST)>0) { if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']) { if (empty($_POST['name1']) or strlen($name1) < 5) echo '<p>Вы не указали фамилию и имя!</p>'; if (empty($_POST['theme']) or strlen($theme) < 5) echo '<p>Вы не указали тему сообщения.</p>'; if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email1'])) echo '<p>Email не был указан, или указан некорректный email!</p> <a href="java script:history.back(1)">Вернуться назад</a>'; else { foreach ($arr as $key => $value) { $text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>'. $from . '</title> <style media="screen" type="text/css"> table { padding:5px; margin:5px; border:#E2E2E2 solid 2px; width:600px; text-align: center; } td { border:#E2E2E2 solid 1px; width:100px; padding:5px; margin:5px; text-align: center; color:#3E73C8; } body { margin: 0; padding: 6px; border: 0; background: #fff; text-align: center; } </style> </head> <body> <table> <tr> <td>Имя отправителя:</td> <td>'.$name1.'</td> </tr> <tr> <td>Email отправителя:</td> <td>'.$email1.'</td> </tr> <tr> <td>Тема сообщения:</td> <td>'.$theme.'</td> </tr> <tr> <td>Текст сообщения:</td> <td> Привет друг <strong>' . $value . '</strong> Это твой друг <strong>'.$name1.'</strong>, хочу сообщить тебе об интересном сайте таком-то... Вот %ссылка% на этот сайт Если будут вопросы - спрашивай на форуме Удачи мой друг <strong>' . $value . '</strong></td> </tr> <tr> <td>Дата отправки сообщения:</td> <td><div style="line-height: 30px;"> (' . $date . ')</div></td> </tr> </table> </body> </html>'; } foreach ($arr2 as $key => $value) { $toMail = $value; } $subject = "Тема сообщения: $theme"; $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=windows-1251 \r\n"; $headers .= "From: $email1\r\n"; mail ($toMail, $subject, $text, $headers); echo '<p>Сообщение успешно отправлено.</p> <a href="java script:history.back(1)">Вернуться назад</a>'; } echo '<p>Код введен правильно!</p>'; } else { echo '<p>Ошибка - не введен код подтверждения!<br /> Либо введен неверно!</p> <p><a href="java script:history.back(1)">Вернуться назад</a></p>'; } } unset($_SESSION['captcha_keystring']); ?> А вот как выглядет заготовка в реале