#javascript #validation
Вопрос:
Я заставляю изменить пароль при первом входе в систему, как это:
var myInput = document.getElementById("senhanova");
var confirm = document.getElementById("senhaconfir");
var letter = document.getElementById("letter");
var capital = document.getElementById("capital");
var number = document.getElementById("number");
var length = document.getElementById("length");
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 upperCaseLetters = /[@$!%*?amp;]/g;
if(myInput.value.match(upperCaseLetters)) {
caracter.classList.remove("invalid");
caracter.classList.add("valid");
} else {
caracter.classList.remove("valid");
caracter.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");
}
}
function inserir_senha()
{
var dadosajax = {
'senhaatual' : $("#senhaatual").val(),
'senhanova' : $("#senhanova").val(),
'senhaconfir' : $("#senhaconfir").val()
};
$.ajax({
url: 'alterarsenha.php',
type: 'POST',
cache: false,
data: dadosajax,
dataType: "json",
success: function(data)
{
if (data.result){
$(".success_messages").removeClass('hide');
}else{
Swal.fire('Alerta!', data.message,'warning');
}
}
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="alteracao">
<form class="alteracao-signin" method="POST">
<h2 class="alteracao-signin-heading">Tem de alterar a sua senha.</h2>
<div class="input-wrapper"><input type="password" id="senhaatual" name="senhaatual" placeholder="Senha Atual" required><label for="senhaatual" class="fa fa-lock input-icon"></label></div>
<div class="input-wrapper"><input type="password" id="senhanova" name="senhanova" pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?amp;])[A-Za-zd@$!%*?amp;]{8,}$" title="Deve conter pelo menos um número, uma letra maiúscula e minúscula, um caractere especial e pelo menos 8 ou mais caracteres" placeholder="Nova Senha" required><label for="senhanova" class="fa fa-lock input-icon"></label></div>
<div class="input-wrapper"><input type="password" id="senhaconfir" name="senhaconfir" placeholder="Confirmar Senha" required><label for="senhaconfir" class="fa fa-lock input-icon"></label></div>
<button id="valida" class="btn btn-lg btn-primary btn-block" type="submit" onclick="inserir_senha();">Alterar</button>
</form>
</div>
<div id="message">
<h3>A senha deve conter o seguinte:</h3>
<p id="letter" class="invalid">A <b>letra </b> minúscula</p>
<p id="capital" class="invalid">A <b>letra </b> maiúscula</p>
<p id="number" class="invalid">O <b>número</b></p>
<p id="caracter" class="invalid">O <b>Caracter</b> especial</p>
<p id="length" class="invalid">Minimo <b>8 caracteres</b></p>
</div>
Входные данные проверяются, и если требования не будут выполнены, пользователь будет уведомлен об этом.
Но если вы выполните кнопку <button id="valida" class="btn btn-lg btn-primary btn-block" type="submit" onclick="inserir_senha();">Alterar</button>
, если в поле новый пароль и поле подтвердить пароль, если они совпадают, даже если вы не соответствуете требованиям, выполните функцию insert_senha() и измените пароль в базе данных.
Он должен выполнять эту функцию только тогда, когда пользователь выполняет все требования
Комментарии:
1. Хорошо, так в чем же ваш вопрос, пожалуйста?
2. @RiggsFolly Проблема в том, что в новый пароль я прошу вставить 8 символов и выполнить эти требования, но если пользователь вводит в новый пароль только 3 символа, а в поле подтверждения пароля также 3 символа, равные предыдущему полю, таким образом, вставляет его в базу данных, меняя пароль, и должен уйти только после выполнения всех требований
3. @RiggsFolly Я намерен разрешить вам выполнять функцию только после того, как все предыдущие шаги будут проверены во входных данных. Если вы все же измените свой пароль, если вы все еще не соответствуете требованиям, обязательно запустите эту
inserir_senha()
функцию. Вы можете помочь?4. Пожалуйста, отредактируйте свой вопрос, чтобы включить в него свой вопрос и другие детали. Некоторые пользователи не будут утруждать себя поиском комментариев, чтобы найти то, о чем вы просите.
5. Я должен добавить, что вы никогда не должны доверять проверке на стороне клиента. Вы всегда должны проверять значения в серверной части, чтобы быть уверенным, так как коду на стороне клиента нельзя доверять. Но если вы хотите проверить, чтобы показывать ошибки на странице без вызова, в этом случае вам следует обернуть функцию
inherit_senha
функцией проверки. Также вы проверяетеonkeyup
событие на действительность. Может быть, вы можете сохранить состояние валидности в переменной, чтобы вы могли проверить его по щелчку, напримерisAllInputsValid amp;amp; inherit_senha()
Ответ №1:
Решение, которое я нашел для этой проверки, было в php.
Перед вставкой в базу данных я проверяю, содержит ли переменная заглавную букву, строчный регистр, число, специальный символ и содержит ли она не менее 8 символов, подобных этому:
$ucl = preg_match('/[A-Z]/', $senhanova); // Uppercase Letter
$lcl = preg_match('/[a-z]/', $senhanova); // Lowercase Letter
$Dig = preg_match('/d/', $senhanova); // Numeral
$nos = preg_match('/[@$!%*?amp;]/', $senhanova); // Non-alpha/num characters (allows underscore)
if (password_verify($senhaatual, $Id_valor) amp;amp; $senhanova == $senhaconfir amp;amp; strlen($senhanova) >= '8' amp;amp; strlen($senhaconfir) >= '8' amp;amp; $ucl amp;amp; $lcl amp;amp; $Dig amp;amp; $nos) {
$stmt = 'UPDATE wp_inf.inf_users SET user_pass= ?, status= ? WHERE ID = ? ';
$stmt = $conn->prepare($stmt);
$stmt = $stmt->execute([$senhafinal, $status, $id_util]);
}