[help]С моей регисраций)

Статус
В этой теме нельзя размещать новые ответы.
Нет. Логика запроса немного неверна.
Во первых (из твоего запроса к мускулю:(
PHP:
`uniqueName`=`".$uniqueName."`"
верно так:
PHP:
`uniqueName`='".$uniqueName."'"
` - вот этот знак - это "выделение" - заключение в обратную кавычку названия полей из таблицы - нужно для того, чтобы можно было "использовать" зарезервированные слова майскьюэль в названии полей таблицы
пример
PHP:
`mytable`.`text`
Поле `text` совпадает по названию с типом данных text, но интерпритатор его будет воспринимать верно, как поле с названием `text`
' - единичная кавычка используется для явного приведения типов данных
И в твоем случае
PHP:
`uniqueName`='".$uniqueName."'"
Явно приводится к типу varchar или к тому - которым задано у тебя поле.
Ладно - далее по поводу запросов:
PHP:
$result = mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");
    while($row == mysql_fetch_array($result,MYSQL_ASSOC)){
        if($uniqueName == $row['uniqueName']){$error.='Ивени но этото пользователь уже занит!<br>';}
Вот это давай сделаем так:
PHP:
function isUniqueName($name){
 $reslut = false;
 $r = mysql_query('SELECT COUNT(*) AS `ammount` FROM `user` WHERE `uniqueName`=\''.$name.'\'');
 if($r && mysql_numrows($r)>0) {
   $a = mysql_fetch_row($r); //имхо немного быстрее будет
   $result = (!empty($a[0])?true:false);
 }
   return $result;
}
................................
//дальше так
//код функции escapedString был уже приведен мною здесь
if(isset($uniqueName)&&!empty($uniqueName)) {
$uniqueName = escapedString($uniqueName);
$uniqueName = isUniqueName($uniqueName);
};
if(!isset($uniqueName)||empty($uniqueName)||!$uniqueName||!ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}")){
$error.='Поле Логин не было заполнено. Либо не соответствует заданному формату (латиница или цифры. от трех до 16 символов.) Или же такой логин уже встречается. <br>';
}
Итак пару слов еще вот это || эквивалентно OR
А вот это && эквивалентно AND в логических выражениях
В книжке впринципе написано.
Что еще:
тебе совсем не обязательно в данном случае обходить все строки в цикле while у тебя всего лишь одна строка выбирается. Можно и "подсократить":
PHP:
while($row == mysql_fetch_array($result,MYSQL_ASSOC))

я записал как ты видешь вот так:
PHP:
 $r = mysql_query('SELECT COUNT(*) AS `ammount` FROM `user` WHERE `uniqueName`=\''.$name.'\'');
Ну и еще - учись делать сразу правельные вопросы - тебе какое поле нужно проверить из строки таблицы? name? (имя) вот его и выбирай
PHP:
mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");

Вот так:

PHP:
mysql_query("SELECT `uniqueName` FROM `user` WHERE `uniqueName`=`".$uniqueName."`");

Учись сразу использовать именно столько ресурсов, сколько тебе нужно для выполнения конкретной задачи. А не намного больше.
Объясняю - * ты выбираешь все поля таблицы, а зачем? тебе в запросе нужно только одно. Вот его и перечисли, им и ограничься)


И еще - у тебя там не совсем верная логика выражений дальше, задумайся, исправь. А не верно вот что (допустим, пример:(
PHP:
 if(empty($year) AND !ereg("[0-9]{2,4}"))
Это выражение значит следующее:
Если поле год пусто И (логическое И) не соответствует формату от двух до четырех цифр
А нужно бы вот так:
PHP:
 if(empty($year) OR !ereg("[0-9]{2,4}"))
Если поле год пусто ИЛИ (логическое ИЛИ) не соответствует формату от двух до четырех цифр
Понимаешь разницу?)
Остальные исправления логических выражений оставляю на твою совесть.
Да, еще, почитай о тернарном операторе:
PHP:
$a?$a:false;
<условие>?<истина>:<ложь>;
В твоих случаях при группировании скобками такого оператора и код будет компактнее да и работает он немного быстрее, чем if.
 
И еще - у тебя там не совсем верная логика выражений дальше, задумайся, исправь. А не верно вот что (допустим, пример:(
PHP:
 if(empty($year) AND !ereg("[0-9]{2,4}"))

Да тут как-то не логично :D
PHP:
 if(empty($year) AND !ereg("[0-9]{2,4}"))
Поле пустое как оно будет соответствовать eregi :D:D:D:ah:

Добавлено через 3 минуты
Ну и еще - учись делать сразу правельные вопросы - тебе какое поле нужно проверить из строки таблицы? name? (имя) вот его и выбирай
PHP:
mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");

Вот так:

PHP:
mysql_query("SELECT `uniqueName` FROM `user` WHERE `uniqueName`=`".$uniqueName."`");

То-есть если использовать определёное(ые) поля
существенно уменьшается запрос к базе верно?? :D

А вот можешь пояснить:
AS `ammount`
 
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Регистрация</title>
</head>
<body>
<?php
error_reporting(E_ALL ^ E_NOTICE) ;

/*функция необходимая для отправки человека с предупреждением на предыдущую страницу - если поля не были верно заполнены*/

$uniqueName		=	$_POST['uniqueName']; //Логин
$mobile			=	$_POST['mobile']; //Мобильный телефон
$password		=	$_POST['password']; //Пароль
$passwordConfirm=	$_POST['passwordConfirm']; //Подтвержения пароля
$firstName		=	$_POST['firstName']; //Имя
$lastName		=	$_POST['lastName']; //Фамилия
$city			=	$_POST['city']; //Город
$day			=	$_POST['day']; //День Рождения
$month			=	$_POST['month']; //Месяц Рождения
$year			=	$_POST['year']; //Год Рождения
$gender			=	$_POST['gender']; //Пол
$created		=	date("d.m.Y  H:i");

include("conf.php");
$res = db_connect(_SERVER,_DATEBASE,_PASSWORD,_DB);
	$msg='';
	$i = isUniqueName($uniqueName);

	if(empty($uniqueName) || !eregi("[a-zA-Z0-9_~!@#%^]{3,16}",$uniqueName) || $i){
		$msg.="Сорри но Логин не прошол проверку!".
		(empty($uniqueName)?'Он пустой':'').
		(!eregi("[a-zA-Z0-9_~!@#%^]{3,16}",$uniqueName)?'Он содержит запрещенный символ':'').
		($i?'Этот Логин уже занят!':'')."!<br>";}
	elseif(isset($uniqueName)&&!empty($uniqueName) && !$i){
		$uniqueName = escapedString($uniqueName);
	}
	
	if(empty($mobile) || !eregi("[0-9+]{8,13}",$mobile)){
		$msg.="Сорри но Мобильный не прошол проверку!".(empty($mobile)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif(isset($mobile)&&!empty($mobile)){
		$mobile = escapedString($mobile);
	}
	
	if((empty($password) || empty($passwordConfirm)) || (!eregi("[a-zA-Z0-9]{3,16}",$password) || !eregi("[a-zA-Z0-9]{3,16}",$passwordConfirm)) || ($password!=$passwordConfirm)){
		$msg.="Сорри но Пароль не прошол проверку!".(empty($password)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif((isset($password)&&!empty($password)) && (isset($passwordConfirm)&&!empty($passwordConfirm)) && ($password==$passwordConfirm)){
		$password = escapedString($password);
	}
		
	if(empty($firstName) || !eregi("[a-zA-Zа-яА-Я]{3,16}",$firstName)){
		$msg.="Сорри но Имя не прошоло проверку!".(empty($firstName)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif(isset($firstName)&&!empty($firstName)){
		$firstName = escapedString($firstName);
	}
	
	if(empty($lastName) || !eregi("[a-zA-Zа-яА-Я]{3,16}",$lastName)){
		$msg.="Сорри но Фамилия не прошла проверку!".(empty($lastName)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif(isset($lastName)&&!empty($lastName)){
		$lastName = escapedString($lastName);
	}
	
	if(empty($city) || !eregi("[a-zA-Zа-яА-Я]{3,16}",$city)){
		$msg.="Сорри но Гoрод не прошла проверку!".(empty($city)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif(isset($city)&&!empty($city)){
		$city = escapedString($city);
	}
	
	if(empty($day) || !eregi("[0-9]{1,2}",$day)){
		$msg.="Сорри но День не прошол проверку!".(empty($day)?'Он пустой':'Он содержит запрещенный символ')."!<br>";
	}
	elseif(isset($day) && !empty($day)){
		$day = escapedString($day);
	}
	
	if($month=="0"){
		$msg.="Сорри но Месец не прошол проверку!Он небыл выбран!<br>";}
	
	if(empty($year) || !ereg("[0-9]{2,4}",$year)){
		$msg.="Сорри но Год не прошол проверку!".(empty($year)?'Он пустой':'Он содержит запрещенный символ')."!<br>";}
	elseif(isset($year) && !empty($year)){
		$year = escapedString($year);
	}
	
	if($gender!="0" && $gender!="1"){
		$msg.="Сорри но Пол не прошол проверку!Он небыл выбран!<br>";
	}
	
	if($msg)
		{echo $msg; return TRUE;}

if($msg==FALSE){
	send_query("INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day`,`month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` )","VALUES ('".$uniqueName."','".$mobile."','".md5($password)."','".$firstName."','".$lastName."','".$city."','".$day."','".$month."','".$year."','".$gender."','1','1','".$created."')");
	db_close($res);
	unset($q,$val,$inc,$uniqueName,$mobile,$password,$firstName,$lastName,$city,$day,$month,$year);

}



