2015-09-20 5 views
0

Я довольно новичок в разработке для Интернета, и сейчас я работаю над формой регистрации для веб-сайта, чтобы сайт мог принимать новых пользователей. Создание формы до сих пор было довольно безболезненным с помощью большого интернет-Интернета, но недавно я столкнулся с проблемой того, как проверять определенную информацию в моей форме перед отправкой для реального запроса к базе данных.Проблемы с подтверждением формы регистрации

Поэтому у меня есть следующий вид:

Form

И входные поля работают как задумано большую часть пути. Они мигают красным цветом, если они не заполнены и просить ввода:

Flashing

, когда дело доходит до полей E-mail Кроме. Они должны быть одинаковыми, а не только действительными электронными письмами, как предполагает сайт. Поэтому, даже если у вас есть два совершенно разных письма в этих двух областях, если они действительны, электронные письма будут приняты.

Ниже приведен HTML за формой:

<!-- Container Start --> 
<div id="container"> 
    <div id="container_body"> 
     <div> 
      <h2 class="form_title">Sign Up for a Collectors Account Here!</h2> 
     </div> 
     <!-- Form Start --> 
     <div id="form_name"> 
      <div class="FirstAndLastName"> 
       <form name="form"> 
       <div id="errorBox"></div> 
        <input type="text" required value="" name="Name" value="" placeholder="First Name" class="input_name"> 
        <input type="text" required value="" name="LastName" value="" placeholder="Last Name" class="input_name"> 
      </div> 
       <div id="email_form"> 
        <input type="email" required value="" name="Email" value="" placeholder="Your Email" class="input_email"> 
       </div> 
       <div id="Re_email_form"> 
        <input type="email" required value="" name="enterEmail" value="" placeholder="Re-enter Email" class="input_Re_email"> 
       </div> 
       <div id="password_form"> 
        <input type="password" required value="" name="Password" value="" placeholder="Your Password Here" class="input_password"> 
       </div> 
       <div> 
        <script> 
         $(function() { 
          $("#datepicker").datepicker({ 
           inline: true, 
           showOtherMonths: true, 
           dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] 
          }); 
         }); 
        </script> 
        <h3 class="birthday_title">Birthday</h3> 
        <input type="text" required value="" id="datepicker"> 
       </div> 
       <div id="radio_button"> 
        <input type="radio" name="radiobutton" value="Female" checked="true"> 
        <label>Female</label> 
        &nbsp;&nbsp;&nbsp; 
        <input type="radio" name="radiobutton" value="Male"> 
        <label>Male</label> 
       </div> 
       <div> 
        <input type="submit" value="Sign Up" onclick="Submit()"> 
       </div> 
      </form> 
     </div> 
     <!-- Form Ends --> 
    </div> 
</div> 
<!-- Container Ends --> 

А вот JavaScript Я использую:

function Submit() { 
    var myForm = document.forms[0]; 
    var MyFormElements = myForm.elements; 
    for (var i in myFormElements) { 
     var element = myFormElements[i]; 
     if (!element.willValidate) { 
      continue; 
     } 
     element.addEventListener('invalid', function (e) { 
      document.getElementById("errorBox").innerHTML = "Invalid Input Detected"; 
      myForm.classList.add('validated'); 
     }); 
    } 
    if($('#Re_email_form').attr('value') != $('#email_form').attr('value')) { 
     event.preventDefault(); 
    } 
} 

Таким образом, вопрос, как я могу сделать эту проверку формы, если и по электронной почте поля содержат одни и те же значения и останавливают процесс отправки с сообщением об ошибке, если они не совпадают?

У меня также есть второй вопрос, который немного не соответствует теме. Когда вы отправляете эту форму, кажется, что пароль хранится как обычный текст, даже если это сделано в поле пароля. Я понимаю, что веб-сайт, на котором я работаю, будет иметь сертификат SHA-2, который также будет сопровождать такие вещи, как вход в систему Facebook (что делает это обязательным), но как мне обойти это? Использовать алгоритм для шифрования, прежде чем пытаться отправить его в качестве нового пользователя в моей базе данных?

Опять же, я довольно новичок в этом, поэтому заранее приношу свои извинения за достойный код и практику. Вся помощь, которую я могу получить, очень приветствуется.

+1

'атр ('значение')' не то же самое, что и свойство элемента 'value' что вы используете 'val()' ...используйте последний элемент управления формы – charlietfl

+0

А, это объяснит это. Хорошо знать. Благодаря! – OmniOwl

+0

в основном атрибут не будет обновляться при вводе пользователя – charlietfl

ответ

4

Вы должны изменить свое последнее if заявление к этому -

if($('#Re_email_form').find('input').val() != $('#email_form').find('input').val()) { 
    alert('Emails not matching!'); 
    return false; // cancels the submission process 
} 
+0

Могу ли я показать предупреждение (как на втором рисунке) в поле «Повторить ввод» вместо того, чтобы сайт показывал окно предупреждения? – OmniOwl

+0

