Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка пароля
 
 автор: Freddie_X   (06.02.2008 в 20:07)   письмо автору
 
 

На некоторых сайтах есть проверка правильности ввода пароля при регистрации (совпадения паролей из двух полей).
При вводе пароля во второе поле проверяется, совпадает ли пароль из первого и второго поля.
И писать текст "Правильно" либо "Неправильно". Но этот текст писать только, если во втором поле количество символов больше или равно количеству символов в первом поле.
В яваскрипте не разбираюсь, поэтому прошу помощи - написать скриптик, как это делается.

   
 
 автор: sim5   (06.02.2008 в 20:30)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 20:07)
 


<script>
function checkPass() {
if (document.getElementById('pass').value != document.getElementById('passch').value) {
    alert('No check!')
    return false;
  } else return true;
}

</script>
<form action="" method="post" onsubmit="return checkPass()">
<input type="password" id="pass">
<input type="password" id="passch">
<input type="submit" value="Send">
</form>

   
 
 автор: Freddie_X   (06.02.2008 в 20:38)   письмо автору
 
   для: sim5   (06.02.2008 в 20:30)
 

Не совсем то, что нужно! Хотелось бы, чтобы проверка шла не при нажатии Сабмита, а прямо на лету.

   
 
 автор: sim5   (06.02.2008 в 21:11)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 20:38)
 

А зачем? Вас не будет раздражать предупреждения при каждом не верно введенном симоле?

   
 
 автор: Freddie_X   (06.02.2008 в 21:17)   письмо автору
 
   для: sim5   (06.02.2008 в 21:11)
 

Поэтому я и прошу скрипт, который выводит сообщение, только если количество символов во втором поле больше или равно кол-ву символов в первом поле.
Внимательней надо читать! :)

И может, не правильно выразился, мне нужен не alert(), а вывод текста в браузер.

   
 
 автор: CNTv2.0   (06.02.2008 в 21:36)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 21:17)
 

>больше или равно кол-ву символов в первом поле - так не делается нигде, ибо глупо этою

Обратите внимание, что ввод повторного пароля везде(где он есть!) расположен никак не последним перед кнопкой "Зарегистрировать" - там есть ещё несколько полей, требующих заполнения.
И ещё обратите внимание, что сообщение ("ОК" или "Ошибка!") появляется не в момент окончания ввода повторного пароля, а в момент, когда поле повторного пароля теряет фокус.
Т.е. скрипт, предложенный вам, можно переделать так:
<script>
function checkPass ()
{
with (document)
getElementById ('info').innerHTML = (getElementById ('pass').value != getElementById ('passch').value) ?
   'Пароль повторен неверно!' : 'OK!';
}
</script>
<form>
Password: <input type="password" id="pass"><br>
Repeat password: <input type="password" id="passch" onchange="checkPass ()">
<b style="color: red" id="info"></b><br>
Field1: <input><br>
Field2: <input><br>
Field3: <input><br>
<input type="submit" value="Send">
</form>

   
 
 автор: Freddie_X   (06.02.2008 в 21:48)   письмо автору
 
   для: CNTv2.0   (06.02.2008 в 21:36)
 

Скрипт, работает, спасибо!
Но я хотел бы знать, можно ли такое сделать, но чтобы надпись "ОК" или "Не ОК" появлялась сразу, как только во втором поле сивмолов будет столько же, сколько и в первом?
Допустим, ввели в pass 5 символов, далее вводим символы в passch. Как только в passch есть 5 символов (без onchange) - проводится проверка и выдаётся сообщение "ОК" или "Не ОК". Или это не реализуемо с помощью ЯваСкрипта?

   
 
 автор: CNTv2.0   (06.02.2008 в 22:16)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 21:48)
 

Я же вам написал, что это глупо, и что так никто не делает.
Вы, видимо, не поняли - почему это ГЛУПО?

Объясняю.
В поле <input type="password"> значение пароля можно ввести как с клавиатуры, вбивая по одному символу, так и ещё ТРЕМЯ способами (вставить из буфера с помощью мышки, вставить из буфера с помощью панели управления браузера, вставить из буфера с помощью клавиш Ctrl+V)

В Эксплорере есть аж два события - onpaste и onpropertychange - позволяющие отследить, что значение в <input> изменилось, а вот в прочих браузерах - НЕТ ТАКОЙ ВОЗМОЖНОСТИ.

Ну и как - мысль поняли?