?>
</body>
</html>
УРА!!!
 
Ну вот и написали)
Дальше - о том, о чем ты спрашивал.

Естественно, если запрашивать только часть данных, которая тебе нужна, это быстрее и меньше по нагрузке, чем выбирать полностью содержимое строки.
Представь себе реальный проект - в одной строке 25 - 30 полей. Три - четыре из них типа longtext - до 2 гб инфы в каждом - а тебе нужно только название статьи дернуть.
Что быстрее - дернуть всю строку * или выбрать `table`.`name`? А теперь добавим сюда еще и циклическую выборку данных. То есть тебе нужно выбрать с помощью цикла 15 - 20 таких позиций? Пример убедителен?)

Читай ту книгу, которую я для тебя выложил. А это просто был пример как посчитать количество встречающихся данных в таблице - просто количество
"SELECT COUNT(*) AS `ammount`"
COUNT(*) вернет количество совпадений
AS `ammount` - это альтернативное название
если бы ты выбирал с помощью
$a = mysql_fetch_array($r); то смог бы обратиться к столбцу в массиве как к $a['ammount'];

А вот это объясни плиз:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Регистрация</title>
</head>
<body>
- оно у тебя в серверной части скрипта зачем?))))
 
если у меня там не будет мета-тэги(кодировка) то у меня ироглефы:)
 
Это меньшая из проблем (убери из сервеных скриптов хтмл полностью:))
вот выход:
PHP:
<?php
if(!headers_sent()) //на всякий случай
     header('Content-Type: text/html; charset=utf-8');
......
?>
Если не поможет, и у тебя где-то уже использовалась функция отправки заголовков - тебе поможет эта функция:
Для просмотра ссылки Войди или Зарегистрируйся.
 
PHP:
<?php
if(!headers_sent()){
	header("Content-Type: text/html; charset=utf-8");
}
session_start();
if($_REQUEST['act']=="logout"){
	session_destroy();
}
echo'<form action="'.$PHP_SELF.'" method="post" />';
echo'Логин: <input type="text" name="login" />';
echo'Пароль: <input type="password" name="pass" />';
echo'<input type="submit" name="ok" value="OK" />';
echo'</form>';

$uniqueName	=	$_POST['login'];
$password	=	$_POST['pass'];
$ok			=	$_POST['ok'];

if(isset($ok)){
	if((isset($uniqueName) && !empty($uniqueName)) && (isset($password) && !empty($password)) ){
		include("conf.php");
		
		$uniqueName = escapedString($uniqueName);
		$password	= escapedString($password);
		
		$res = db_connect(_SERVER,_DATEBASE,_PASSWORD,_DB);
		$i = isUniqueName($uniqueName);
		if($i){
			
			$r = mysql_query("SELECT `uniqueName`,`password` FROM `user` WHERE `uniqueName`='".$uniqueName."' and `password`='".md5($password)."'");
				if($r && mysql_num_rows($r)>0){
					
					$a = mysql_fetch_array($r);
						if( ($uniqueName == $a['uniqueName']) && (md5($password)==$a['password']) ){
							
							session_register("uniqueName");
								if(session_register("uniqueName")){
									
									redirect("main.php");
								}
						}
				}
		}
	}
}
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху