Баги и ошибки | мистика с кодом
Тема закрыта by
pyrokinesis
Причина: Решено
Причина: Решено
со своего старого сайта вставил код заполнение имени при регистрации, в свой новый сайт , сделал все идентично но прикол заполняю код, пишет ошибку (не заполнено ваше имя)
но прикол со старого сайта все норм работает, на новом нет хотя все одинаково (((
кто может посмотреть может я тупой , я хз не вьеду нечего
но прикол со старого сайта все норм работает, на новом нет хотя все одинаково (((
кто может посмотреть может я тупой , я хз не вьеду нечего
мож архив пойдет , reg.php это старый файл
вот
Разберу проблему с заполнением имени при регистрации и предложу исправленный код.
Основные проблемы в коде
Некорректная проверка имени — условие if (isset($_POST['ank_name']) && preg_match(...)) выполняется уже после попытки записи в БД, из‑за чего возможна запись без проверки.
Отсутствие обработки ошибки — если имя не проходит проверку, ошибка добавляется в $err, но код продолжает выполнение.
Ошибки в HTML-разметке — некорректные атрибуты type в кнопках (type=/button').
Устаревшие функции MySQL — mysql_query и др. не поддерживаются в современных версиях PHP.
Проблемы с безопасностью — недостаточная фильтрация данных перед записью в БД.
Исправленный код
Ниже — ключевые фрагменты с исправлениями. Замените соответствующие участки в вашем файле.
1. Проверка имени (выполняется до записи в БД)
if (!isset($_POST['ank_name']) || trim($_POST['ank_name']) === '') {
$err[] = 'Необходимо заполнить ваше имя';
} elseif (strlen2(trim($_POST['ank_name'])) < 3) {
$err[] = 'Имя должно содержать не менее 3 символов';
} elseif (!preg_match('#^[A-zА-я\s\-]+$#ui', trim($_POST['ank_name']))) {
$err[] = 'Неверный формат имени. Разрешены только буквы, пробелы и дефисы';
}
2. Исправленная HTML-форма (поле имени)
Замените блок с полем имени на следующий код:
echo '<div class="group">';
echo '<div style="float:right;"><img src="style/svg/o.svg" alt=" " /></div>';
echo '<p style="text-align:left;">Ваше имя:</p>';
echo '<input class="input" type="text" name="ank_name" value="' . (isset($_POST['ank_name']) ? htmlspecialchars($_POST['ank_name']) : '') . '" size="" maxlength="30" />';
echo '</div>';
3. Исправленные кнопки в форме
Замените все строки с кнопками вида:
<button type=/button' class='butt buttonBlue'/>...
на корректный вариант:
<button type="submit" class="butt buttonBlue">Зарегистрироваться
<div class="ripples buttonRipples"><span class="ripplesCircle"></span></div>
</button>
4. Логика обработки данных (после проверок)
Переместите блок записи имени в БД после всех проверок и убедитесь, что $err пуст:
if (!isset($err)) {
// ... другие операции (запись в БД и т. д.)
if (isset($_POST['ank_name']) && !empty(trim($_POST['ank_name']))) {
$user['ank_name'] = trim($_POST['ank_name']);
mysql_query("UPDATE `user` SET `ank_name` = '" . my_esc($user['ank_name']) . "' WHERE `id` = '$user[id]' LIMIT 1");
}
// ... продолжение логики регистрации
}
5. Вывод ошибок
Добавьте функцию err() для отображения ошибок перед формой:
function err() {
global $err;
if (isset($err) && is_array($err)) {
foreach ($err as $error) {
echo '<div class="error">' . htmlspecialchars($error) . '</div>';
}
}
}
// Вызовите err() перед выводом формы:
err();
echo "<div class='container'>";
// ... вывод формы
Дополнительные рекомендации
Миграция с MySQL на MySQLi/PDO: замените устаревшие функции mysql_* на mysqli_* или PDO. Пример:
$result = mysqli_query($db, "SELECT COUNT(*) FROM `user` WHERE `nick` = '" . mysqli_real_escape_string($db, $_POST['nick']) . "'");
Валидация на клиенте: добавьте HTML5-атрибуты для поля имени:
<input type="text" name="ank_name" required minlength="3" maxlength="30">
CSRF-защита: добавьте токен в форму:
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// В форме:
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
// При обработке:
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
$err[] = 'Ошибка безопасности. Повторите попытку.';
}
Краткий итог исправлений
Проверка имени выполняется до записи в БД.
Ошибки отображаются перед формой.
HTML-код кнопок и полей исправлен.
Добавлена фильтрация ввода (trim, htmlspecialchars).
Рекомендована миграция на современные методы работы с БД и защита от CSRF.
Если хотите, могу подробнее разобрать какой‑то конкретный участок кода или помочь с адаптацией под PDO/MySQLi!
Вот так ИИ считает, но и добавил некоторый код по безопасности и вывод ошибок с обработкой.
Основные проблемы в коде
Некорректная проверка имени — условие if (isset($_POST['ank_name']) && preg_match(...)) выполняется уже после попытки записи в БД, из‑за чего возможна запись без проверки.
Отсутствие обработки ошибки — если имя не проходит проверку, ошибка добавляется в $err, но код продолжает выполнение.
Ошибки в HTML-разметке — некорректные атрибуты type в кнопках (type=/button').
Устаревшие функции MySQL — mysql_query и др. не поддерживаются в современных версиях PHP.
Проблемы с безопасностью — недостаточная фильтрация данных перед записью в БД.
Исправленный код
Ниже — ключевые фрагменты с исправлениями. Замените соответствующие участки в вашем файле.
1. Проверка имени (выполняется до записи в БД)
if (!isset($_POST['ank_name']) || trim($_POST['ank_name']) === '') {
$err[] = 'Необходимо заполнить ваше имя';
} elseif (strlen2(trim($_POST['ank_name'])) < 3) {
$err[] = 'Имя должно содержать не менее 3 символов';
} elseif (!preg_match('#^[A-zА-я\s\-]+$#ui', trim($_POST['ank_name']))) {
$err[] = 'Неверный формат имени. Разрешены только буквы, пробелы и дефисы';
}
2. Исправленная HTML-форма (поле имени)
Замените блок с полем имени на следующий код:
echo '<div class="group">';
echo '<div style="float:right;"><img src="style/svg/o.svg" alt=" " /></div>';
echo '<p style="text-align:left;">Ваше имя:</p>';
echo '<input class="input" type="text" name="ank_name" value="' . (isset($_POST['ank_name']) ? htmlspecialchars($_POST['ank_name']) : '') . '" size="" maxlength="30" />';
echo '</div>';
3. Исправленные кнопки в форме
Замените все строки с кнопками вида:
<button type=/button' class='butt buttonBlue'/>...
на корректный вариант:
<button type="submit" class="butt buttonBlue">Зарегистрироваться
<div class="ripples buttonRipples"><span class="ripplesCircle"></span></div>
</button>
4. Логика обработки данных (после проверок)
Переместите блок записи имени в БД после всех проверок и убедитесь, что $err пуст:
if (!isset($err)) {
// ... другие операции (запись в БД и т. д.)
if (isset($_POST['ank_name']) && !empty(trim($_POST['ank_name']))) {
$user['ank_name'] = trim($_POST['ank_name']);
mysql_query("UPDATE `user` SET `ank_name` = '" . my_esc($user['ank_name']) . "' WHERE `id` = '$user[id]' LIMIT 1");
}
// ... продолжение логики регистрации
}
5. Вывод ошибок
Добавьте функцию err() для отображения ошибок перед формой:
function err() {
global $err;
if (isset($err) && is_array($err)) {
foreach ($err as $error) {
echo '<div class="error">' . htmlspecialchars($error) . '</div>';
}
}
}
// Вызовите err() перед выводом формы:
err();
echo "<div class='container'>";
// ... вывод формы
Дополнительные рекомендации
Миграция с MySQL на MySQLi/PDO: замените устаревшие функции mysql_* на mysqli_* или PDO. Пример:
$result = mysqli_query($db, "SELECT COUNT(*) FROM `user` WHERE `nick` = '" . mysqli_real_escape_string($db, $_POST['nick']) . "'");
Валидация на клиенте: добавьте HTML5-атрибуты для поля имени:
<input type="text" name="ank_name" required minlength="3" maxlength="30">
CSRF-защита: добавьте токен в форму:
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// В форме:
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
// При обработке:
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
$err[] = 'Ошибка безопасности. Повторите попытку.';
}
Краткий итог исправлений
Проверка имени выполняется до записи в БД.
Ошибки отображаются перед формой.
HTML-код кнопок и полей исправлен.
Добавлена фильтрация ввода (trim, htmlspecialchars).
Рекомендована миграция на современные методы работы с БД и защита от CSRF.
Если хотите, могу подробнее разобрать какой‑то конкретный участок кода или помочь с адаптацией под PDO/MySQLi!
Вот так ИИ считает, но и добавил некоторый код по безопасности и вывод ошибок с обработкой.