Делаю форму подписки...

Статус
Закрыто для дальнейших ответов.

LinkAndrey

Member
Регистрация
28.03.2011
Сообщения
10
Всем доброго времени суток.
Поставил перед собой задачу создать форму подписки сохраняющую адреса в определённы файл. Но без всяких красивостей а просто правильно работающую и надёжную (чтобы нельзя было взломать и украсть файл в который заносятся адреса).
Вот что пока получилось
1) сама форма.
Код:
<form action="newsprov.php" name="newsletterForm" id="newsletterForm">
 <input type="text" name="email" id="email" class="newsletterInput" value="Введите Ваш Email" onfocus="if (this.value=='Введите Ваш Email') this.value='';" onblur="if (this.value=='') this.value='Введите Ваш Email';" /><br />
 <input type="submit" name="Submit" value="Подписаться" class="newsletterButton" /></form>
2) файл проверки newsprov.php и записи Email в файл mail.txt
Код:
$newsletterFN = "mail.txt";
/*2 функции очистки поля от лишних символов и проверки его на правильность введения email*/
function GetField($input) {
    $input=strip_tags($input);
    $input=str_replace("<","<",$input);
    $input=str_replace(">",">",$input);
    $input=str_replace("#","%23",$input);
    $input=str_replace("'","`",$input);
    $input=str_replace(";","%3B",$input);
    $input=str_replace("script","",$input);
    $input=str_replace("%3c","",$input);
    $input=str_replace("%3e","",$input);
    $input=trim($input);
    return $input;
} 

function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)  {$isValid = false;}
   else {$domain = substr($email, $atIndex+1);
         $local = substr($email, 0, $atIndex);
         $localLen = strlen($local);
         $domainLen = strlen($domain);
        if ($localLen < 1 || $localLen > 64)    {$isValid = false;}   
        else if ($domainLen < 1 || $domainLen > 255)  {$isValid = false;}  
        else if ($local[0] == '.' || $local[$localLen-1] == '.')  {$isValid = false;}  
        else if (preg_match('/\\.\\./', $local))  {$isValid = false;}  
        else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))   {$isValid = false;}   
        else if (preg_match('/\\.\\./', $domain))   {$isValid = false;} 
        else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',str_replace("\\\\","",$local)))  
              {if (!preg_match('/^"(\\\\"|[^"])+"$/',str_replace("\\\\","",$local)))   {$isValid = false;} }
        }
   return $isValid;
}

$email 	= GetField($_GET['email']);
$pass 	= validEmail($email);

/* проверка на все соответствия и запись в файл или вывод ошибки */
if ($pass) {
	$f = fopen($newsletterFN, 'a+');
	$read = fread($f,filesize($newsletterFN));
	if (strstr($read,"@")) {$delimiter = ";";}
	if (strstr($read,$email)) {echo 3;} 
	else {fwrite($f, $delimiter . $email);	echo 1;}
	fclose($f);
} 
else {echo 2;}
3) А вот дальше я в стопоре так как почти не знаю Java
приведённый ниже файл использовал jquery и ajax с всплывающими картинками в зависимости от номера получаемого из файла проверки
я его почистил и добавил задачу вывода сообщений через alert заместо всплывающих картинок с текстом и вот что у меня вышло.
Код:
<script type="text/javascript">
$(document).ready(function(){

    $('form#newsletterForm').bind('submit', function(e){
	var email  = $('input#email').val();
        e.preventDefault();
		
		$.ajax({type: 'POST', url: 'newsprov.php?email='+email, data: '',	success: function(theResponse){
				if (theResponse == 1) {alert("Ваш e-mail добавлен в список.");}
				if (theResponse == 2) {alert("Вы не корректно ввели Email."); return false;}
				if (theResponse == 3) {alert("E-mail уже добавлен в список."); return false;}
			},
			error: function(){alert("Произошла ошибка. Пожалуйста, попробуйте еще раз."); return false;}		
		});
	});
});
</script>
На данный момент основная загвостка в том что код 3 пункта не работает и при добавлении email или ошибки открывается страница с номером ошибки 1, 2 или 3.
Подскажите что надо подправить в коде 3 пункта чтобы выскакивало окошко по методу alert с соответствующим текстом.
или как можно ещё сообщить человеку об ошибке или удачном добавлении email без перезагрузки окна или открытии нового.


4)Вопрос к взломщикам... Надёжен ли код проверки? основная его задача чтобы злоумышленник не смог в итоге достать файл mail.txt с адресами подписчиков.
А если не надёжен, то где у него бреши?
Всем спасибо!
 
Статус
Закрыто для дальнейших ответов.
Верх Низ