невозможно войти в правильную электронную почту и имя - PullRequest
0 голосов
/ 09 июня 2018

Я создаю форму входа в систему, используя AJAX, я в основном работаю над PHP, у меня мало знаний о ajax, пожалуйста, если вы, люди, могли бы помочь мне с моими сомнениями, когда я введу любое значение в идентификатор электронной почты и имя, тогдаон входит на страницу и, если я даю неправильное имя и адрес электронной почты, вместо того, чтобы выдавать сообщение об ошибке, например, неверный адрес электронной почты или имя, он регистрируется даже с неправильным идентификатором и именем электронной почты, я новичок в этом AJAX.Любой, кто поможет мне с этой проблемой, это было бы действительно полностью помочь, пожалуйста

login.php

        <!DOCTYPE HTML>  
        <html>
            <head>
                <meta charset="utf-8"/>
                <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
                <script src="script.js"></script>
                <style>

                .error {
                    color: red;
                    display: none;
                }

                .div1 {
                    margin-top: -19px;
                    margin-bottom: -25px;
                    margin-left: -19px; 
                }

                .copy {
                    border-radius: 4px;
                    padding: 6px 20px;
                    border-style: ridge;
                }

                #error_message{
                    background: #F3A6A6;
                }

                .ajax_response {
                    padding: 10px 20px;
                    border: 0;
                    display: inline-block;
                    margin-top: 20px;
                    cursor: pointer;
                    display:none;
                    color:#555;
                }

                </style>
            </head>
            <body style="background-image: url(pic.jpg); background-repeat: no-repeat; background-size: cover;">  

                <div style="padding-left: 380px; padding-top:80px" class="div1">

                    <h2 style="color:#009999">Login :</h2>

                    <form action="" method="post" id="logForm" enctype="multipart/form-data">

                        <span style="color:#0099ff">Name: </span>
                        <input type="text" name="name" id="name" class="copy" style="margin-left: 52px"  value ="" />
                        <span class="namee error">Enter name</span>
                        <br/><br/>

                        <span style="color:#0099ff"> E-mail: </span>
                        <input type="text" name="email" id="email" class="copy" style="margin-left: 48px"  value ="" />
                        <span class="emaile error">Enter email</span>
                        <br/><br/>

                        <input type="button" id="submit" class="submit" name="submit" value="Login" /> 
                        <div id="error_message" class="ajax_response" style="float:left"></div>

                    </form>

                </div>

            </body>

            <script>
                $(document).ready(function(){
                    $("#submit").click(function(){
                        var error = false;
                        var form = document.getElementById('logForm');
                        var formData = new FormData(form);

                        // Loop through the form data
                        for(var p of formData){
                            // Check if the form data is empty
                            if(p[1] === ''){
                                // Show the error
                                $('.'+p[0]+'e').show();
                                error = true;
                            }
                        }

                        // Boolean to prevent AJAX from running in case of an error
                        if(error){
                            return false;
                        }

                        // AJAX Code To Submit Form.
                        $.ajax({
                            type: "POST",
                            url: "success.php",
                            data: formData,
                            processData: false,
                            contentType: false,
                            cache: false,
                            success: function(data){

                                if (data) {
                                    window.location = 'pannel.php';
                                    $('#success_message').fadeIn().html(data);
                                    setTimeout(function() {
                                        $('#success_message').fadeOut("slow");
                                    }, 2000 );
                                }

                            }

                        });

                    });

                });
            </script>

        </html> 

success.php

        <?php
                $mysqli  = mysqli_connect("localhost","root","","ajax1");
                session_start();

                if (isset($_SESSION['id'])){
                    header('location:pannel.php');
                        }

                    $email=$_POST["email"];
                    $name=$_POST["name"];

                    //Checking is user existing in the database or not
                    $query = "SELECT * FROM `users` WHERE name='$name' and email='$email'";
                    $result = mysqli_query($mysqli,$query);
                    $row1 = mysqli_fetch_array($result);
                    $rows = mysqli_num_rows($result);

                    if($rows==1){
                        $_SESSION['name'] = $name;
                        $_SESSION['id']=$row1['userid'];
                        // Redirect user to index.php
                        header("Location: pannel.php");
                        }
                         else{
                             $error = " Invalid Name or E-MAIL ";
                            }
            ?>