Имеем 4 варианта ввода.
Имеем 5 популярных браузеров (Эксплорер, Мозилла, Опера, Сафари, Нетскейп).
Только в одном из браузеров можем отследить все 4 варианта ввода.
А в остальных 4-х браузерах можем отследить только один вариант ввода (клавиатурный).

Т.е. из 4*5 = 20 случаев сочетаний типа ввода и типа браузера работать правильно будет только в 8-и случаях, а в 12-ти остальных случаях браузеры никак не будут реагировать на скрипт.
Что-то делать при таких пропорциях (8 против 12) - глупо.

   
 
 автор: Freddie_X   (06.02.2008 в 22:18)   письмо автору
 
   для: CNTv2.0   (06.02.2008 в 22:16)
 

Ясно, спасибо за разъяснение!
Но я всё таки видел на некоторых сайтах такую фишку! И в Опере, например, она работала!

   
 
 автор: CNTv2.0   (06.02.2008 в 22:30)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 22:18)
 

В Опере, как и вообще во всех популярных браузерах, можно отследить клавиатурный ввод (о чём я и написал ранее).

То, что где-то кто-то реализовал отслеживание клавиатурного ввода - я не сомневаюсь (ибо это просто).
Ведь недаром в песне поётся:
"Я другой такой страны не знаю
Где так много разных дураков..."


Если хотите присоединиться к их числу - я не возражаю:
<script>
function checkPass (x)
{
with (document)
if (x)
getElementById ('info').innerHTML = (getElementById ('pass').value != getElementById ('passch').value) ?
   'Пароль повторен неверно!' : 'OK!';
else
if (getElementById ('passch').value.length >= getElementById ('pass').value.length)
getElementById ('info').innerHTML = (getElementById ('pass').value != getElementById ('passch').value) ?
   'Пароль повторен неверно!' : 'OK!';
}
</script>
<form>
Password: <input type="password" id="pass"><br>
Repeat password: <input type="password" id="passch" onchange="checkPass (1)" onkeyup="checkPass (0)">
<b style="color: red" id="info"></b><br>
Field1: <input><br>
Field2: <input><br>
Field3: <input><br>
<input type="submit" value="Send">
</form>


А теперь попробуйте в любом браузере вставить повтор НЕВЕРНОГО ПАРОЛЯ (большего по количеству символов) мышкой из буфера.
Ну и?
Когда сработает?
Только тогда, когда фокус покинет этот инпут.
И спрашивается - "зачем платить больше?" :-)

   
 
 автор: Freddie_X   (06.02.2008 в 22:32)   письмо автору
 
   для: CNTv2.0   (06.02.2008 в 22:30)
 

Спасибо за оскобление :)))))

   
 
 автор: CNTv2.0   (06.02.2008 в 22:36)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 22:32)
 

Пожалуйста.
И радуйтесь, что это было не "оскопление" :-)

   
 
 автор: sim5   (07.02.2008 в 06:36)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 22:18)
 

Лучше тогда добавить проверку на использования вводимого логина.

   
 
 автор: sim5   (06.02.2008 в 21:37)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 21:17)
 

Если пароли равны, то значит и число символов одинаково, в тоже время при одинаковом числе символов, значение полей может быть не равно. Вывод текста во что?

   
 
 автор: Антоха   (06.02.2008 в 22:11)   письмо автору
 
   для: sim5   (06.02.2008 в 21:37)
 

Надо всего лишь заменить onchange, на onkeyup, и получите тот результат, который вам нужен, но в словах CNTv2.0 есть намек, что такие способы могут иногда не сработать.
Скорее всего вам нужно было вот так


<script> 
function checkPass() { 
  with(document) 
    getElementById('info').innerHTML = (getElementById('pass').value != getElementById('passch').value) ? '' : 'OK!'; 

</script> 
<form> 
Password: <input type="password" id="pass"><br> 
Repeat password: <input type="password" id="passch" onKeyUp="checkPass()"> 
<b style="color: red" id="info"></b><br> 
Field1: <input><br> 
Field2: <input><br> 
Field3: <input><br> 
<input type="submit" value="Send"> 
</form>

Проверял в ie, opere, firefox - работает

   
 
 автор: feilx_   (10.04.2008 в 15:13)
 
   для: Антоха   (06.02.2008 в 22:11)
 

А как сделать, чтоб кнопка Send была неактивна до тех пор пока не повится правельный проль ?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования