2015-11-09 2 views
1

Ну, братья, у меня возникла проблема с появлением уведомлений относительно проверки формы. Я связываю проблему с несколькими проблемами в php-коде, например массивами, определяемыми переменными $ errors и $ data. Я действительно не понимал их использования. Или, возможно, это связано с кодом jQuery.
Эти коды были основаны на учебнике веб-сайта, которое я нашел в Интернете. Кроме того, у меня нет опыта в аренах Ajax и jQuery. Возможно, вы можете решить эту простую проблему. Я даже добавил скриншоты страницы регистрации вместе со следующей страницей, которая обрабатывает соединение php с базой данных.проверка формы с красными сообщениями об ошибках не работает (php, ajax, jquery и mysql)

This is the sign up page called join_form.php

This is the processing page called register2.php

Это HTML-код:

<html> 
    <head> 
    <title> 
    This is the form page 
    </title> 
    </head> 
    <body> 
    <center> 
     <br> 
     <br> 
     <img src="images/quintz.png" width="156" height="44" alt=""/> 
     <br> 
     <br> 
     Register now 
     <br> 
     <br> 
     <div id="bugado"> 
     <form id="ajax_form" method="post" action="register2.php"> 
      <div id="usertype-group" class="form-group"> 
      <label for="usertype"> 
       You're a 
       </label> 

       <select name="usertype" class="form-control"> 
       <option value="native speaker"> 
        Native speaker 
       </option> 
       <option value="non-native speaker"> 
        Non-native speaker 
       </option> 
       </select> 
       <br> 
       <!-- errors will go here --> 
       </div> 
       <div id="username-group" class="form-group"> 
       <label for="username"> 
        Create username: 
       </label> 

       <input name="username" type="text" maxlength="30" class="form-control" placeholder="Username"> 
       <br> 
       </div> 
       <div id="email-group" class="form-group"> 
       <label for="email"> 
        Email: 
       </label> 

       <input name="email" type="text" maxlength="50" class="form-control" placeholder="Email"> 
       <br> 
       <!-- errors will go here --> 
       </div> 
       <div id="password-group" class="form-group"> 
       <label for="password"> 
        Create password: 
       </label> 

       <input type="password" name="password" class="form-control" placeholder="Password"> 
       <br> 
       </div> 
       <label> 
       Confirm password: 
       </label> 

       <input type="password" name="confirm_password" class="form-control" placeholder="Password again"> 
       <br> 
       <button type="submit" name="submit" class="btn btn-success"> 
       Submit 
       </button> 
       <span class="fa fa-arrow-right"> 
       </span> 
       <br> 
       <input name="reset" type="reset" value="Reset"> 
       </form> 
       </div> 
      </center> 
     </body> 
</html> 

Это код JQuery:

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script> 
<script language="javascript"> 
    $(document).ready(function() { 

    // process the form 
    $('#ajax_form').submit(function(event) { 

     $('.form-group').removeClass('has-error'); // remove the error class 
     $('.help-block').remove(); // remove the error text 

     // get the form data 
     // there are many ways to get this data using jQuery (you can use the class or id also) 
     var formData = { 
      'usertype'    : $('select[name="usertype"]').val(), 
      'username'    : $('input[name="username"]').val(), 
      'email'    : $('input[name="email"]').val(), 
      'password' : $('input[name="password"]').val() 
     }; 

     // process the form 
     $.ajax({ 
      type  : 'POST', // define the type of HTTP verb we want to use (POST for our form) 
      url   : $(form).attr('action'), // the url where we want to POST 
      data  : formData, // our data object 
      dataType : 'json', // what type of data do we expect back from the server 
      encode  : true 
     }) 
      // using the done promise callback 
      .done(function(data) { 

       // log data to the console so we can see 
       console.log(data); 

       // here we will handle errors and validation messages 
       if (! data.success) { 

        // handle errors for usertype --------------- 
        if (data.errors.usertype) { 
         $('#usertype-group').addClass('has-error'); // add the error class to show red select 
         $('#usertype-group').append('<div class="help-block">' + data.errors.usertype + '</div>'); // add the actual error message under our select 
        } 

        // handle errors for username --------------- 
        if (data.errors.username) { 
         $('#username-group').addClass('has-error'); // add the error class to show red input 
         $('#username-group').append('<div class="help-block">' + data.errors.username + '</div>'); // add the actual error message under our input 
        } 

        // handle errors for email --------------- 
        if (data.errors.email) { 
         $('#email-group').addClass('has-error'); // add the error class to show red input 
         $('#email-group').append('<div class="help-block">' + data.errors.email + '</div>'); // add the actual error message under our input 
        } 

        // handle errors for superhero alias --------------- 
        if (data.errors.password) { 
         $('#password-group').addClass('has-error'); // add the error class to show red input 
         $('#password-group').append('<div class="help-block">' + data.errors.password + '</div>'); // add the actual error message under our input 
        } 

       } else { 

        // ALL GOOD! just show the success message! 
        $('#ajax_form').append('<div class="alert alert-success">' + data.message + '</div>'); 

        // usually after form submission, you'll want to redirect 
      // window.location = '/thank-you'; // redirect a user to another page 
      alert('success'); // for now we'll just alert the user 

       } 
      }) 

      // using the fail promise callback 
      .fail(function(data) { 

       // show any errors 
       // best to remove for production 
       console.log(data); 
      }); 

     // stop the form from submitting the normal way and refreshing the page 
     event.preventDefault(); 
    }); 

}); 
</script> 

