Форма регистрации пользователей

aaachilov

Новичок
Приветствую!
Вот после некоторых мучений родилась регистрация пользователей!
Отдельная благодарность пользователям Фанат, KorP, baev, vart.

Все работает все регистрирует!
Несколько вопросов все же осталось.

Хочу использовать функцию trim, но не как в голову не приходит того, как можно сделать так чтоб не прописывать её по отдельности к каждой переменной.
Думал сделать переменные в массиве использовать trim к массиву - но не знаю будет ли работать.
Подскажите пожалуйста как лучше сделать.

И второй вопрос
Вот кусок кода
PHP:
// Проверяем имя пользователя на уникальность
 $sel = "SELECT * FROM users WHERE ULogin = '$ULogin'";
 $res = mysql_query($sel); 
 $num = mysql_num_rows($res);
  if($num) $Err.="Такой пользователь уже существует!<br>";
Подскажите как вытащить запросом две переменные - хочу ещё мыло на уникальность проверить.

Заранее спасибо!

Вт код всей формы регистрации
PHP:
<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Задаём значение переменных
	$ULogin = $_POST['login'];
	$UPSW = $_POST['psw'];
	$UPSW2 = $_POST['psw2'];
	$UDate = date("Y-m-d");
	$UTime = date("H:i");
	$UName = $_POST['name'];
	$UEmail = $_POST['email'];
	$UEmail_ok=eregi("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$", $UEmail);
	$Err='';
	$Vopros = $_POST['vopros'];
// Подключаемся к серверу
if (!$link = mysql_connect('localhost', 'root', '12345')) {
echo 'Ошибка подключения к базе данных';
// В случае ошибки подключения завершаем работу скрипта
exit();
};
//перенаправляем подключение в русскую кодировку 
@mysql_query("SET NAMES 'cp1251'", $link);
mysql_select_db('forum', $link);
// проверяем информацию в перменных
	if (!$ULogin) $Err.="Вы не указали логин!<br>";  
	if (!$UPSW) $Err.="Вы не указали пароль!<br>";  
	if ($UPSW != $UPSW2) $Err.="Пароли не совподают!<br>";  
	if (!$UEmail) $Err.="Вы не указали E-mail!<br>";  
	if (!$UEmail_ok && $UEmail) $Err.="Вы не корректно ввели E-mail!<br>";
	if ($Vopros != 24) $Err.="Неверный ответ на вопрос!<br>"; 
// Проверяем имя пользователя на уникальность
 $sel = "SELECT * FROM users WHERE ULogin = '$ULogin'";
 $res = mysql_query($sel); 
 $num = mysql_num_rows($res);
  if($num) $Err.="Такой пользователь уже существует!<br>";  
// Проверяем наличие ошибок в переменных
if (!$Err) {
// Если условия верны, то выполняем запрос на запись данных в базу  
$sql = "INSERT INTO `users` (`ULogin`, `UPSW`, `UDate`, `UTime`, `UName`, `UEmail`)
                     VALUES ('".$ULogin."', '".$UPSW."', '".$UDate."', '".$UTime."', '".$UName."', '".$UEmail."')";
$result = mysql_Query($sql, $link);
echo "<br>Поздравляем с успешной регистрцией!<br>";
exit();
} 
else 
{
echo "Ошибка регистрации!<br>";
if ($Err) echo '<font color=red><b>'.$Err.'</b></font><br>';  
} 
}  
?>
<html>  
<head>
	<style>#reg {width:200px;}</style>
	<title>Регистрация</title>
</head>  
<body>
<div><b>Регистрация</b></div><br>
	<form  method="post">
		<table>
			<tr><td id="reg">Логин*</td><td><input type="text" name="login" value="<? echo $_POST['login'] ?>" /></td></tr>
			<tr><td id="reg">Пароль*</td><td><input type="password" name="psw"  /></td></tr>
			<tr><td id="reg">Подтвердите пароль*</td><td><input type="password" name="psw2"  /></td></tr>
			<tr><td id="reg">E-mail:*</td><td><input type="text" name="email" value="<? echo $_POST['email'] ?>" /></td></tr>
			<tr><td id="reg">Имя</td><td><input type="text" name="name" value="<? echo $_POST['name'] ?>" /></td></tr>
			<tr><td id="reg">Сколько часов в сутках?*</td><td><input type="text" name="vopros" /></td></tr>
			<tr><td id="reg"></td><td><input type="submit" value="Регистрация" /></td></tr>
		</table>
	</form> 
</body>  
</html>
 

aaachilov

Новичок
Да и кстати ещё вопрос. Как очистить значения которые сохранены в массиве POST после выполнения скрипта - а то если после выполнения обновить эту же страницу вновь выполняется запрос к базе - данные конечно не записываются из за того, что некоторые поля имеют уникальные значения, но все же....
Ещё раз спасибо!
 

С.

Продвинутый новичок
Думал сделать переменные в массиве использовать trim к массиву - но не знаю будет ли работать.
К массиву применять trim бесмысленно, а вот к каждому элеменету в цикле -- запросто.
Подскажите как вытащить запросом две переменные - хочу ещё мыло на уникальность проверить.
Посмотри уже, что у тебя в $num находится. Только за стул держись.
Как очистить значения которые сохранены в массиве пост после выполнения скрипта
Эти значения хранятся в бразуере. Поэтому для их очистки надо перенаправить браузер на другую или эту же страницу без ПОСТа.
 

aaachilov