@ Vipar Я не эксперт в JS (я не знаю, возможно ли это или нет), поэтому вам следует обратиться за помощью в Google или задать другой вопрос по этому вопросу. –

1

Вот версия немного лучше производительность мудрым и в чистом JS для ясности: D

Here is the JSFiddle demo

Скриншот:

enter image description here

// HTML

<html> 
<head> 
    <link rel="stylesheet"href="index.css"> 
    <script src="index.js"></script> 
</head> 
<body> 
    <form> 
     <input type="email" placeholder="email" name="email" spellcheck="false" autocomplete="off"> 
     <input type="email" placeholder="verify email" name="verify_email" spellcheck="false" autocomplete="off"> 
     <input type="password" placeholder="password" name="pass" onkeypress="keyListener(event,this);"> 
     <button type="button" onclick="auth(this);">Sign In</button> 
    </form> 
    <mark id="form-msg"></mark> 
</body> 
</html> 

// JS

function auth(ele){ 
    var emails = new Array(); 
    var msg = document.getElementById("form-msg"); 
    var form = ele.parentNode.children; 
    for(var i=0; i<form.length; i++){ 
     if(form[i].type === "email"){ 
      emails.push(form[i]); 
     } 
    } 
    if(emails[0].value !== emails[1].value){ 
     msg.innerHTML = "Emails don't match"; 
    } 
    else{ 
     var client = new XMLHttpRequest(); 
     var data = new FormData(); 
     var form = ele.parentNode.children; 
     for(var i=0; i<form.length; i++){ 
      if(form[i].type !== "button") { 
       data.append(form[i].name, form[i].value); 
      } 
     } 
     client.open("POST", "signin.php"); //your php page 
     client.send(data); 
     client.onreadystatechange = function(){ 
      if(client.readyState == 4){ 
       if(client.response = "success"){ 
        msg.innerHTML = "success"; 
        setTimeout(function(){ 
         window.location = "http://facebook.com"; //redirect to account home page 
        }, 2000); 
        console.log(client.response); 
       } 
      } 
     } 
    } 
} 
function keyListener(e,ele){ 
    if(e.keyCode === 13){ 
     auth(ele); 
    } 
} 

// CSS

body{ 
    margin: 0 !important; 
    width: 100vw; 
    height: 100vh; 
    background: #1E67CB; 

    display: -webkit-flex; 
    display: flex; 

    -webkit-flex-direction: column; 
    flex-direction: column; 


    -webkit-justify-content: center; 
    justify-content: center; 
} 
form{ 
    cursor: default !important; 

    display: -webkit-flex; 
    display: flex; 

    -webkit-justify-content: center; 
    justify-content: center; 

    -webkit-align-self: center; 
    align-self: center; 

    -webkit-flex-direction: column; 
    flex-direction: column; 

    background: #ECF0F1; 

    -webkit-box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.40); 
    box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.40); 
    -webkit-border-radius: 0.3em; 
    border-radius: 0.3em; 
    padding: 1.3em; 
} 
form>input{ 
    width: 22.1em;; 
    height: 2.5em; 
    margin: 0.2em 0; 
    font-size: 1em; 
    -webkit-font-smoothing: antialiased; 
    font-family: HelveticaNeue-Light,"Helevetica Neue",Helvetica,Arial; 
    text-align: center; 
    border: 1px solid #d5dadc; 
    -webkit-border-radius: 2px; 
    border-radius: 2px; 
    color: #7C7C7C; 
    outline: none; 
} 
#form-msg{ 
    display: -webkit-flex; 
    display: flex; 
    -webkit-justify-content: center; 
    justify-content: center; 
    -webkit-align-self: center; 
    align-self: center; 
    height: 1.5em; 
    margin: 1.5em; 
    font-size: 1em; 
    color: #fff; 
    -webkit-font-smoothing: antialiased; 
    font-family: HelveticaNeue-Light,"Helevetica Neue",Helvetica,Arial; 
    background: none; 
} 
form>button{ 
    width: 22.35em; 
    height: 2.5em; 
    margin: 0.2em 0; 
    padding: 0; 
    font-size: 1em; 
    -webkit-font-smoothing: antialiased; 
    font-family: HelveticaNeue-Light,"Helevetica Neue",Helvetica,Arial; 
    cursor: pointer; 
    outline: none; 
    border: none; 
    color: #fff; 
    background: #2ECC71; 
    border-radius: 2px; 
    -webkit-border-radius: 2px; 
} 
form>button:hover{ 
    background: #40D47E; 
} 
form>button:active{ 
    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 
    -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 
} 
.valid{ 
    border: 1px solid #2ECC71; 
} 
.invalid{ 
    border: 1px solid red; 
} 
+0

Ну, я узнал, что если вы просто нажмете «Войти», не помещая ничего в полях электронной почты, это пройдет, поскольку оба они одинаковы. Спасибо, хотя :) – OmniOwl

+0

Ха-ха-ха-ха-да, хелла забыла проверить пустое ... вы должны использовать эту логику, хотя для прокрутки данных формы и добавления к объекту formData. –

Смежные вопросы