2015-03-03 3 views
-1

Я начал изучать немного MYSQLi & PHP сегодня, но я немного застрял в этом. Я пробовал несколько методов, но ничего не работает для меня, так как я действительно мало что понимаю. Я пытаюсь создать возможность входа для пользователя, у которого уже есть учетная запись, но это, похоже, не работает.Попытка создать систему входа в систему с PHP и MYSQLi

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

В любом случае, вот мой код:

Форма:

<form method="POST" action="login.php" name="login"> 
Email <input type="email" name="email"> 
Password <input type="password" name="password"> 
<input type="submit" name="login" value="Login"> 
</form> 

PHP: require_once ('ядро/init.php'); // подключиться к базе данных с помощью нового MySQLi

session_start(); 

if($_SESSION['user'] != ''){ 
    header('Location: profile.php'); 
} 

if (isset($_POST['submit'])){ 

    $email = mysqli_real_escape_string($_POST['email']); 
    $password = mysqli_real_escape_string($_POST['password']); 

    $hash = md5($password); 

    $query = "SELECT * FROM users WHERE email='$email' AND password='$hash'"; 

    $result = mysqli_query($db,$query)or die(mysqli_error()); 
    $num_row = mysqli_num_rows($result); 

    if($num_row == 1) { 
     echo "Does work"; 
     while ($row = mysqli_fetch_array($result)){ 
      $_SESSION['user'] = $row['id']; 
     } 
    } else { 
     echo "Does not work."; 
     return false; 
    } 

    return true; 
} 

Спасибо заранее

+0

так, что именно вы испытываете проблемы? – castis

+0

@castis не дает ответа в инструкции if ($ num_row == 1). –

+0

Я бы выбрал $ query и посмотрел, что он построил. –

ответ

1

Вы должны передать параметры соединения DB для ваших массивов POST mysqli_real_escape_string($connection, $var), которые вы не делаете и требуются , при этом убедитесь, что все ваши элементы формы содержат соответствующий атрибут имени, включая метод POST.

Из инструкции:

строки mysqli_real_escape_string (Mysqli $ ссылке, строка $ escapestr)

Плюс, я предлагаю вам добавить exit; после заголовок. В противном случае код может продолжить выполнение.

Ваш условный оператор

if (isset($_POST['submit'])) 

не соответствует вашим представить кнопки ввода в

<input type="submit" name="login" value="Login"> 
        ^^^^^^^^^^^^ 

, который должен быть назван "Submit" вместо "Логин"

Все, что внутри этого условного оператора будет не будет выполнен.

Изменить это:

<input type="submit" name="submit" value="Login"> 

Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

+0

Привет, спасибо за быстрый комментарий. Я редактировал escape-строку, но, похоже, это не проблема. Я включил отчет об ошибках и дал мне это сообщение: 'Примечание: неопределенный индекс: пользователь в /Applications/MAMP/htdocs/wetravel/login.php в строке 8', который кажется $ _SESSION ['user'] –

+0

@ user2962542 Пожалуйста. –

+0

@ user2962542 Я заметил что-то еще после того, как вы сделали редактирование. Я отредактирую свой ответ с чем-то другим. –

0
+0

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

+0

Спасибо за ссылки, я посмотрю. –

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