2013-09-17 3 views
0

Я пытаюсь сделать форму входа в php и mysql и не удалось за последние 3 дня.PHP Login Script не работает должным образом

У меня есть в основном php-форма и на той же странице скрипты для входа пользователя на сайт.

form.php

<form id="superAdminForm" method="post" action=""> 
    <input type="email" name="email" required class="txtInput" placeholder="Email..." autocomplete="off"/> <br /> 
    <input type="password" name="password" required class="txtInput" placeholder="Password..."/> <br /> 
    <input type="submit" name="submit" value="Enter" id="submit" /> 
</form> 

PHP код form.php

<?php 
    require("../php_includes/db-connect.php"); 

    if (isset($_POST["submit"])) { 
     $email = $_POST["email"]; 
     $password = $_POST["password"]; 

     $sql = "SELECT * FROM users WHERE email='$email' AND password='$password' LIMIT 1"; 
     $query = mysqli_query($con, $sql); 

     $row = mysqli_fetch_array($query); 

     if ($row['email'] == 1) { 
      header("Location: admin-index.php"); 
     } 
    } 

    mysqli_close($con); 

?> 

Проблема в том, что Логин не становится преуспевающим. Я не знаю причины этого. Поэтому, пожалуйста, помогите мне в этом. Также наведите меня туда, где я делаю ошибки.

Я новичок в PHP и стараюсь изо всех сил справляться с моими знаниями.

+2

Ваш код уязвим для инъекций SQL! – Freelancer

+0

Что выбирает возврат? – Stephan

+0

Согласен. Я воздержался от того, чтобы сказать это в своем ответе, но я бы предложил посмотреть в PDO для PHP (есть бесчисленные дебаты о наилучшем способе обработки взаимодействия PHP/базы данных, но это мой личный фаворит) –

ответ

1

I думаю что вам нужно отделить логику вашего зрения от логики аутентификации. Переместите блок PHP в свой собственный файл и установите параметр действия вашей формы в этот файл (относительное местоположение).

Это потому, что весь этот PHP-код интерпретируется сервером до отправки клиенту, и поэтому эта форма не может фактически использовать эту логику PHP на той же странице.

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

EDIT

Как сказано другими, вы должны смотреть в безопасности и особенно закреплять в $_SESSION с. Ваш код также понадобится для работы. Я не думаю, что $row['email'] == 1 никогда не будет правдой, и поэтому ваш скрипт потерпит неудачу и в конечном итоге ничего не сделает. Опять же, добавьте инструкцию else для обработки ошибки аутентификации.

Что касается исправления, я бы предложил сравнить $row['email'] == $email в if, но это также заставило бы электронную почту проверить ваш SQL-запрос избыточным. Я бы предложил перестроить свою логику.

+0

Я сделал, как вы сказали, но я получаю пустой экран, что теперь делать? –

+0

Обновленный ответ для ya –

1

1 .. Говоря о безопасности

код уязвим для sql injection, так что даже если он будет работать его не полезно

enter image description here

^^ source

' or '1'='1' /* ' будет делать ма ГИК

так либо использовать функцию mysqli_real_escape_string Для ручного экранирования специальных символов в строке или используйте prepared statements и параметризованные запросы (рекомендуется).

2 ..email='$email' AND password='$password' LIMIT 1";

так почему бы не по электронной почте должна быть уникальной или проверить, когда Войти этот адрес электронной почты уже существует или нет и если существует, чем показать сообщение об ошибке, как (e-mail уже существует)

поэтому вы не должны использовать limit 1 которые на самом деле не имеет никакого смысла

3 .. Почему вы не устанавливать код входа или что-то в SESSION, так что вы можете определить, что использование регистрируется в

вам г выше сценарий входа ничего не делает это просто проверить погоду электронной почты и пароля присутствует в базе данных или нет

4 ..плана текста, как пароль действительно плохая идея использовать вместо хэширования проверить эту How do you use bcrypt for hashing passwords in PHP?

Хорошо читать

  1. How can I prevent SQL injection in PHP?
+1

+1 для изображения :) – Freelancer

+0

@Mehul Bawadia проверьте эти видео [Хранение паролей (и взлом) в PHP] (https://www.youtube.com/watch?v=T4NTdRvIrdk) и [Пароль Хеширование в PHP] (https://www.youtube.com/watch?v=eNdW5HWBhG0) –

+0

@Freelancer всегда есть xkcd для всего;) –

0
rows=mysqli_num_rows($query); 
if ($rows == 1) { 
    header("Location: admin-index.php"); 
} 

Вы сравниваете массив с int, используйте приведенный выше код.

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