2017-02-13 3 views
2

У меня есть 2 проблемы. Основная история: Я создал простую систему регистрации и входа в систему.
Проблема1: Если я попытаюсь зарегистрировать новую учетную запись, тогда она говорит: «Ошибка регистрации пользователя». На данный момент он должен сказать, что, поскольку mysql не может получить правильную информацию из форм. Но проблема в том, что я не знаю почему. Все, кажется, правильный ...
задачи2: Если я пытаюсь войти в систему с существующей учетной записи, то кажется, что браузер только обновления страницы и больше ничего ...
Регистрация с PHP код:Ошибка подключения/отправки MySQL в «PHP-форму»

<?php 
    require ('insert.php'); 
    // If values posted, insert into the database. 
    if (isset($_POST['username']) && isset($_POST['password'])){ 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     // nimi refers to name, it's correct 
     $query = "INSERT INTO `user` (nimi, email, username, password) 
        VALUES('$name', '$email', '$username', '$password')"; 

     //POST retrieves the data. 
     $result = mysqli_query($connection, $query); 

     if($result){ 
      $smsg = "User Created Successfully."; 
     } else { 
      $fmsg = "User Registration Failed"; 
     } 
    } 

    mysqli_close($connection); 
    ?> 
    <html> 
    ... 
    <body> 
    ... 
    <div> 

     <form method="POST" class="form-horizontal" role="form"> 

     <!-- Status, how registering went --> 
     <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?> 
     <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?> 


     <!-- Registration form starts --> 
      <h2>Form</h2><br> 


       <label for="Name"></label> 
       <input name="name" type="text" id="name" maxlength="40" placeholder="Ees- ja perenimi" class="form-control" autofocus> <!-- lopp --> 

       <label for="email"></label> 
       <input name="email" type="email" id="email" maxlength="65" placeholder="Email" class="form-control"> <!-- lopp --> 


       <label for="Username"></label> 
       <input name="username" type="text" id="userName" maxlength="12" placeholder="Kasutajatunnus/kasutajanimi" class="form-control" required> <!-- lopp --> 

       <label for="Password"></label> 
       <input name="password" type="password" id="password" maxlength="12" placeholder="Parool" class="form-control" required> 

<button type="submit" class="btn btn-primary btn-block">Join</button> 
      </form> <!-- /form --> 

     </div> <!-- ./container --> 
    ... 
    </body> 
</html> 

Логин:

<?php 
session_start(); 
require ('insert.php'); 

//Is username and password typed? 
if (isset($_POST['username']) and isset($_POST['password'])){ 
    //Making vars from inputs 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    //Checking existent of values. 
    $query = "SELECT * FROM `liikmed` 
       WHERE username='$username' 
       and password='$password'"; 

    $result = mysqli_query($connection, $query) 
        or die(mysqli_error($connection)); 
    $count = mysqli_num_rows($result); 
    //3.1.2 If values equal, create session. 
    if ($count == 1){ 
     $_SESSION['username'] = $username; 
    } else { 
     //If credentials doesn't match. 
     $fmsg = "Invalid Login Credentials."; 
    } 
} 
//if user logged in, welcome with message 
if (isset($_SESSION['username'])){ 
    $username = $_SESSION['username']; 
    echo "Hai " . $username . ""; 
    echo "This is the Members Area"; 
    echo "<a href='logout.php'>Logout</a>"; 

}else{} 
?> 

<html> 
... 
<body> 
... 
<div id="bg"></div> 


    <form method="POST" class="form-horizontal"> 
     <h2>Login</h2><br> 

     <label for="User"></label> 
     <input name="username" type="text" maxlength="15" placeholder="Username" class="form-control" required autofocus> 

     <label for="Password"></label> 
     <input name="password" type="password" maxlength="50" placeholder="Password" class="form-control" required autofocus> 

     <button type="submit" class="btn btn-primary btn-block">Enter</button> 

</form> 
</div> 
... 
</body> 
</html> 

И, наконец, PHP файл подключения к базе данных (так называемый insert.php):

<?php 
$connection=mysqli_connect("localhost","root","pw"); 
if (!$connection){ 
    die("Database Connection Failed" . mysqli_error($connection)); 
} 
$select_db = mysqli_select_db($connection, 'my_database'); 
if (!$select_db){ 
    die("Database Selection Failed" . mysqli_error($connection)); 
} 
?> 
+0

Вместо повторив faily бесполезных сообщений типа '$ fmsg =«Регистрация пользователя Failed»;' Вместо захват и показать ошибку реальной базы данных (при тестировании), используя '$ result-> error' Тогда вы узнаете, что что-то пошло не так, и что еще более важно ** что пошло не так ** – RiggsFolly

+0

Пожалуйста, не храните простой тестовый пароль ** его огромную угрозу безопасности ** PHP предоставляет [' password_hash() '] (http://php.net/manual/en/function.password-hash.php) и ['password_verify()'] (http://php.net/manual/en/function.password-verify.php) используйте м. И вот некоторые [хорошие идеи о паролях] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Если вы используете версию PHP до 5.5 [имеется пакет совместимости, доступный здесь] (https : //github.com/ircmaxell/password_compat) – RiggsFolly

+0

Ваш скрипт подвержен риску [SQL Injection Attack] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) Посмотрите, что случилось с [Little Bobby Tables] (http://bobby-tables.com/) Даже [если вы избегаете входных данных, это небезопасно!] (http://stackoverflow.com/ Вопросы/5741187/sql-injection-that-gets-around-mysql-real-escape-string) Используйте [подготовленные параметризованные утверждения] (http://php.net/manual/en/mysqli.quickstart.prepared-statements. php) – RiggsFolly

ответ

2

Прежде всего в вашем логинном коде PHP, вы только запустили session, но вы не указали, с какого направления, если логин будет успешным. Добавьте код header. То есть;

if ($count == 1){ 
    $_SESSION['username'] = $username; 
    header("Location: page.php"); //the page you want it to go to 
} 

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

+0

Спасибо, я не знаю, почему я забыл об этом ... Но да, спасибо! :) Теперь все в порядке. –

+0

Вы всегда приветствуете –

0

Ваша логика для установки $ _SESSION ['username'] требует, чтобы комбинация имени пользователя и пароля существовала один раз в вашей базе данных. Это может показаться глупым, но вы можете подтвердить, что это так (подтвердите, что вы не создали одно и то же имя пользователя и пароль). Изменение логики, которая будет> 1, также будет временно изменяться. Так что ваш код

if ($count == 1){ 
    $_SESSION['username'] = $username; 
} 

должен стать

if ($count > 1){ 
    $_SESSION['username'] = $username; 
}