Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
MySQL

Не работает строка в форме регистрации

05.07.2017, 19:44. Показов 864. Ответов 16

Студворк — интернет-сервис помощи студентам
Здравствуйте!
На днях в интернете был нарыт код. Собственно я уже много перепробовол их и собственные и модификации. После где-то 3-4 месяцев мучений все таки дело пошло в ход. Так может быть мне и казалось, но после того как я принялся искать уязвимости все пошло почти в полный крах. Код остался рабочим, но пользу, которую по задумке должен он принести не принес. Вобщем то проблем много, а как справится с ними не знаю.
Код прилагаю:
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
<?php
     include_once "bd.php";
     header("content-type: text/html; charset=utf-8");
     session_start();
     if(isset($_POST['reg'])){
        if($_POST['name'] == '' ||
           $_POST['familiya'] == '' ||
           $_POST['login'] == '' || 
           $_POST['telephonenumber'] == '' ||
           $_POST['email'] == '' ||
           $_POST['password'] == ''){
            $_SESSION['sng'] ="Поля обязательны для заполнения";   
           }
        else{
             $login = $_POST['login'];
             $email = $_POST['email'];
             $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email'") or die(mysql_error());
             if(mysql_num_rows($sql) != 0){
                 $_SESSION['sng'] ="Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН и EMAIL";}
             else{
                 $name = htmlspecialchars ($_POST['name']);
                 $familiya = htmlspecialchars ($_POST['familiya']);
                 $login = htmlspecialchars ($_POST['login']);
                 $telephonenumber =htmlspecialchars ($_POST['telephonenumber']);
                 $email = htmlspecialchars ($_POST['email']);
                 $password = htmlspecialchars ($_POST['password']);
                 $ip = $_SERVER['REMOTE_ADDR'];
                 mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber=SHA1('$telephonenumber'),email=SHA1('$email'),password=SHA1('$password'),ip='$ip'");
                 header("Location: index.php");
                 exit;
             }
        }
     }
     
    ?>
Кто сможет помогите рабраться:
1. Строка
PHP
1
$ip = $_SERVER['REMOTE_ADDR'];
не работает,т.е поле в БД пустое.
2. В БД можно занести все чего душе угодно. Например в БД можно передать "Как меня зовут", в поле имени
3. Не возращает ошибок как в строке
PHP
1
$_SESSION['sng'] ="Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН и EMAIL";}
или другой строке, хотя пробовал делать ответ:
PHP
1
2
3
<?php 
  echo $_SESSION['sng'];
?>
4. Этого я не проверил, но с номером телефона по версии тоже самое, что и с пунктом 2.

Кто может помочь, пожалуйста, помогите!
Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2017, 19:44
Ответы с готовыми решениями:

If срабатывает всегда в форме регистрации
Всем привет. Хочу сделать простенькую форму ригистрации. Но тут ужасный косяк который срабатывает всегда. Вот код: &lt;?php $db...

Бегущая строка с новостью о регистрации нового пользователя
Доброго времени суток. Мне необходимо сделать на сайте, чтобы сразу после регистрации нового пользователя, под шапкой сайта пробегала...

Не могу занести данные, введенные в форме регистрации, в базу
Уважаемые участники форума, помогите пожалуйста. Не выходит занести данные в базу. при &quot;action=&quot;action.php&quot;&quot; не...

16
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
08.07.2017, 00:42
сделайте вывод $_SERVER на экран
PHP
1
var_dump($_SERVER);
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
08.07.2017, 17:32  [ТС]
plohoyav, насколько понял в отдельном файле, тогда он выводит
Кликните здесь для просмотра всего текста

