За последние 24 часа нас посетили 16093 программиста и 1545 роботов. Сейчас ищут 868 программистов ...

Cоединение сайта с сервером

Тема в разделе "PHP для новичков", создана пользователем ProPall, 28 июл 2017.

Метки:
  1. ProPall

    ProPall Новичок

    С нами с:
    28 июл 2017
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте! Я новичок в PHP. Писал систему логина и регистрации с помощью PHP MySQL и сессий. Использую MAMP для создания внутреннего сервера и PHPMYAdmin для создания таблиц и датабаз. Для самого сайта использую Phpstorm. Вроде все написал, однако на стадии проверки на наличие логина и пароля в таблице все идет не так. С кодом вроде бы все в порядке, синтаксических ошибок нет, логических вроде тоже. Внизу сам код для login.php и register.php а также подключение к датабазе db.php
    db.php:
    PHP:
    1. <?php
    2. $servername = "localhost";
    3. $username = "root";
    4. $password = "root123";
    5. $db = 'Trains';
    6. // Create connection
    7. $conn = mysqli_connect($servername, $username, $password, $db);
    8.  
    9. // Check connection
    10. if ($conn->connect_error) {
    11.     die("Connection failed: " . $conn->connect_error);
    12. } else{
    13.     echo "Connected to server successfully";
    14. }
    15.  
    16. ?>
    login.php:
    PHP:
    1. <?php
    2. include("db.php");
    3. if(isset($_SESSION['login_user'])){
    4.     header("location: welcome.php");
    5. }
    6. $error = '';
    7. if (isset($_POST['submit'])) {
    8.     if (empty($_POST['username']) or empty($_POST['password'])) {
    9.         $error = "Please enter your login details";
    10.     } else {
    11.  
    12.         $username = mysqli_real_escape_string($conn, $_POST['username']);
    13.         $password = $_POST['password'];
    14.  
    15.  
    16.  
    17.         $query = mysqli_query($conn, "SELECT * FROM workers WHERE user_name =$username, AND  password = MD5($password) ");
    18.         $rows = mysqli_num_rows($query);
    19.         if ($rows == 1) {
    20.             $_SESSION['login_user'] = $username;
    21.             header('welcome.php');
    22.         } else {
    23.             $error = "Username or Password is invalid";
    24.         }
    25.  
    26.     }
    27. }
    28. ?>
    Вместе с login.php идет HTML код для формы , но я думаю тут не в нем проблема. После ввода информации в login.php , всегда возвращается ошибка $error = "Username or Password is invalid", следовательно проблема в $query но найти никак не могу.
    Почти тоже самое происходит и в register.php
    PHP:
    1. <?php
    2. if( isset($_SESSION['login_user'])!="" ){
    3.     header("Location: welcome.php");
    4. }
    5.  
    6. include_once ('db.php');
    7.  
    8.  
    9.  
    10.  
    11.  
    12. $error = false;
    13. $nameError = '';
    14. $passwordError = '';
    15. $usernameError = '';
    16. $surnameError = '';
    17. $emailError = '';
    18. $MSG = '';
    19.  
    20. if ( isset($_POST['Register']) ) {
    21.  
    22.     // clean user inputs to prevent sql injections
    23.     $name = trim($_POST['name']);
    24.     $name = strip_tags($name);
    25.     $name = htmlspecialchars($name);
    26.  
    27.     $surname = trim($_POST['surname']);
    28.     $surname = strip_tags($surname);
    29.     $surname = htmlspecialchars($surname);
    30.  
    31.     $email = trim($_POST['email']);
    32.     $email = strip_tags($email);
    33.     $email = htmlspecialchars($email);
    34.  
    35.     $password = trim($_POST['password']);
    36.     $password = strip_tags($password);
    37.     $password = htmlspecialchars($password);
    38.  
    39.     $username = trim($_POST['username']);
    40.     $username = strip_tags($username);
    41.     $username = htmlspecialchars($username);
    42.     // Username validation
    43.     if(empty($username)){
    44.         $error = true;
    45.         $usernameError = 'Please enter your username';
    46.     }else {
    47.         if (!preg_match('/^[a-zA-Z0-9]{5,}$/', $username)) {
    48.             $error = true;
    49.             $usernameError = 'Invalid Username';
    50.         }
    51.     }
    52.     //Name validation
    53.     if (empty($name)) {
    54.         $error = true;
    55.         $nameError = "Please enter your full name.";
    56.     } else if (strlen($name) < 3) {
    57.         $error = true;
    58.         $nameError = "Name must have at least 3 characters.";
    59.     } else if (!preg_match("/^[a-zA-Z ]+$/",$name)) {
    60.         $error = true;
    61.         $nameError = "Name must contain alphabets and space.";
    62.     }
    63.     //surname validation
    64.     if (empty($surname)){
    65.         $error = true;
    66.         $surnameError = "Please enter your surname";
    67.     } else if (strlen($surname)< 3) {
    68.         $error = true;
    69.         $surnameError = "Surname must have at least 3 characters";
    70.     } else if (!preg_match("/^[a-zA-Z ]+$/",$surname)){
    71.         $error = true;
    72.         $surnameError = "Surname must contain alphabets";
    73.     }
    74.  
    75.  
    76.     //basic email validation
    77.     if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
    78.         $error = true;
    79.         $emailError = "Please enter valid email";
    80.     } else {
    81.         // check email exist or not
    82.         $query = "SELECT email FROM workers WHERE email='$email'";
    83.         $result = mysqli_query($conn,$query);
    84.         $count = mysqli_num_rows($result);
    85.         if($count!=0){
    86.             $error = true;
    87.             $emailError = "Provided Email is already in use.";
    88.         }
    89.     }
    90.     // password validation
    91.     if (empty($password)){
    92.         $error = true;
    93.         $passwordError = "Please enter password.";
    94.     } else if(strlen($password) < 6) {
    95.         $error = true;
    96.         $passwordError = "Password has to be at least 6 charachters long";
    97.     }
    98.  
    99.     // password encrypt using MD5();
    100.     $password = MD5($password);
    101.  
    102.  
    103.  
    104.     // if there's no error, continue to signup
    105.     if( !$error ) {
    106.         $query = mysqli_query($conn,"INSERT INTO workers(id,user_name,password,email,surname,name) VALUES(NULL ,$username,$password,$email,$surname,$name)");
    107.  
    108.  
    109.         if ($query) {
    110.             $MSG= "Successfully registered, you may login now";
    111.             unset($name);
    112.             unset($email);
    113.             unset($password);
    114.             unset($name);
    115.             unset($surname);
    116.  
    117.         } else {
    118.             $MSG = "Something went wrong, try again later...";
    119.         }
    120.  
    121.     }
    122.  
    123.  
    124. }
    125. ?>
    Здесь все время выводит $MSG следовательно опять проблема в query. Надеюсь на вашу помощь!
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если код не работает, с ним не может быть всё в порядке
    Вот здесь синтаксическая ошибка в запросе, перед and не нужна запятая. К тому же, запрос уязвим к SQL-инъекциям.
    Потом, пароль не рекомендуют подставлять в запрос, рекомендуется найти пользователя, а потом уже из php сравнить его пароль.
    Выпишите себе куда-нибудь этот снипет с пометкой "бесполезный идиотизм", и никогда больше не используйте.

    комментарий - отпад. Мы делаем со строкой кучу действий, никак не связанных с базой данный (обрезку пробелов, удаление тегов html, замену спец. символов html на сущности html), и ожидаем, что это как-то защит нас от SQL-инъекций. В какой из этих функций есть слово SQL в названии?
    --- Добавлено ---
    вот это защищает от инъекций. А также:
    https://php.ru/manual/mysqli.prepare.html
     
  3. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    А я думаю, что весь код копипаст, пишет он систему регистрации :D

    А еще тут к сессии обращение идет, до ее старта.
     
  4. ProPall

    ProPall Новичок

    С нами с:
    28 июл 2017
    Сообщения:
    2
    Симпатии:
    0
    Спасибо за замечания. Исправил login.php и register.php. Добавил prepared statement в login.php. Теперь при правельном вводе обновляется страница , а не переходит в welcome.php.
    login.php
    PHP:
    1. <?php
    2. include("db.php");
    3. if(isset($_SESSION['login_user'])){
    4.     header("location: welcome.php");
    5. }
    6.  
    7. $error = '';
    8. if (isset($_POST['submit'])) {
    9.     if (empty($_POST['username']) or empty($_POST['password'])) {
    10.         $error = "Please enter your login details";
    11.     } else {
    12.  
    13.         $username = mysqli_real_escape_string($conn, $_POST['username']);
    14.         $password = md5($_POST['password']);
    15.  
    16.  
    17.  
    18.         $query = mysqli_prepare($conn, "SELECT password FROM workers WHERE user_name=?");
    19.         if ($query){
    20.             mysqli_stmt_bind_param($query,"s",$username);
    21.             mysqli_stmt_execute($query);
    22.             mysqli_stmt_bind_result($query,$pass);
    23.             mysqli_stmt_fetch($query);
    24.             if ($password == $pass){
    25.                 $_SESSION['login_user'] = $username;
    26.                 header('welcome.php');
    27.             }else{
    28.                 $error = "You typed the wrong password";
    29.                 unset($username,$password);
    30.  
    31.  
    32.             }
    33.         }else{
    34.             $error = "User Login doesn't exists";
    35.             unset($username,$password);
    36.         }
    37.  
    38.     }
    39. }
    register.php
    Код (Text):
    1. <?php
    2. session_start();
    3. if( isset($_SESSION['login_user'])!="" ){
    4.     header("Location: welcome.php");
    5. }
    6.  
    7. include_once ('db.php');
    8.  
    9. $error = false;
    10. $nameError = '';
    11. $passwordError = '';
    12. $usernameError = '';
    13. $surnameError = '';
    14. $emailError = '';
    15. $MSG = '';
    16.  
    17. if ( isset($_POST['Register']) ) {
    18.  
    19.  
    20.     $name = $_POST['name'];
    21.     $name = mysqli_real_escape_string($conn,$name);
    22.     $surname = ($_POST['surname']);
    23.     $surname = mysqli_real_escape_string($conn,$name);
    24.     $email = $_POST['email'];
    25.     $email = mysqli_real_escape_string($conn,$name);
    26.     $password = $_POST['password'];
    27.     $password = mysqli_real_escape_string($conn,$password);
    28.     $username = $_POST['username'];
    29.     $username = mysqli_real_escape_string($conn,$username);
    30.  
    31.     // Username validation
    32.     if(empty($username)){
    33.         $error = true;
    34.         $usernameError = 'Please enter your username';
    35.     }else {
    36.         if (!preg_match('/^[a-zA-Z0-9]{5,}$/', $username)) {
    37.             $error = true;
    38.             $usernameError = 'Invalid Username';
    39.         }
    40.     }
    41.     //Name validation
    42.     if (empty($name)) {
    43.         $error = true;
    44.         $nameError = "Please enter your full name.";
    45.     } else if (strlen($name) < 3) {
    46.         $error = true;
    47.         $nameError = "Name must have at least 3 characters.";
    48.     } else if (!preg_match("/^[a-zA-Z ]+$/",$name)) {
    49.         $error = true;
    50.         $nameError = "Name must contain alphabets and space.";
    51.     }
    52.     //surname validation
    53.     if (empty($surname)){
    54.         $error = true;
    55.         $surnameError = "Please enter your surname";
    56.     } else if (strlen($surname)< 3) {
    57.         $error = true;
    58.         $surnameError = "Surname must have at least 3 characters";
    59.     } else if (!preg_match("/^[a-zA-Z ]+$/",$surname)){
    60.         $error = true;
    61.         $surnameError = "Surname must contain alphabets";
    62.     }
    63.  
    64.  
    65.     //basic email validation
    66.     if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
    67.         $error = true;
    68.         $emailError = "Please enter valid email";
    69.     } else {
    70.         // check email exist or not
    71.         $query = "SELECT email FROM workers WHERE email='$email'";
    72.         $result = mysqli_query($conn,$query);
    73.         $count = mysqli_num_rows($result);
    74.         if($count!=0){
    75.             $error = true;
    76.             $emailError = "Provided Email is already in use.";
    77.         }
    78.     }
    79.     // password validation
    80.     if (empty($password)){
    81.         $error = true;
    82.         $passwordError = "Please enter password.";
    83.     } else if(strlen($password) < 6) {
    84.         $error = true;
    85.         $passwordError = "Password has to be at least 6 charachters long";
    86.     }
    87.  
    88.     // password encrypt using MD5();
    89.     $password = MD5($password);
    90.  
    91.  
    92.  
    93.     // if there's no error, continue to signup
    94.     if( !$error ) {
    95.         $query = mysqli_query($conn,"INSERT INTO workers(id,user_name,password,email,surname,name) VALUES(NULL ,$username,$password,$email,$surname,$name)");
    96.  
    97.  
    98.         if ($query !== false) {
    99.             $MSG= "Successfully registered, you may login now";
    100.             unset($name);
    101.             unset($email);
    102.             unset($password);
    103.             unset($name);
    104.             unset($surname);
    105.  
    106.         } else {
    107.             $MSG = "Something went wrong, try again later...";
    108.         }
    109.  
    110.     }
    111.  
    112.  
    113. }
    114. ?>
    Здесь сheck.php который должен проверять залогинился ли юзер.
    PHP:
    1. <?php
    2. include('db.php');
    3. $user_check=$_SESSION['login_user'];
    4.  
    5. $sql = mysqli_query($conn,"SELECT user_name FROM workers WHERE user_name='$user_check' ");
    6.  
    7. $row=mysqli_fetch_array($sql,MYSQLI_ASSOC);
    8.  
    9. $login_user=$row['user_name'];
    10.  
    11. if(!isset($user_check))
    12. {
    13.     header("Location: login.php");
    14. }
    15. ?>
     
  5. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    а что такое
    PHP:
    1. header('welcome.php');
    и как по твоему должен проходить переход?