С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для Хитрый Лис
3 / 3 / 2
Регистрация: 17.04.2014
Сообщений: 37

Регистрация на PHP + MySQL с E-mail и повтором пароля

17.04.2014, 22:07. Показов 5033. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, люди добрые! Никак не могу разобраться!
Введённое в поле "Повтор пароля" с самого начала не заносит в переменную. Это понятно из того, что он останавливает скрипт и пишет "Пароли не совпадают". А если добавить проверку на заполненность этого поля, он сообщит, что не все поля заполнены.
А e-mail не заносит в базу. Говорит, что при регистрации возникли ошибки.

Вот код reg.php:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<form action="save_user.php" method="post" name="reg" enctype="multipart/form-data">
<table width="100%">
 
<tr>
<td>E-mail:</td><td><input name="mail"></td><td width="400"><font size="2">* Введите свой настоящий e-mail. Он понадобится, если вы забудете пароль.</font></td>
</tr>
<tr>
<td>Пароль:</td><td><input name="password" type="password"></td><td width="400"><font size="2">* Пароль должен быть сложным и может содержать любые знаки и символы.</font></td>
</tr>
<tr>
<td>Повторите пароль:</td><td><input name="povtor" type="password"></td><td width="400"><font size="2">* Проверка правильности введённого пароля.</font></td>
</tr>
<tr>
<td>Имя:</td><td><input name="login"></td><td width="400"> &nbsp;[ <a href="">?</a> ]</td>
</tr>
<tr>
<td>Пол:</td><td><select name="gender">
<option name="y">Мужской</option>
<option name="x" selected>Женский</option>
</select></td><td width="400"><font size="2"></font></td>
</tr>
<tr>
<td>Аватар:</td><td><input type="file" name="fupload" value="Выбрать"></td><td width="400"><font size="2">* Допустимые форматы: *.jpg, *.png и *.gif.<font></td>
</tr>
</table>
 
<table width="100%">
<tr>
<td><center><br><br><a href="pravila.php" class="navigation">Назад</a></center></td>
<td><center><br><br><input type="submit" class="navigation" style="width:160px;" value="OK"/></center></td>
<td><center><br><br><a href="index.php" class="navigation">Отмена</a></center></td>
</tr>
</table>
 
</form>
А вот save_user.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php header("Content-Type: text/html; charset=utf-8");?>
<?
    if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
    if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
    if (isset($_POST['povtor'])) { 
$povtor=$_POST['povtor']; 
if ($povtor =='') { 
unset($povtor);
} 
}
    if (isset($_POST['mail'])) { 
$mail=$_POST['mail']; 
if ($mail =='') { 
unset($mail);
} 
}
    if (isset($_POST['gender'])) { 
$gender=$_POST['gender']; 
if ($gender =='') { 
unset($gender);
} 
}
 
 if (empty($login) or empty($password) or empty($mail)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    {
    exit ("Ошибка! Заполнены не все поля.");
    }
    //если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
if ($password != $povtor) {
exit ("Пароли не совпадают.");
}
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
 $password = stripslashes($password);
    $password = htmlspecialchars($password);
 //удаляем лишние пробелы
    $login = trim($login);
    $password = trim($password);
 
// дописываем новое
//добавляем проверку на длину логина и пароля
            if    (strlen($login) < 2 or strlen($login) > 50) {
            exit    ("Имя персонажа должно быть длиной не менее двух букв и не более пятидесяти.");
            }
if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$login)) {
        exit ("Имя персонажа может содержать только русские буквы.");
}
            if    (strlen($password) < 3 or strlen($password) > 15) {
            exit    ("Пароль должен состоять не менее чем из трёх символов и не более чем из пятнадцати.");
            }          
           
if    (!empty($_FILES['fupload']['name'])) //проверяем, отправил    ли пользователь изображение
            {
            $fupload=$_FILES['fupload']['name'];    $fupload = trim($fupload); 
              if ($fupload =='' or empty($fupload)) {
                                 unset($fupload);// если переменная $fupload пуста, то удаляем ее
                                                            }
            }          