Code
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
array(50) { 
    [UNIQUE_ID"]=> string(24) "WWDsiLkyGSQAAGl-6VUAAAAI" 
    [GEOIP_ADDR"]=> string(15) "109.248.198.147" 
    [GEOIP_CONTINENT_CODE"]=> string(2) "EU" 
    [GEOIP_COUNTRY_CODE"]=> string(2) "RU" 
    [GEOIP_COUNTRY_NAME"]=> string(18) "Russian Federation" 
    [GEOIP_REGION"]=> string(2) "16" 
    [GEOIP_REGION_NAME"]=> string(9) "Chuvashia" 
    [GEOIP_CITY"]=> string(10) "Cheboksary" 
    [GEOIP_DMA_CODE"]=> string(1) "0" 
    [GEOIP_METRO_CODE"]=> string(1) "0" 
    [GEOIP_AREA_CODE"]=> string(1) "0" 
    [GEOIP_LATITUDE"]=> string(9) "56.174999" 
    [GEOIP_LONGITUDE"]=> string(9) "47.286400" 
    [GEOIP_POSTAL_CODE"]=> string(6) "428000" 
    [HTTP_HOST"]=> string(19) "j99522iv.beget.tech" 
    [HTTP_X_SERVER_ADDR"]=> string(12) "185.50.25.35" 
    [HTTP_X_FORWARDED_PROTO"]=> string(4) "http" 
    [HTTP_X_REAL_IP"]=> string(15) "109.248.198.147" 
    [HTTP_CONNECTION"]=> string(5) "close" 
    [HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" 
    [HTTP_USER_AGENT"]=> string(134) "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.137 YaBrowser/17.4.1.955 Yowser/2.5 Safari/537.36" 
    [HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 
    [HTTP_ACCEPT_ENCODING"]=> string(19) "gzip, deflate, sdch" 
    [HTTP_ACCEPT_LANGUAGE"]=> string(20) "uk,ru;q=0.8,en;q=0.6" 
    [HTTP_COOKIE"]=> string(42) "PHPSESSID=b20de78d6a23a34c41f094929f54bcd2" 
    [PATH"]=> string(60) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 
    [SERVER_SIGNATURE"]=> string(78) "Apache/2.4.10 (Unix) Server at j99522iv.beget.tech Port 80" 
    [SERVER_SOFTWARE"]=> string(20) "Apache/2.4.10 (Unix)" 
    [SERVER_NAME"]=> string(19) "j99522iv.beget.tech" 
    [SERVER_ADDR"]=> string(12) "185.50.25.35" 
    [SERVER_PORT"]=> string(2) "80" 
    [REQUEST_SCHEME"]=> string(4) "http" 
    [REMOTE_ADDR"]=> string(15) "109.248.198.147" 
    [DOCUMENT_ROOT"]=> string(37) "/home/j/j99522iv/programm/public_html" 
    [CONTEXT_PREFIX"]=> string(0) "" 
    [CONTEXT_DOCUMENT_ROOT"]=> string(37) "/home/j/j99522iv/programm/public_html" 
    [SERVER_ADMIN"]=> string(29) "webmaster@j99522iv.beget.tech" 
    [SCRIPT_FILENAME"]=> string(51) "/home/j/j99522iv/programm/public_html/reg/dampd.php" 
    [REMOTE_PORT"]=> string(5) "12696" 
    [GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" 
    [SERVER_PROTOCOL"]=> string(8) "HTTP/1.0" 
    [REQUEST_METHOD"]=> string(3) "GET" 
    [QUERY_STRING"]=> string(0) "" 
    [REQUEST_URI"]=> string(14) "/reg/dampd.php" 
    [SCRIPT_NAME"]=> string(14) "/reg/dampd.php" 
    [PHP_SELF"]=> string(14) "/reg/dampd.php" 
    [REQUEST_TIME_FLOAT"]=> float(1499524232.482) 
    [REQUEST_TIME"]=> int(1499524232) 
    [argv"]=> array(0) { } 
    [argc"]=> int(0)
}
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.07.2017, 17:50
Цитата Сообщение от Uni_programist Посмотреть сообщение
PHP
1
$name = htmlspecialchars ($_POST['name']);
htmlspecialchars здесь лишняя, не хватает mysql_real_escape_string.

Цитата Сообщение от Uni_programist Посмотреть сообщение
не работает,т.е поле в БД пустое.
Какой тип данных у ip в базе?

Цитата Сообщение от Uni_programist Посмотреть сообщение
В БД можно занести все чего душе угодно. Например в БД можно передать "Как меня зовут", в поле имени
И что? Вы никак не узнаете, реальное имя ввёл юзер или нет.

Цитата Сообщение от Uni_programist Посмотреть сообщение
Не возращает ошибок как в строке
Что и куда не возвращает? И почему ['sng'] не массив и ошибки друг друга перезаписывают?

Цитата Сообщение от Uni_programist Посмотреть сообщение
Этого я не проверил, но с номером телефона по версии тоже самое, что и с пунктом 2.
Для этого есть регулярки + плагины для JQuery.

Цитата Сообщение от Uni_programist Посмотреть сообщение
После где-то 3-4 месяцев мучений все таки дело пошло в ход.
И стоило оно того? Любой фрилансер такую форму за 300р сделает за час.
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
08.07.2017, 18:07  [ТС]
Jodah,
1. ip тип: text хотя пробовал и varchar
2.
PHP
1
$name=mysql_real_escape_string ($_POST['name']);
так?
3. Ошибки по идеи должны выводится на экран с помощью
PHP
1
$_SESSION['sng'] ="Поля обязательны для заполнения"
уже там где надо при
PHP
1
2
3
<?php
 echo $_SESSION[sng]; //или правильно $sng
?>
4.
Цитата Сообщение от Jodah Посмотреть сообщение
Для этого есть регулярки
, а где можно почитать про это.
5.
Цитата Сообщение от Jodah Посмотреть сообщение
И стоило оно того? Любой фрилансер такую форму за 300р сделает за час.
ну деньги же, а их нет, да и к тому же хотелось бы научится программировать на php
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.07.2017, 18:15
Цитата Сообщение от Uni_programist Посмотреть сообщение
так?
Верно.

Цитата Сообщение от Uni_programist Посмотреть сообщение
mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email'")
Кстати, вы записываете в базу хэш (SHA1), а поиск без хеша, поэтому совпадения и не находятся.

Цитата Сообщение от Uni_programist Посмотреть сообщение
а где можно почитать про это.
Берите любой самоучитель из гугла, например этот. Или поищите готовый пример регулярки для телефонного номера.
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
08.07.2017, 19:25
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
<?php
include_once "bd.php";
header("content-type: text/html; charset=utf-8");
session_start();
if (isset($_POST['reg'])) {
    if ($_POST['name'] == '' ||
    $_POST['familiya'] == '' ||
    $_POST['login'] == '' || 
    $_POST['telephonenumber'] == '' ||
    $_POST['email'] == '' ||
    $_POST['password'] == '') {
        $_SESSION['sng'] ="Поля обязательны для заполнения";   
    }
    else {
        array_walk('htmlspecialchars', $_POST);
        extract($_POST);
        $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email'") or die(mysql_error());
        if (mysql_num_rows($sql) == 1) {
            $_SESSION['sng'] ="Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН и EMAIL";
        }
        else {
            $ip = $_SERVER['REMOTE_ADDR'];
            mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
            header("Location: index.php");
            exit;
        }
    }
}
?>
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.07.2017, 20:43
Цитата Сообщение от plohoyav Посмотреть сообщение
PHP
1
if (mysql_num_rows($sql) == 1) {
Цитата Сообщение от plohoyav Посмотреть сообщение
PHP
1
WHERE login='$login' OR email='$email'
Юзер может ввести логин одного пользователя, а E-mail другого, и мы получим 2 записи. Поэтому вместо == 1 нужно > 0.

И мой совет ТСу - таки использовать SHA1(), но только для пароля.
1
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
09.07.2017, 11:23
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
<?php
include_once "bd.php";
header("content-type: text/html; charset=utf-8");
session_start();
if (isset($_POST['reg'])) {
    if ($_POST['name'] == '' ||
    $_POST['familiya'] == '' ||
    $_POST['login'] == '' || 
    $_POST['telephonenumber'] == '' ||
    $_POST['email'] == '' ||
    $_POST['password'] == '') {
        $_SESSION['sng'] ="Поля обязательны для заполнения";   
    }
    else {
        array_walk('htmlspecialchars', $_POST);
        extract($_POST);
        $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email'") or die(mysql_error());
        if (mysql_num_rows($sql) > 0) {
            $_SESSION['sng'] ="Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН и EMAIL";
        }
        else {
            $ip = $_SERVER['REMOTE_ADDR'];
            mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
            header("Location: index.php");
            exit;
        }
    }
}
?>
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
14.07.2017, 18:05  [ТС]
plohoyav, не работает строка №15.
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
14.07.2017, 18:09
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
<?php
include_once "bd.php";
header("content-type: text/html; charset=utf-8");
session_start();
if (isset($_POST['reg'])) {
    if ($_POST['name'] == '' ||
    $_POST['familiya'] == '' ||
    $_POST['login'] == '' || 
    $_POST['telephonenumber'] == '' ||
    $_POST['email'] == '' ||
    $_POST['password'] == '') {
        $_SESSION['sng'] ="Поля обязательны для заполнения";   
    }
    else {
        foreach ($_POST as $k=>$v) $_POST[$k] = htmlspecialchars($v);
        extract($_POST);
        $sql = mysql_query("SELECT * FROM users WHERE login='$login' OR email='$email'") or die(mysql_error());
        if (mysql_num_rows($sql) > 0) {
            $_SESSION['sng'] ="Пользователь с такими данными уже числислится. Проверку прошли ЛОГИН и EMAIL";
        }
        else {
            $ip = $_SERVER['REMOTE_ADDR'];
            mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber='$telephonenumber',email='$email',password='$password',ip='$ip'");
            header("Location: index.php");
            exit;
        }
    }
}
?>
1
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
14.07.2017, 18:11  [ТС]
Jodah, а так и не понял как обрабатывать ip адрес. Итак, у нас есть строка
PHP
1
$ip = $_SERVER['REMOTE_ADDR'];
надо отвправить запрос в БД
PHP
1
 mysql_query("INSERT INTO users SET name='$name',familiya='$familiya',login='$login',telephonenumber=SHA1('$telephonenumber'),email=SHA1('$email'),password=SHA1('$password'),ip='$ip'");
, а как хранить ip, точнее тип данных?
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
14.07.2017, 18:23
varchar(25)
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
14.07.2017, 19:32
Uni_programist,
PHP
1
var_dump($ip);
что покажет? Не вижу проблем в коде.
1
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
20.07.2017, 21:42  [ТС]
plohoyav, спасибо огромное за помощь, теперь все выводится как надо.

Добавлено через 2 минуты
Jodah, спасибо и Вам за помощь. Остался один маленький вопросик: почему Вы рекомендуете хранить только пароль в SHA1?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
20.07.2017, 21:59
Uni_programist, встречный вопрос, какой смысл хешировать телефон и e-mail? Если вы просите пользователя указать эти данные, очевидно вы их собираете для дальнейшего использования - звонков и отправки почты. Как вы будете отправлять сообщения, если у вас вместо почты только хеш? Никак.

А пароль хешировать нужно, чтобы в случае утечки базы (в основном из-за человеческого фактора) злоумышленник не получил пароли юзеров в открытом виде.
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
28.07.2017, 17:56  [ТС]
Jodah, Логично, хотя бы я б наверное хешировал бы данные далее, но не сразу после регистрации, а в основном после регистрации часиков через 10-12. Однако, это становится трудоемкой работой (наверное). Так что от идеи отказываюсь. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2017, 17:56
Помогаю со студенческими работами здесь

Не отображается капча на форме регистрации
Использую Joomla 2.5., ReCapture При заполнении регистрационных данных и их отправке выдается сообщение &quot;Пустое значение...

Обязательные поля в форме регистрации компонента
Доброго дня! В файле php, который формирует форму регистрации есть блок выводящий обязательное поле. &lt;div...

Подскажите что не так в форме регистрации
Здравствуйте, подскажите пожалуйста что в моей форме регистрации не правильно, отправляются на почту только коментарии, остальных данных...

Как изменить шрифть в форме регистрации?
Что в &quot;properties&quot; отвечает за шрифт текста в форме? В style ввел &quot;Roboto&quot;, ничего не изменилось

Сохранение данных в форме при регистрации
Привет всем, в общем не могу найти в инете как сохранять данные в форме когда по каким-либо причинам произошла ошибка при регистрации....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru