Скрипт php для проверки имени+пароля
Есть форма авторизации, в которую пользователь вводит имя и пароль(данные должны храниться в json файле). Если введен имя и пароль, скрипт php проверяет есть ли такое имя в файле json , если есть то проверяет есть ли такой пароль в файле и если есть то выбить предупреждение что имя занято(не знаю как сделать так что бы проверяемый пароль относился конкретно к введенному имени). Если имя нету в файле то происходит его запись. Запись в файл каждый раз перезаписывается, вместо того что бы дописывать новые данные(имя, пароль). Подскажите пожалуйста как корректно сделать проверку и запись.
$name, 'Password' => $password); $new_name = json_encode($new_name, JSON_PRETTY_PRINT, FILE_APPEND); file_put_contents($file, $new_name ); $fileq = file_get_contents('users.json'); $taskList = json_decode($fileq,TRUE); //проверяем есть ли уже такое имя в файле if (in_array($name, $taskList)) < echo "Name is busy"; //если да, то не записываем >else < echo "name is empty"; //если нет-записываем >> ?>
$(document).ready(function() < $('#submit').click(function()< var name = $('#username').val(); var password = $('#password').val(); $.ajax(< type : 'POST', url : 'php/login_script.php', data : >); >); >);
Enter your name
Enter your pasword
Отслеживать
задан 6 июн 2017 в 13:51
185 2 2 серебряных знака 14 14 бронзовых знаков
Может стоит базу данных заюзать к примеру mysql или sqllite
6 июн 2017 в 14:42
@Naumov в этом то и суть, что нужно что бы запись была в json файл.
7 июн 2017 в 10:15
Зачем так извращаться?
7 июн 2017 в 14:38
@Naumov такое условие
7 июн 2017 в 14:56
А кто ввам его поставил?
7 июн 2017 в 14:59
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Файл с пользователями users.json
if(!isset($_POST['user'])||!isset($_POST['pass'])) < echo "Username and password required"; die(); >$file = "users.json"; $users = json_decode(file_get_contents($file), true); $name = $_POST['user']; $password = $_POST['pass']; if(isset($users[$name]) < if($users[$name] === $password)< echo "OK"; >else < echo "Wrong password" >> else
PHP, регистрация, проверка полей?
Знаю что нет проверки на длину и еще много чего но можно ли писать проверки так?
if($_POST['submit']) < $salt = 'Здесь будет 32 рандомных символа'; $login = $_POST['login']; $pass1 = hash('sha256', $_POST['password'].$salt); $pass2 = hash('sha256', $_POST['password2'].$salt); // Проверка заполненности и подобия паролей. if(!empty($pass1 AND $pass2) && $pass1==$pass2)< $passcheck = true; >else < $passcheck = false; $errors[] = "Ошибка! Пароли не совпадают или поля не заполнены!"; >// Проверка заполнен ли логин. if(!empty($login)) < $logincheck = true; >else < $logincheck = false; $errors[] = "Ошибка! Заполните поле Логин!"; >//Итоговая проверка корректности всех полей. if($passcheck == true && $logincheck == true) < echo "Процесс регистрации. "; >else< echo "Правильно заполните поля!" . "
"; // Выводим список ошибок из массива $errors[]. foreach($errors as $error)< echo $error . "
"; > > >
- Вопрос задан более трёх лет назад
- 3030 просмотров
2 комментария
Простой 2 комментария
Нет нельзя. Используйте https://symfony.com/doc/current/components/validat.

Сергей delphinpro @delphinpro Куратор тега PHP
В целом можно, но лучше написать подсистему валидации, чтобы код говорил сам за себя, что он делает, а детали реализации были скрыты.
public function doLogin(Request $request, Response $response, $args) < $form = new Form($request); $form->addField(new Field('username')) ->assert(Assert::notEmpty('Это обязательное поле')); $form->addField(new Field('password')) ->assert(Assert::notEmpty('Это обязательное поле')); $form->validate(); if ($form->isValid()) < // OK >>
Решения вопроса 2

ThunderCat @ThunderCat Куратор тега PHP
1) нет смысла хэшить пароли для сравнения, тем более не нужно использовать hash для шифрования паролей, есть специальные функции для этого.
2) Для логина используются проверки регулярками, в соответствии с вашими условиями(длинна, символы, латиница, тире. ) + наличие такого логина в базе(на занятость)
3) нормальные сервисы требуют емэйл для подтверждения регистрации.
4) как верно заметил BD_ l3ftoverZ!, правильнее создать вначале пустой массив ошибок, а затем его в конце проверить, если он пуст — все ок, если есть ошибки — передать в представление и вывести в форму регистрации.
проверка пароля
Доброго времени суток есть скрипт проверки пароля все работает нормально, но есть одно но, не могу никак сделать что бы если пароль был пустой до данные оставались бы старые, вернее мешает следующая проверка на количество введенных символов, вообщем как сделать что бы если пароль пустой то добавляется старый пароль и проверка на количество символов не осуществляется
1 2 3 4 5 6 7 8 9 10 11 12 13
if ($password == '') { $password=$rowed['password']; $result4 = $conn->query("UPDATE users SET password='$password' WHERE email='$old_email'");//если пароль не введен, то оставляем старый echo ".$_SESSION['id']."'>Ваш пароль изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то .$_SESSION['id']."'>нажмите сюда.";//отправляем обратно на его страницу } if (isset($_POST['password'])) //Если существует пароль { $password = $_POST['password']; $password = stripslashes($password);$password = htmlspecialchars($password);$password = trim($password);//удаляем все лишнее if (strlen($password) 3 or strlen($password) > 15) {//проверка на количество символов echo ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев }
Старые данные добавляются но все равно осуществляется проверка на количество введенных символов
Как сделать — Проверку пароля
Узнать, как создать форму проверки пароля с помощью CSS и JavaScript.
Проверка пароля
Создание формы проверки пароля
Шаг 1) Добавить HTML:
Пример
» title=»Должно содержать по крайней мере одно число, одну заглавную и строчную буквы, а также не менее 8 и более символов» required>
Пароль должен содержать следующее:
буква
буква
Примечание: Мы используем атрибут pattern (с регулярным выражением) внутри поля password, чтобы установить ограничение для отправки формы: она должна содержать 8 или более символов, которые имеют по крайней мере одно число, а также одну прописную и строчную букву.
Шаг 2) Добавить CSS:
Style the input fields and the message box:
Пример
/* Стиль всех полей ввода */
input <
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-top: 6px;
margin-bottom: 16px;
>
/* Стиль кнопки «Отправить» */
input[type=submit] <
background-color: #4CAF50;
color: white;
>
/* Стиль контейнера для входных данных */
.container <
background-color: #f1f1f1;
padding: 20px;
>
/* Окно сообщения отображается, когда пользователь нажимает на поле пароля */
#message <
display:none;
background: #f1f1f1;
color: #000;
position: relative;
padding: 20px;
margin-top: 10px;
>
#message p <
padding: 10px 35px;
font-size: 18px;
>
/* Добавить зеленый цвет текста и галочка, когда требования верны */
.valid <
color: green;
>
.valid:before <
position: relative;
left: -35px;
content: «✔»;
>
/* Добавить красный цвет текста и собой «x» и значок, когда требования не правы */
.invalid <
color: red;
>
.invalid:before <
position: relative;
left: -35px;
content: «✖»;
>
Шаг 3) Добавить JavaScript:
Пример
// Когда пользователь нажимает на поле Пароль, отображается окно сообщения
myInput.onfocus = function() <
document.getElementById(«message»).style.display = «block»;
>
// Когда пользователь щелкает за пределами поля пароля, скрыть окно сообщения
myInput.onblur = function() <
document.getElementById(«message»).style.display = «none»;
>
// Когда пользователь начинает вводить что-то в поле пароля
myInput.onkeyup = function() <
// Проверка строчных букв
var lowerCaseLetters = /[a-z]/g;
if(myInput.value.match(lowerCaseLetters)) <
letter.classList.remove(«invalid»);
letter.classList.add(«valid»);
> else <
letter.classList.remove(«valid»);
letter.classList.add(«invalid»);
>
// Проверка заглавных букв
var upperCaseLetters = /[A-Z]/g;
if(myInput.value.match(upperCaseLetters)) <
capital.classList.remove(«invalid»);
capital.classList.add(«valid»);
> else <
capital.classList.remove(«valid»);
capital.classList.add(«invalid»);
>
// Проверка чисел
var numbers = /[0-9]/g;
if(myInput.value.match(numbers)) <
number.classList.remove(«invalid»);
number.classList.add(«valid»);
> else <
number.classList.remove(«valid»);
number.classList.add(«invalid»);
>
// Проверить длину
if(myInput.value.length >= 8) <
length.classList.remove(«invalid»);
length.classList.add(«valid»);
> else <
length.classList.remove(«valid»);
length.classList.add(«invalid»);
>
>
Совет: Зайдите на наш учебник HTML Форм чтобы узнать больше о формах HTML.