Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Trwałe logowanie PHP i SQL

Najpierw utwórz nowy plik o nazwie constants.php .

<?php
//This is constants.php file
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'conference');
?>

Powinieneś zdefiniować nową kolumnę o nazwie id który ma int type i jest to auto_increment więc będzie to twój klucz podstawowy. Klucze podstawowe muszą być unikalne, a w Twojej tabeli brakuje takiej kolumny. Tak więc w swoim phpMyAdminie napisz w zakładce SQL:

ALTER TABLE `users` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;

Następnie w swoim pliku logowania możesz użyć PDO, jak wspomniano powyżej od innych użytkowników (jeśli nie jesteś na to gotowy, możesz spojrzeć na tutaj i tutaj ).

<?php
function SignIn() {
    require_once("constants.php"); //Now constants will be accessible
    session_start(); 
    try {
        $link = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
        $username = $_POST['username']; //no need to esaping as we will use prepared statements
        $password = $_POST['password'];
        if (!empty($username) && !empty($password)) {
            //You need to define a new column named "id" which will be int auto_increment and it will be your primary key

            $sql = "SELECT id, username, password FROM users where username = :username AND password = :password";
            //Prepare your query
            $stmt = $link->prepare($sql);
            //Execute your query binding variables values
            $stmt->execute(array(':username'=>$username, ':password'=>$password));
            //Fetch the row that match the criteria
            $row = $stmt->fetch();

            if (!empty($row['username']) && !empty($row['password'])) {
                $_SESSION['is_logged'] = true; //Now user is considered logged in
                $_SESSION['username'] = $row['username'];
                $_SESSION['id'] = $row['id'];

                //Never store passwords in $_SESSION

                echo "Welcome to your User Account for CSIT Conference. Click to go home: ";
                echo '<a href="index.html"> Home Page </a>. ';
                echo "Or here to go to your assigned papers: ";
                echo '<a href="assigned.php"> Assigned Papers </a>. ';
            } else {
                echo "SORRY... YOU ENTERED WRONG ID AND PASSWORD... PLEASE RETRY...";
            }

            $link = null;
        } else {
            echo 'Please enter username and password.';
        }
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
}

if (isset($_POST['submit'])) {
    SignIn();
}
?>

Wreszcie w twoim pliku assigned_papers.php możesz uzyskać dostęp do $_SESSION zmienne, które już zapisałeś, a następnie pobierz wszystkie przypisane dokumenty dla użytkownika, który właśnie się zalogował.

<?php
//assigned_papers
session_start();
require_once("constants.php"); //Now constants will be accessible
if (!empty($_SESSION['is_logged'])) {
    echo 'Hello, '.$_SESSION['username'].'! Here are your assigned papers: ';

    try {
        $link = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
        $sql = "SELECT * FROM assigned_papers where users_id = :users_id";
        $stmt = $link->prepare($sql);
        //We want all assigned papers for the particular user
        $stmt->execute(array(':users_id'=>$_SESSION['id']));
        $result = $stmt->fetchAll();
        foreach ($result as $row) {
            //You can echo what you want from table assigned_papers
            //echo '<p>'.$row['paper_name'].'</p>';
        }
    } catch(PDOException $e) {
        echo $e->getMessage();
    }

} else
    header("Location: login.php"); //If user isn't logged in then redirect him to login page
    die();
}
?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA LOCAL INFILE nie działa z php 5.5 przy użyciu PDO

  2. Czy VARCHAR(20000) jest prawidłowy w MySQL?

  3. Nieoczekiwane wyniki MySQL:klauzula IN (liczba, „ciąg”) w kolumnie varchar

  4. błąd:'Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/run/mysqld/mysqld.sock' (2)' -- Brak /var/run/mysqld/mysqld.sock

  5. Pobieranie zmian z tabeli za pomocą ElasticSearch JDBC river