[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регистрация
ApxanreJl
 
<?php //defined('III') or die();
include 'db.php';
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$pass = !empty($_POST['pass']) ? $_POST['pass'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
$pol = !empty($_POST['pol']) ? $_POST['pol'] : NULL;
//удаляем на всякий
unset($inf);

$inf = array();
if(isset($_POST["Ok"])) {
$query = mysql_query("SELECT * FROM users WHERE name='$name'");
$row = mysql_num_rows($query);
//проверка имени
if($row > 0)
$inf[]= 'Имя' .htmlspecialchars($name). 'занято, выберете другое!';
if(strlen($name) > 12)
$inf[]='Имя не может быть больше 12 символов!';
if(strlen($name) < 3)
$inf[]='Имя не может быть меньше 3 символов!';
elseif(!preg_match("/[a-zA-Z0-9]/i", $name))
$inf[]='Имя содержит недопустимые символы!';

//проверка пароля
if(strlen($pass) < 6)
$inf[]='Пароль должен содержать минимум 6 символов!';
elseif(!preg_match("/[a-z0-9]/i", $pass))
$inf[]='Пароль содержит недопустимые символы!';

//проверка email
if(!preg_match("/^[a-z0-9_.-]+@([a-z0-9]+\.)+[a-z]{2,6}$/i", $email))
$inf[] = 'Не верный формат E-mail';


//вывод ошибок
if(count($inf) > 0) {
foreach($inf as $inf1) {
echo $inf1."<br />";
}
echo "<a href=\"reg.php\">Назад</a>";

}
//если массив пустой регистрируем
if(!count($inf)) {
include 'function.php';
$name = my_esc($name);//функция my_esc() сокращенный вариант функции mysql_real_escape_string()
$pass = my_esc($pass);
$email = my_esc($email);
$pass = md5(md5($pass));
$pol = my_esc($pol);
mysql_query("INSERT INTO `users` SET
`name` = '
$name',
`password` = '
$pass',
`email` = '
$email',
`pol` = '
$pol'"
);
echo "Вы зарегистрированы. Теперь можете <a href='/'>войти</a><br /> ";

// это для теста. переменая pol через echo показывается а в базу пишет 0 :(
echo $email."<br />" ;
echo $pass."<br />";
echo $name."<br />";
echo $pol."<br />";
}
}

// форма
if(!isset($_POST['Ok'])) {?>
<form
action="reg.php" method="post">
*Имя:<a href="index.php?go=">[?]</a><br /> <!--ссылки инфо-->
<input type="text" name="name" /><br />
*Пароль:<a href="index.php?go=">[?]</a><br />
<input
type="password" name="pass" /><br />
Email: <a href="index.php?go=">[?]</a><br />
<input
type="text" name="email" /><br />

*Пол:<br />
<select
name="pol">
<option
value="m">Мужской</option>
<option
value="w">Женский</option>
</select> <br />
<input
type="submit" name="Ok" value="Регистрация" />
</form>
<a
href="/">на главную</a>
<?php

}


подскажите плиз где ошибка?
в базу все записывает нормально кроме переменной пол, она в базе = 0. хотя через echo проверку имеет значение m или w.
и канеш буду рад коментам!
я совсем нидавн начал учиться)



Спустя 8 минут, 26 секунд (25.07.2012 - 12:04) kamanch написал(а):
Скорее всего в базе поле pol численного типа. А ты туда шлешь строку 'm' / 'w'

Там, где проверяешь занятость ника - отправляешь необработанные данные WHERE name='$name'"
Ставим там кавычку, и готова sql иньекция

Спустя 11 секунд (25.07.2012 - 12:04) kovaldm написал(а):
тип поля `pol` в БД какой?

Спустя 3 минуты, 55 секунд (25.07.2012 - 12:08) ApxanreJl написал(а):
Цитата (pak @ 25.07.2012 - 09:00)
мне кажется её не надо обрабатовать mysql_real_escape_string(), она же цифра, пол надо проверять на явления числа.

то есть просто 1=муж. 2=жен. и прогнать через int().
это выход канешь, но у меня там вроде как w и m.
вот и не пойму почему. щас попробую так как есть записать.

Спустя 4 минуты, 23 секунды (25.07.2012 - 12:13) ApxanreJl написал(а):
Цитата (h.n.81 @ 25.07.2012 - 09:04)
Скорее всего в базе поле pol численного типа. А ты туда шлешь строку 'm' / 'w'

Там, где проверяешь занятость ника - отправляешь необработанные данные WHERE name='$name'"
Ставим там кавычку, и готова sql иньекция

точно числовой! smallint(2) СПАСИБО!
тоесть мне нужно просто функции подключить в начало и каждый вывод/ввод БД прогонять mysql_real_escape_string(). правильно?

Спустя 3 минуты, 24 секунды (25.07.2012 - 12:16) kamanch написал(а):
С точки зрения эфективности, лучше как раз оставить тип поля числовым, а в форме поменять value на 1 и 2
Т.к. это будет и быстрее, и меньше места будет занимать в базе.

Спустя 13 минут, 8 секунд (25.07.2012 - 12:29) ApxanreJl написал(а):
спасибо!!! а intval() как я понял нужно тоже все что в базу идет/выходит и имеет целое число обрабатывать?
я чет про защиту начитался мозг взорвал так и ни че не понял)

Спустя 4 минуты, 22 секунды (25.07.2012 - 12:34) kamanch написал(а):
Любые данные, которые идут в базу (как данные или же как параметры в условиях) должны фильтроваться.

Так же любые данные, полученные из базы, перед выводом в браузер должны обработаться.


Сделай задачку, будет потом проще Задача на корректную обработку данных

Спустя 11 часов, 51 минута, 51 секунда (26.07.2012 - 00:25) ApxanreJl написал(а):
еще раз спасибо! урок пока сам не решился начать делать но много примеров и пояснений. думаю подчеркну для себя ченить)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.