Новичок
Спасибо!
А чем мне тогда не проще применить trim к самим переменным без масива?
Я конечно многого не понимаю, но все же как то не укладывается все по полочкам в голове)
В перменной $num находится единица (1)
На счёт очистки понял, спасибо - ну хотя это в данном случае и не нужно, потому что в случае выполнения скрипты будет релирект на другую страницу
 

С.

Продвинутый новичок
А чем мне тогда не проще применить trim к самим переменным без масива?
К отдельным переменным надо написать N раз. А для элементов массива, только один и запустить это дело в цикле (одна-две строки кода).
В перменной $num находится единица (1)
Вся верно. Это я не разглядел, что у тебя mysql_num_rows($res). Ну так исползуй полученый результат более продуктивно, чем просто подсчет количества строк. Все данные там.
 

aaachilov

Новичок
Ну так исползуй полученый результат более продуктивно, чем просто подсчет количества строк. Все данные там.
Люди добрые скажите плиз подробнее.
Я пробывал сделать так
PHP:
$sql = "SELECT * FROM `users` WHERE (`ULogin` = '".$ULogin."') 
                                                       and (`UEmail` = '".$UEmail."')";
  $result = mysql_Query($sql, $link);
  if (!$result) {
    echo "Ошибка выполнения запроса";
    exit;
    mysql_close($link) ;
  } else {
    $row = mysql_fetch_object($result);
    $ULog = $row->ULogin;
    $UMail = $row->UEmail;
    mysql_free_result($result);
  };
А потом я уже $ULog и $UMail сравнивал - но нифига не работает(((
 

С.

Продвинутый новичок
PHP:
SELECT * FROM `users` WHERE (`ULogin` = '".$ULogin."') 
                                                       and (`UEmail` = '".$UEmail."')"
А какая суть этого запроса? Если его на русском языке записать?
 

aaachilov

Новичок
Если в таблице юзер в поле логин есть значение равное переменной $ULogin
и в поле мыло есть значение равное переменной $UEmail

Можетя конечно совсем бум бум)) Извиняюсь
 

С.

Продвинутый новичок
Все правильно. Только "и" здесь не просто для связки слов, а конкретная логическая операция. И то, И другое одновременно должно быть истинно в рамках одной записи. В твоем же случае, как я догадываюсь, если одно из них совпадате, то уже должна создаваться ошибочная ситуация для пользователя.
 

aaachilov

Новичок
не не работает и с || тоже - переменные пустыми приходят(((
переменные я в массив запихал каким циклом нужно запустить функцию trim или не важно?
 

С.

Продвинутый новичок
каким циклом нужно запустить функцию trim или не важно?
В принципе без разницы. Но на практике один из них все же удобнее для проходов по массиву.

переменные я в массив запихал
Вообще-то я полагал, что данные сразу в массиве поступают. Но если их все по одной в массив запихивать, то зачем огород с циклом городить? Также по одной и trim можно было применить.
 

aaachilov

Новичок
Также по одной и trim можно было применить.
Я так и думал сделать - но по этому и спросил - может есть вариант записать все более коротким кодом.
Просто 7 переменных - это ещё 7 строк
Но сейчас я их в массив запихал уже все равно - но как применить через цикл функцию вообще не пойму - и поисковики тожен ничего интересного не показывают
 

С.

Продвинутый новичок
но как применить через цикл функцию вообще не пойму
Нет никакого специального "через цикл функцию". Есть просто цикл. В цикле выполняются ЛЮБЫЕ операции. Одной из таких операций может быть применение trim.
 

aaachilov

Новичок
))) Ну зачем так сложно))
Я понимаю как работает цикл например с цифрами, но как его к массиву применить вообще не могу понять
PHP:
$U[0] = $_POST['login'];
$U[1] = $_POST['psw'];
$U[2] = $_POST['psw2'];	
$U[3] = $_POST['name'];
$U[4] = $_POST['email'];
Может посоветуете литературу какую? Будем искать решение в своей голове, после прочтения 100 страниц
 

bebeka

Новичок
PHP:
$ULogin = trim($_POST['login']);
PHP:
$sel = "SELECT * FROM users WHERE ULogin = '" . mysql_real_escape_string($ULogin) . "'";
PHP:
$U[0] = $_POST['login'];
$U[1] = $_POST['psw'];
$U[2] = $_POST['psw2'];    
$U[3] = $_POST['name'];
$U[4] = $_POST['email'];
Это массив: http://php.su/learnphp/datatypes/?array

Перебрать массив можно так:

PHP:
foreach ($U as $key => $val) {
 $U[$key] = trim($val);
}
В результате будет уже массив, в котором к каждому элементу была применена функция trim.
 

aaachilov

Новичок
PHP:
foreach ($U as $key => $val) {
 $U[$key] = trim($val);
}
Этот Вариант к сожалению не работает
 

bebeka

Новичок
PHP:
foreach ($U as $key => $val) {
 $U[$key] = trim($val);
}
Этот Вариант к сожалению не работает
PHP:
$U[0] = $_POST['login'];
$U[1] = $_POST['psw'];
$U[2] = $_POST['psw2'];    
$U[3] = $_POST['name'];
$U[4] = $_POST['email'];  

foreach ($U as $key => $val) {
 $U[$key] = trim($val);
}
Функция trim — Удаляет пробелы (или другие символы) из начала и конца строки.

' beb eka ' => 'beb eka'

Удалит только первый и последний пробел.
 
Сверху