Пожалуйста прокоментируйте готовый код системы регистрации.Напишите, что лишнее, а что нужно добавить. Вот код: PHP: <?php //Удаляем пробелы,слеши,символы// $nik = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['nik'])))); $name = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['name'])))); $password = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['passw'])))); //Проверяем форму если одна из трёх пуста, записываем в массив// if (empty($regform)){ if (empty($nik)){ $u_mass[] = "Ник"; } if (empty($name)){ $u_mass[] = "Имя пользователя"; } if (empty($password)){ $u_mass[] = "Пароль"; }} if (empty($u_mass)){ $m_status = 1; } else { $m_status = 0; } //Проверяем существует ли массив если нет, то// if ($m_status == 0){ echo ("Пожалуйста заполните форму: "); for ($i=0;$i<count($u_mass);$i++){ echo ("$u_mass[$i] "); }} //Соединяемся с базой данных и проверяем данные// else { echo ("Все поля формы заполнены.<br>"); $connect = mysql_connect ("localhost","root"); $data = mysql_select_db ("portal"); $string = mysql_query("select*from client"); $num = mysql_num_rows($string); $t_nik = mysql_query("select*from client where nik ='$nik'"); $r_nik = mysql_fetch_array($t_nik); if (!$r_nik > 0){ $num = $num+1; $contact = ("$nik@portal.ru"); $rec = "insert into client (c_no,nik,name,email,passw) values ('".$num."','".$nik."','".$name."','".$contact."','".$password."')"; $result = mysql_query($rec); if ($result) { echo ("Успешно добавлен");}} else { echo ("Пользователь с таким ником уже существует.<br><a href = inst.php>Правила регистрации.</a>");} mysql_close();} ?>
Код подсвечивайте, пожалуйста. Нечего заморачиваться с этим PHP: <?php $password = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['passw'])))); ?> и хранить пароль в открытом виде. Лучше, ИМХО, хранить md5 хэш с солью. Форматирование кода не очень. Я обычно пишу в ООП стиле, но даже если Вам по душе процедурный, по моему, лучше все же вынести конект к БДв отдельный файл и инклюдить его. Вынести в отдельную функцию проверку формы, в отдельную добавление пользователя, а в самом файле на который ссылается скрипт только выводить данные. не совсем понимаю, чего вы хотите добиться данным действием: PHP: <?php $nik = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['nik'])))); ?> Зачем тут stripslashes поясните пожалуйста. И вообще данные лучше хранить в чистом виде, просто пропустите через mysql_escape_string();, а уже на выходе запускайте htmlspecialchars что бы не XSS-ли. Или же вообще жестко задайте допустимый набор символов для имени/ника. ....$name = trim(strtolower(.... А если у меня имя начинается с Большой буквы, что мне делать? Ну и т.д. P.S. еще раз повторюсь, что код нечитабелен.
PHP: <? $nik=(isset($_GET['nik'])?trim(strtolower(htmlspecialchars(stripcslashes($_GET['nik'])))):null); Использование собачек - дурной тон
Просто мне хотелось избежать так называемой путаницы.чтобы небыло одинаковых по смыслу но разных по регистру ников.
Все плохо, очень плохо. Начнем с базы: Так Вы выясняете, сколько у вас пользователей зарегистрировано. А теперь представьте, что их 10 000? Все выбираются и аж следующей командой считаются. То есть, выборка происходит зря. Читайте про функции http://www.mysql.ru/docs/man/SELECT.html Строки 1-11: зачем сначала обрабатывать строку, а потом проверять "пуста ли она?" ? Смысл этой строки с трудом понятен. Функция mysql_fetch_array возвращает либо массив, либо False в случае, если выборка из базы пустая. Существующий массив - это true. Получается, что Ваше условие проверяет: if (!true > 0) или (!false > 0) - что это значит, мне не понятно. Для вставки нового пользователя с уникальным id вовсе не обязательно знать кол-во существующих юзеров. Ищите по теме Auto_increment в мануале, ссылку на который я дал. Кстати, код очень похож на тестовый.
дайте ему какой-нить класс для работы с БД, да хай упражняется. Хоть из готовых решений, http://php.ru/forum/viewtopic.php?t=12857