if    (!isset($fupload) or empty($fupload) or $fupload =='')
            {
            //если переменной не существует (пользователь не отправил    изображение),то присваиваем ему заранее приготовленную картинку с надписью    "нет аватара"
            $avatar    = "avatars/net-avatara.jpg"; //можете    нарисовать net-avatara.jpg или взять в исходниках
            }          
else 
            {
 
            //иначе - загружаем изображение пользователя
            $path_to_90_directory    = 'avatars/';//папка,    куда будет загружаться начальная картинка и ее сжатая копия          
         
            if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
                      {                 
                               $filename =    $_FILES['fupload']['name'];
                               $source =    $_FILES['fupload']['tmp_name']; 
                               $target =    $path_to_90_directory . $filename;
                               move_uploaded_file($source,    $target);//загрузка оригинала в папку $path_to_90_directory           
         if(preg_match('/[.](GIF)|(gif)$/',    $filename)) {
                     $im    = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем    изображение в этом же формате. Необходимо для последующего сжатия
                     }
                     if(preg_match('/[.](PNG)|(png)$/',    $filename)) {
                     $im =    imagecreatefrompng($path_to_90_directory.$filename) ;//если    оригинал был в формате png, то создаем изображение в этом же формате.    Необходимо для последующего сжатия
                     }
                     
                     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/',    $filename)) {
                               $im =    imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же    формате. Необходимо для последующего сжатия
                     }           
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ    ВЗЯТО С САЙТА www.codenet.ru           
// Создание квадрата 90x90
            // dest - результирующее изображение 
            // w - ширина изображения 
            // ratio - коэффициент пропорциональности           
$w    = 90;  //    квадратная 90x90. Можно поставить и другой размер.          
// создаём исходное изображение на основе 
            // исходного файла и определяем его размеры 
            $w_src    = imagesx($im); //вычисляем ширину
            $h_src    = imagesy($im); //вычисляем высоту изображения
                     // создаём    пустую квадратную картинку 
                     // важно именно    truecolor!, иначе будем иметь 8-битный результат 
                     $dest = imagecreatetruecolor($w,$w);           
         //    вырезаем квадратную серединку по x, если фото горизонтальное 
                     if    ($w_src>$h_src) 
                     imagecopyresampled($dest, $im, 0, 0,
                                         round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                                      0, $w, $w,    min($w_src,$h_src), min($w_src,$h_src));           
         // вырезаем    квадратную верхушку по y, 
                     // если фото    вертикальное (хотя можно тоже серединку) 
                     if    ($w_src<$h_src) 
                     imagecopyresampled($dest, $im, 0, 0,    0, 0, $w, $w,
                                      min($w_src,$h_src),    min($w_src,$h_src));           
         // квадратная картинка    масштабируется без вырезок 
                     if ($w_src==$h_src) 
                     imagecopyresampled($dest,    $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);           
$date=time();    //вычисляем время в настоящий момент.
            imagejpeg($dest,    $path_to_90_directory.$date.".jpg");//сохраняем    изображение формата jpg в нужную папку, именем будет текущее время. Сделано,    чтобы у аватаров не было одинаковых имен.          
//почему именно jpg? Он занимает очень мало места + уничтожается    анимирование gif изображения, которое отвлекает пользователя. Не очень    приятно читать его комментарий, когда краем глаза замечаешь какое-то    движение.          
$avatar    = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара. 
 
$delfull    = $path_to_90_directory.$filename; 
            unlink    ($delfull);//удаляем оригинал загруженного    изображения, он нам больше не нужен. Задачей было - получить миниатюру.
            }
            else 
                     {
                                //в случае    несоответствия формата, выдаем соответствующее сообщение
                     exit ("Недопустимый формат изображения. Разрешены только *.jpg, *.png и *.gif.");
                             }
            //конец процесса загрузки и присвоения переменной $avatar адреса    загруженной авы
            }          
// дописали новое
 
 // подключаемся к базе
    include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
 // проверка на существование пользователя с таким же логином
    $result = mysql_query("SELECT login FROM cats WHERE login='$login'",$db);
    $myrow = mysql_fetch_array($result);
    if (!empty($myrow['id'])) {
    exit ("Извините, но это имя уже занято другим игроком. Попробуйте придумать для своего персонажа другое имя.");
    }
 // если такого нет, то сохраняем данные
    $result2 = mysql_query ("INSERT INTO cats (login,password,mail,avatar,gender,clan) VALUES('$login','$password','$mail','$avatar','$gender','$clan')");
    // Проверяем, есть ли ошибки
    if ($result2=='TRUE')
    {
    echo "Вы персонаж успешно зарегистрирован. Войдите, введя от него имя и пароль.";
    }
 else {
    echo "При регистрации возникли ошибки. Попробуйте повторить попытку.";
    }
    ?>