И это код PHP:

<?php 
    include 'db.php'; 

    $errors   = array();  // array to hold validation errors 
    $data   = array();  // array to pass back data 

    //Searching for identical usernames 
    $search = mysql_query("SELECT * FROM natspeaker WHERE username = '".$_POST['username']."'"); 
    $count = mysql_num_rows($search); 

    $search2 = mysql_query("SELECT * FROM nonnatspeaker WHERE username = '".$_POST['username']."'"); 
    $count2 = mysql_num_rows($search2); 

    //Searching for identical emails 
    $search3 = mysql_query("SELECT * FROM natspeaker WHERE email = '".$_POST['email']."'"); 
    $count3 = mysql_num_rows($search3); 

    $search4 = mysql_query("SELECT * FROM nonnatspeaker WHERE email = '".$_POST['email']."'"); 
    $count4 = mysql_num_rows($search4); 

    //if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST') { 
    if(isset($_POST)){ 
    //USERTYPE 
    if(empty($_POST['usertype'])) { 
     $errors['usertype'] = "Please select if you are a native or a non-native speaker.<br>"; 
      } 

    //USERNAME 
    if (empty($_POST['username'])) { 
     $errors['username'] = "Username is missing<br>"; 
      }else{//this "else" can be deleted 

    /*this can be deleted in case of trouble*/if ($count == 1 OR $count2 == 1) { 
     $errors['username'] .= "Username already exists in our database. Choose another one<br>"; 
      } 
      }//this bracket can be deleted. 
    //EMAIL 
    if (empty($_POST['email'])) { 
     $errors['email'] = "Email is missing<br>"; 
      }else{//this "else" can be deleted 

     if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $_POST['email'])) { 
     $errors['email'] = "Invalid email<br>"; 
      } 

     if ($count3 == 1 OR $count4 == 1) { 
     $errors['email'] = "Email already exists in our database. It seems you have an account yet.<br>"; 
      } 
      }//this bracket can be deleted. 

     //PASSWORD 
     if (empty($_POST['password'])) { 
     $errors['password'] = "Password is missing.<br>"; 
      }else{//this "else" can be deleted 

     if (strlen($_POST['password']) < 6) { 
     $errors['password'] = "Password too short<br>"; 
      } 
      }//this bracket can be deleted. 


     // return a response =========================================================== 

     // if there are any errors in our errors array, return a success boolean of false 
     if (! empty($errors)) { 

     // if there are items in our errors array, return those errors 
     $data['success'] = false; 
     $data['errors'] = $errors; 
     //if(count($_SESSION['errors']) > 0){ 
     //This is for ajax requests: 
     if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST') { 
      //if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])== 'xmlhttprequest') {//something is wrong with this 
       header('Content-type: application/json'); 
       echo "Ajax request is working."; 
       echo json_encode($data);//now this iss working 
       exit; 
      } 
      //This is when Javascript is turned off: 
      echo "<br><br><br><center><div style=\"font-size:50;\">something is wrong or your Javascript is turned off. Ajax request is not working</div></center><br><br>";//delete 
      echo $data;//delete 
      //foreach($_SESSION['errors'] as $key => $value){ 
      //echo "<li>" . $value . "</li>"; 
      //} 
      //echo "</ul>";exit; 
    }else{ 
    // if there are no errors process our form, then return a message 

     // DO ALL YOUR FORM PROCESSING HERE 
     // THIS CAN BE WHATEVER YOU WANT TO DO (LOGIN, SAVE, UPDATE, WHATEVER) 
if ($_POST['usertype'] == "native speaker") { 
     $register = mysql_query("INSERT INTO natspeaker(username, email, password, time1, usertype) 
     VALUES ('".$_POST['username']."','".$_POST['email']."', '".$_POST['password']."', now(), '".$_POST['usertype']."')") or die (mysql_error()); 
     }elseif ($_POST['usertype'] == "non-native speaker"){ 
     $register = mysql_query("INSERT INTO nonnatspeaker(username, email, password, time1, usertype) 
     VALUES ('".$_POST['username']."', '".$_POST['email']."', '".$_POST['password']."', now(), '".$_POST['usertype']."')") or die (mysql_error()); 
     } 

     // Let's mail the user! 
     $subject = "Your Membership at Quintz!"; 
     $message = "Hi, ".$_POST['username'].", 
     Thank you for registering at our website, http://www.quintz.club! 

     You have registered as a ".$_POST['usertype'].". 
     You are two steps away from logging in and accessing our exclusive members area. 

     To activate your membership, please click here: http://www.quintz.club/activate.php 

     Once you activate your membership, you will be able to login. 

     And please do not forget to complete your profile. 
     Thanks! 
     The Webmaster 

     This is an automated response, please do not reply!"; 

     mail($_POST['email'], $subject, $message, "From: Quintz Webmaster<[email protected]>\nX-Mailer: PHP/" . phpversion()); 

     // show a message of success and provide a true success variable 
     $data['success'] = true; 
     $data['message'] = 'Your account has been created successfully. Go to your email address and activate your account.'; 
     echo "successful register!";//delete 
    } 
} 
//} 
// return all our data to an AJAX call 
//this works 
//echo json_encode($data);//delete 
?> 

В целом, я просто хочу помешать пользователю зарегистрироваться с именем пользователя, которое уже существует в базе данных, или с недопустимым электронным адресом или даже отсутствующей информацией (пустые поля), и просто вернуть эти красные уведомления в на той же странице join_form.php. Пользователь может перейти только в register2.php, если вся информация одобрена для передачи в базу данных и, наконец, выведет сообщение «Успешный регистр!». на этой странице и отправляет электронное письмо пользователю. Только то!

+0

Любые ошибки? На вашей странице или в консоли? –

+0

Я использую сервер fatcow. На моей странице нет ошибок, просто просмотрите фотографии, точно так же, как они. –

+0

Как насчет в журнале консоли (инструмент разработчика браузера)? –

ответ

0

Я думаю, вам нужно вернуться к началу. Ваш HTML явно не на уровне, а ваш PHP-код - .. в возрасте ..

Пройдите через то, что делает ваш код, начните с HTML, затем выполните форму, используя jQuery, где вывод равен либо true, либо ID поле формы, которое не удалось, или что-то в этом роде.

Всего несколько быстрых вещей;

  • title идет внутри head, а не над ней
  • mysql_query устарела, попробуйте использовать mysqli_query или вариант ООП в том, что
  • Do подсчитывает, когда это необходимо, если вся форма пуста, нет никаких причин, чтобы ошибка в mysql server
  • Используя OOP mysqli, вы могли бы просто сделать, а затем if($s->num_rows > 0) вместо того, чтобы создавать новую переменную подсчета, используя тот же способ проверки того, что пользователь существует для входа в систему, а затем просто используя $r = $s->fetch_assoc(), чтобы получить e деталей пользователя.
  • Вместо того, чтобы схватить значения, попробуйте написать их все в массив с помощью $('#form').serialize(), а затем mosting что

Короче говоря, вернуться к началу, начать с нуля и использовать обновленный учебник.

+0

Моя версия php - 5.2. Я не знаю, работает ли он с mysqli. Сервер, который я использую, принадлежит (внутри) fatcow. Я новичок программист и что означает ООП? –

+0

Если скомпилирован с MySQLi, он будет работать с MySQLi, так что это зависит от хоста, которого я предполагаю. ООП - это «объектно-ориентированное программирование», что совершенно по-другому. Независимо от того, обратитесь за поддержкой своего хоста и посмотрите, могут ли они обновлять PHP, 5.2 был слишком старым для любого вида использования некоторое время. – Ieuan

+0

Где я могу использовать $ ('# form'). Serialize()? –