pannel.php

        <!DOCTYPE html>
        <html lang="en">
                <head>

                    <title>Bootstrap Example</title>
                    <meta charset="utf-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1">
                    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
                    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
                    <style>

                            #success_message{
                                background: #CCF5CC;
                            }

                        .ajax_response {
                            padding: 10px 20px;
                            border: 0;
                            display: inline-block;
                            margin-top: 20px;
                            cursor: pointer;
                            display:none;
                            color:#555;
                        }
                    </style>

                </head>
            <body>

                <div id="success_message" class="ajax_response" style="float:left"></div>

                <div class="container">
                    <br><br><br><br>
                    <?php

                        $mysqli  = mysqli_connect("localhost","root","","ajax1");
                        $query=mysqli_query($mysqli,"select * from `users` where userid='".$_SESSION['id']."'");
                        $row=mysqli_fetch_array($query);
                        echo 'Welcome - '.$row['name'];

                    ?>

                    <br>
                    <a href="logout.php">Logout</a>
                    <br><br>



                </div>

            </body>
        </html>                 

1 Ответ

0 голосов
/ 09 июня 2018

Несколько вещей, на которые стоит обратить внимание:

1.) Вы не используете параметризованные SQL-запросы, поэтому ваша БД открыта для SQL-инъекций.Я изменил вашу структуру запросов, чтобы продемонстрировать, как использовать параметризованные запросы.Пожалуйста, прекратите делать то, что делаете.Вот ссылка на эту тему.Прочтите его, добавьте в закладки и обращайтесь к нему, пока не поймете это.Это очень важно и не сложно, если вы сделаете это несколько раз.

https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection

2.) Когда вы используете ajax, вот что происходит.Ваша основная html-страница отправляет ajax-запрос на другую страницу.Эта страница получает ответ, выполняет любой код, а затем отправляет ответ обратно функции ajax главной html-страницы, которая отправила запрос.

Этот ответ получен в блоке успеха функции ajax.На мой взгляд, самый простой способ передавать данные туда-сюда - использовать формат JSON.

3.) Все, что отражено в php, будет отправлено в функцию ajax.

4.) Данные в моем примере - это строка json, а не объект json, поэтому вам нужно преобразовать строкук объекту json.

5.) При создании нового кода делайте его небольшими блоками и не двигайтесь дальше, пока все, над чем вы работаете, не будет работать так, как вы ожидаете.Затем украсьте рабочий код, чтобы делать то, что вы хотите.Это сэкономит вам часы на устранение неполадок и поможет вам определить лучший рабочий процесс вашего кода, прежде чем тратить часы на кодирование того, что, по вашему мнению, произойдет.

6.) Вы можете использовать имя и электронную почту для проверки логина, но имена распространены, и люди могут делиться электронными письмами.Я хотел бы сделать что-то вроде электронной почты / имя пользователя и пароль.Для паролей используйте встроенные функции паролей php.

http://php.net/manual/en/faq.passwords.php

Итак, вот пример, который должен привести вас на правильный путь.

При изменении login.phpваша функция ajax на это:

$.ajax({
  type: "POST",
  url: "success.php",
  data: formData,
  processData: false,
  contentType: false,
  cache: false,
  dataType: 'application/json; charset=utf-8',
  success: function(response){
    console.log('Ajax tried.');
    console.log(response);
    var data = JSON.parse(response); //Change from string to object.
    console.log(data);
    if (data['success']) {
        console.log('It worked!!!!');
        //The user's name and email returned a 
        //result from the user's table. 

    } else{
      console.log('You have an error.');
      console.log(data['errors']);
      //Here are your errors.  Do something with them.
    }

  }

});

Измените ваш success.php на это:

<?php

session_start(); //Always do first.

$mysqli  = mysqli_connect("localhost","root","","ajax1");

if (isset($_SESSION['id'])){ //<--This should not be here.  This should
//be tested for on the login.php page.
$errors['logged_in'] = TRUE;  

}

//Checking is user existing in the database or not
$query = "SELECT * FROM `users` WHERE name=? and email=?";  //<--Use placeholders.

//Remember this:  Prepare, bind, Execute.



$stmt = $mysqli->prepare($query); //Prepare
$stmt->bind_param("ss", $_POST['name'], $_POST['email']); //Bind
$stmt->execute(); //Execute.
$result = $stmt->get_result()->fetch_assoc();

if($result){

  $_SESSION['name'] = $result['name']; //Safer to use data from db instead of post.
  $_SESSION['id']   = $result['userid'];

}else{

  $errors['user_exists'] = FALSE;

  }

$stmt->close(); //Important to free up resources for your next query.

$response = array();

if(isset($errors) && $errors){

  $response['success'] = FALSE;
  $response['errors'] = $errors;

} else{

  $response['success'] = TRUE;


  }

echo json_encode($response); //<-- This is what gets sent back to ajax function.

?>

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...