Форма Ф.И.О. на php

110
24 января 2021, 06:50

Есть такая страничка регистрации,нужно что бы все отправлялось по форме в базу,по моей глупости и незнамке, при вводе поля ФИО, которое должно быть вида :Иванов И.И. он выдает ошибку о том, что можно использовать буквы только русского алфавита(оно и понятно), но, даже если не использовать точки и пробелы, все аналогично. Был бы признателен за подсказку, подозреваю, что все дело в 20 строке:

if(!preg_match("/^[а-яА-Я]/",$_POST['fullname']))

<?php
$link=mysqli_connect("localhost", "root", "", "usersdb");
if(isset($_POST['submit']))
{
    $err = [];
    // проверям логин и фио
    if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))
    {
        $err[] = "Логин может состоять только из букв английского алфавита и цифр";
    }
    if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
    {
        $err[] = "Логин должен быть не меньше 3-х символов и не больше 30";
    }
    if(!preg_match("/^[а-яА-Я]/",$_POST['fullname']))
    {
        $err[] = "Ф.И.О может состоять только из букв Русского алфавита";
    }
    if(strlen($_POST['fullname']) < 3 or strlen($_POST['fullname']) > 50)
    {
        $err[] = "Ф.И.О. должно быть не меньше 3-х символов и не больше 50";
    }
    // проверяем, не сущестует ли пользователя с таким именем
    $query = mysqli_query($link, "SELECT user_id FROM users WHERE user_login='".mysqli_real_escape_string($link, $_POST['login'])."'");
    if(mysqli_num_rows($query) > 0)
    {
        $err[] = "Пользователь с таким логином уже существует в базе данных";
    }
    $query = mysqli_query($link, "SELECT user_id FROM users WHERE user_fullname='".mysqli_real_escape_string($link, $_POST['fullname'])."'");
    if(mysqli_num_rows($query) > 0)
    {
        $err[] = "Пользователь с таким Ф.И.О уже существует в базе данных";
    }
    // Если нет ошибок, то добавляем в БД нового пользователя
    if(count($err) == 0)
    {
        $fullname = $_POST['fullname'];
        $login = $_POST['login'];
        // Убераем лишние пробелы и делаем двойное хеширование
        $password = md5(md5(trim($_POST['password'])));
        mysqli_query($link,"INSERT INTO users SET user_login='".$login."', user_password='".$password."', user_fullname='".$fullname."'");
        header("Location: index.php"); exit();
    }
    else
    {
        print "<b>При регистрации произошли следующие ошибки:</b><br>";
        foreach($err AS $error)
        {
            print $error."<br>";
        }
    }
}
?>
Answer 1

Cкорее всего у вас кодировка utf-8, поэтому нужно использовать модификатор u

Для ФИО в формате Иванов И.И. будет что-то вроде:

$pattern = '/^[а-я]+\s+[a-я]\.?[а-я]\.?$/ui';

Или, жёстче, с требованием корректного регистра и точек:

$pattern = '/^[А-Я][а-я]*\s+[А-Я]\.[А-Я]\.$/u';
READ ALSO
Объединить значения с одинаковыми id

Объединить значения с одинаковыми id

Нужно объединить значения с одинаковыми idЕсть массив:

113
Авторизация по ролям php mysql

Авторизация по ролям php mysql

Есть страничка авторизации и база данных

201
Вывод изображения в письме товара prestashop

Вывод изображения в письме товара prestashop

нужна помощь знатока prestashopВозможно есть где то информация или кто то может помочь, в том как можно вывести в письме (в котором выводиться...

100