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

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

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

Author24 — интернет-сервис помощи студентам
Помогите, люди добрые! Никак не могу разобраться!
Введённое в поле "Повтор пароля" с самого начала не заносит в переменную. Это понятно из того, что он останавливает скрипт и пишет "Пароли не совпадают". А если добавить проверку на заполненность этого поля, он сообщит, что не все поля заполнены.
А 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...

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

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

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

5
3 / 3 / 0
Регистрация: 13.12.2013
Сообщений: 17
17.04.2014, 23:42 2
Я не профессионал, но меня немного смутила эта строка
Цитата Сообщение от Хитрый Лис Посмотреть сообщение
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  [ТС] 3
Цитата Сообщение от 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 4
Странно ) я взял твои оба кода. Сделал таблицу в базе Мускула. у меня все записывается.

В 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  [ТС] 5
Спасибо тебе большое, что попытался выяснить проблему и помочь мне!

Но дело оказалось гораздо легче, чем я предполагал.
Оказывается, я забыл в бд в таблице 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 6
Спасибо и тебе! ) Я по твоему примеру тоже сделал проверку на существование записей в базе данных )

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru