Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2010, 23:28   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию регистрация

Код:
<table>
	<form method=post>
	<tr><td>Имя</td><td><input type=text name=name></td></tr>
	<tr><td>Пароль</td><td><input type=password name=pass></td></tr>
	<tr><td>Повторите пароль</td><td><input type=password name=pass_again></td></tr>
	<tr><td>e-mail</td><td><input type=text name=mail></td></tr>
	<tr><td>URL</td><td><input type=text name=url></td></tr>
	<tr><td></td><td><input type=submit value='Зарегестрировать'></td></tr>
	</form>
</table>
<?php
	//Обработчик HTML-формы
	
	/////////////////////////////////////////////////////////
	// 1. Блок проверки правильности ввода данных
	///////////////////////////////////////////////////////////
	//Удаляем лишние пробелы
	$_POST['name'] = trim($_POST['name']);
	$_POST['pass'] = trim($_POST['pass']);
	$_POST['pass_again'] = trim($_POST['pass_again']);
	//Проверяем, не пустой ли суперглобальный массив $_POST
	if(empty($POST['name']))
		exit('Поле ИМЯ не заполнено');
	if(empty($POST['pass']))
		exit('Поле Пароль не заполнено');
	if(empty($POST['pass_again']))
		exit('Поле ПОВТОРИТЕ ПАРОЛЬ не заполнено');
	if ($_PASS['pass'] != $_PASS['pass_again'])
		exit('Пароли не совпадают');
	//Если введён e-mail, проверяем его на корректность
	if(!empty($_POST['e-mail']))
	{
			if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$i",$_POST['email']))
			{
				exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru');
			}
	}
	
	//////////////////////////////////////////////////////
	// 2. Блок проверки на уникальность
	/////////////////////////////////////////////////////
	//Имя файла даннных
	$filename = "text.txt";
	//Проверяем, не было ли переданное имя зарегестрировано ранее
	$arr = file($filename);
	foreach ($arr as $line)
	{
		//Разбиваем строку по разделителю ::
		$data = explode("::", $line);
		//В массив $temp помещаем имена уже зарегестрированных посетителей
		$temp[] = $data[0];
	}
	//Проверяем, не содержится ли текущее имя в массиве имён $temp
	if(in_array($_POST['name'],$temp))
		exit("Данное имя уже зарегестрировано, выберите другое");
		
	//////////////////////////////////////////////////
	//  3. Блок регистрации пользователя
	////////////////////////////////////////////////
	
	//Помещаем данные в текстовый файл
	$fd = fopen($filename, "a");
	if (!$fd)
		exit ("Ошибка при открытии файла данных");
	$str = $_POST['name']."::".
			$_POST['pass']."::".
			$_POST['email']."::".
			$_POST['url']."\r\n";
	fwrite($fd, $str);
	fclose($fd);
	//Осуществляем перезагрузку страницы
	//чтобы сбросить POST-данные
	echo "<html><head><META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'></head></html>"
Итог работы: не создаётся файл и вот в этом месте происходит постоянно остановка exit('Поле ИМЯ не заполнено');
и ещё 1 вопрос. как сделать, чтобы до нажатия кнопки "Зарегестрировать" не выводились сообщения и том что 
Notice: Undefined index: name in C:\wamp\www\registration.php on line 18

Notice: Undefined index: pass in C:\wamp\www\registration.php on line 19

Notice: Undefined index: pass_again in C:\wamp\www\registration.php on line 20
18, 19 и 20 линии - это 
Код:
$_POST['name'] = trim($_POST['name']);
	$_POST['pass'] = trim($_POST['pass']);
	$_POST['pass_again'] = trim($_POST['pass_again']);
?>
Dimarik вне форума Ответить с цитированием
Старый 17.07.2010, 23:51   #2
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Ошибки связаны с тем, что отсутствуют элементы массива. Т.Е. они небыли переданы скрипту POST запросом.

В HTML, кстати, принято записывать атрибут-значение следующим образом: <тег атрибут="значение">. Но это так, к слову.
No name. Just Linel.
Linel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистрация Syltan Свободное общение 2 06.09.2009 15:41
Регистрация limon PHP 1 17.10.2008 10:33
Регистрация БД Gladiator БД в Delphi 1 05.06.2008 00:09