Практически весь код отсюда: http://ruseller.com/lessons.php?rub=37&id=347
Но Повтор пароля, E-mail и пол сам дописывал.
С полом всё получилось, а вот с остальными...

Помогите пожалуйста! В первый раз сайт на PHP создаю, очень надо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2014, 22:07
Ответы с готовыми решениями:

Регистрация PHP + MYSQL
Не хочет регистрироваться в чем проблема подскажите? &lt;?php if (!empty($_POST)) { $nzak =($_POST); $bank =($_POST); ...

регистрация и авторизация на php mysql
Регистрируюсь и все заносится в базу данных, но при входе на сайт все равно выводится что я захожу как гость. Почему? Как это исправить? ...

Регистрация нового пользователя (PHP+MySQL)
Здравствуйте, уважаемые господа! Будьте так любезны, осветите разум юного подавана. Требуется, чтобы новому региструемому пользователю...

5
3 / 3 / 0
Регистрация: 13.12.2013
Сообщений: 17
17.04.2014, 23:42
Я не профессионал, но меня немного смутила эта строка
Цитата Сообщение от Хитрый Лис Посмотреть сообщение
td>E-mail:</td><td><input name="mail"></td><td width="400"><font size="2">*
Здесь непонятно какой тип поля INPUT
Вероятно должно быть так
HTML5
1
<td>E-mail:</td><td><input type = "text" name="mail"></td><td width="400"><font size="2">
Кстати, а почему Вы изначально не ставите тип поля ввода а потом имя ?
1
 Аватар для Хитрый Лис
3 / 3 / 2
Регистрация: 17.04.2014
Сообщений: 37
18.04.2014, 00:45  [ТС]
Цитата Сообщение от jercy_vz Посмотреть сообщение
Здесь непонятно какой тип поля INPUT
Вероятно должно быть так
HTML5
1
<td>E-mail:</td><td><input type = "text" name="mail"></td><td width="400"><font size="2">
Я попробовал, но суть всё равно от этого не меняется, соответственно, всё осталось на своих местах - e-mail не заносит в БД
Но всё равно, спасибо, что попытались мне помочь)
Цитата Сообщение от jercy_vz Посмотреть сообщение
Кстати, а почему Вы изначально не ставите тип поля ввода а потом имя ?
Я как-то особо не придаю этому значения... Ведь исполнение кода от этого всё равно не меняется...

Добавлено через 55 минут
Кстати, проблема с повтором пароля устраняется, если в HTML-коде у этого поля убрать "type="password"". Значит, введённое просто не заносится в переменную из-за шифрования? Но как тогда быть?
0
3 / 3 / 0
Регистрация: 13.12.2013
Сообщений: 17
19.04.2014, 21:47
Странно ) я взял твои оба кода. Сделал таблицу в базе Мускула. у меня все записывается.

В PHP коде в файле save_user.php я убрал переменную
Цитата Сообщение от Хитрый Лис Посмотреть сообщение
$result = mysql_query("SELECT login FROM cats WHERE login='$login'",$db);
$db потому как система у меня на неё выругалась. Она, у меня лично, нигде не описана.

Данные успешно сохранились, email тоже. Пароль записался, что правда в нешифрованном виде, но его никто и не шифровал.

Добавлено через 35 минут
Дальше больше

между строками 138 и 139 вставил строку
PHP
1
$password = md5 ($password);
и пароль в базу данных записался уже хэшированным.
А вот проверка на существование логинов у меня почему то не отработала. ТО есть я заношу без проблем несколько записей в таблицу с одним и тем же логином - без проблем.
И еще одно НО! я HTML код в HTML файле сохранил. Откровенно говоря, не знаю, насколько это может влиять на работу)

Добавлено через 9 минут
Разобрался почему не выполняется проверка логинов, нашел ошибку в коде

Цитата Сообщение от Хитрый Лис Посмотреть сообщение
if (!empty($myrow['id'])) {
здесь не 'id' должно быть а 'login'.

Теперь проверяет. Можно такую же проверку сделать и для email чтоб не было повторения e-mail.
А вот проверку на заполненность полей можно сделать средствами HTML. Дописав в каждое поле атрибут required
1
 Аватар для Хитрый Лис
3 / 3 / 2
Регистрация: 17.04.2014
Сообщений: 37
02.05.2014, 23:34  [ТС]
Спасибо тебе большое, что попытался выяснить проблему и помочь мне!

Но дело оказалось гораздо легче, чем я предполагал.
Оказывается, я забыл в бд в таблице cats поставить на поле id Auto_Increment (рассеянная моя башка). Из-за этого ничего не записывалось в таблицу.
А когда я повтор пароля занёс в переменную ДО просто пароля, он прекрасно занёсся. Сам не знаю, почему, но раз работает - оставь в покое и забудь.)
Теперь, когда я это исправил, регистрация заработала, и я доделал её до конца. Всё отменно работает)

У тебя, всё записывалось, поскольку ты, наверно, не забыл поставить на id Auto_Increment.
Переменная $db описана в файле bd.php, который инлудится сюда. Вот содержимое этого файла:
PHP
1
2
3
4
<?php
        $db = mysql_connect ("мускул-сервер","имя пользователя","пароль");
        mysql_select_db ("имя бд",$db);
        ?>
Пароль я шифровать не собирался, т.к. у меня почему-то он не шифровался при входе. Тем более, если пользователь забудет пароль, мне нужно будет ему выслать его на e-mail. Где-то читал, что можно занести хэшированный и обычный пароль в разные таблицы. Но я так не умею... Да мне и не нужна такая безопасность, я думаю, никому не понадобится взламывать мой сайт (точнее сайт младшей сестры)
Насчёт
Цитата Сообщение от jercy_vz Посмотреть сообщение
if (!empty($myrow['id'])) {
- да, действительно была ошибка. Но не совсем тут.
PHP
1
$result = mysql_query("SELECT login FROM cats WHERE login='$login'",$db);
Здесь SELECT не login, а id:
PHP
1
2
3
4
5
$result = mysql_query("SELECT id FROM cats WHERE login='$login'",$db);
    $myrow = mysql_fetch_array($result);
    if (!empty($myrow['id'])) {
    exit ("Извините, но это имя уже занято другим игроком. Попробуйте придумать для своего персонажа другое имя.");
    }
Но так, в принципе, тоже правильно:
PHP
1
2
3
4
5
$result = mysql_query("SELECT login FROM cats WHERE login='$login'",$db);
    $myrow = mysql_fetch_array($result);
    if (!empty($myrow['login'])) {
    exit ("Извините, но это имя уже занято другим игроком. Попробуйте придумать для своего персонажа другое имя.");
    }
Вот такие дела.
Ещё раз спасибо вам)
1
3 / 3 / 0
Регистрация: 13.12.2013
Сообщений: 17
06.05.2014, 19:16
Спасибо и тебе! ) Я по твоему примеру тоже сделал проверку на существование записей в базе данных )

А с примером просто было интересно разобраться ))
Удачи! )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2014, 19:16
Помогаю со студенческими работами здесь

Форма регистрации php + Mysql(phpmyadmin). Регистрация не работает посмотрите(код)
У меня есть база данных логина и пароля. В этом коде должен выполнятся запрос на регистрацию логина и пароль в базу данных Mysql. ...

Регистрация php mysql
index &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;title&gt;Приветствие&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;a...

PHP.MYSQL. Регистрация на сайте. Защита
Как вы знаете есть такой фокус: &quot;Когда в лейбел html формы вводится mysql команда, то можно убить всю БД.&quot; Хочется сделать защиту...

Шифрование пароля на php mysql
Как сделать что бы код в бд записывался зашифрованным, а при авторизации она был декодирован Ниже код для регистрации. &lt;? /** ...

Смена пароля. Yii, MySQL, PHP
Нужно было сменить пароль от админ. панели. Я зашел в базу данных, через phpmyadmin, пользователь один - admin, в поле password я увидел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru