Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Минимальная, PHP рега на 1 стр: БД,форма,сессия


Автор: xcislav 1.1.2015, 10:08
Минимальная, одностраничная PHP регистрация: БД, форма, $_POST, $_SESSION  

Кроме структуры, формируемой header("location:") всё достаточно прямолинейно,
Отправка формы попадает -> соединением с БД (PDO+немного SQL кода)
и
всё происходит методом $_POST и выводится в $_SESSION.

index.php:
Код

    <!DOCTYPE html>
    <html>
    <h1>Register</h1>
    <form method="POST">
    <input type="text" name="user">
    <input type="pass" name="pass">
    <input type="submit">
    </form>
    <?php
    session_start();
    if(isset($_POST['user'], $_POST['pass'])){
    require 'connect.php';
    $zr++;
    $query = d()->prepare("INSERT INTO u (user, pass, loc) VALUES (:user, :pass, :loc)");
    $query->bindParam(':user', $_POST['user']);
    $query->bindParam(':pass', $_POST['pass']);
    $query->bindParam(':loc', $zr);
    if($query->execute()){
    $_SESSION['user'] = $row['user'];
    $_SESSION['pass'] = $row['pass'];
    header("Location: ".$_SERVER['PHP_SELF']);
    } else{
    echo 'ERROR';
    }
    }
    ?>
    <h1>Login</h1>
    <form method="POST">
    <input type="text" name="user">
    <input type="pass" name="pass">
    <input type="submit">
    </form>
    <?php
    echo $_POST['user'];
    if(isset($_POST['user'], $_POST['pass'])){
    require 'connect.php';
    $query = d()->prepare("SELECT user, pass FROM u WHERE user=:user AND pass=:pass");
    $query->bindParam(':user', $_POST['user']);
    $query->bindParam(':pass', $_POST['pass']);
    $query->execute();
    if($row = $query->fetch()){
    $_SESSION['user'] = $row['user'];
    $_SESSION['pass'] = $row['pass'];
    header("Location: ".$_SERVER['PHP_SELF']);
    }
    }
    $us=$_SESSION['user'];
    echo 'user ',$us;
    ?>
    <?php
    if(isset($_SESSION['user'])){
    $us=$_SESSION['user'];
    echo '
 user ',$us, ' ', '<a href="logout.php">Logout</a>';
    echo '
', '<a href="zrs.php">zero session</a>';
    }
    ?>
    </html>


connect.php:
Код

    <?php
    function d(){
    try{
    $db = new pdo("mysql:host=localhost;dbname=tx;","root","hyuiuik");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $db;
    } catch(PDOException $e){
    echo 'ERROR', $e->getMessage();
    }
    }
    ?>


ВИД на табл. пользователей:
Код

mysql> select * from u;
+----+--------+------+------+
| id | user   | pass | loc  |
+----+--------+------+------+
|  1 | a      | asdf |    0 |
|  2 | b      | bsdf |    0 |
|  3 | b      | bsdf |    0 |
|  4 | c      | csdf |    0 |


Но непонимание на этапе формирования структуры подготовления и отправки собранных данных.

примерный вид:

Код

<?php
session_start();
К
О
Д
session_write_close();

if( isset($_POST['user'] ){
К
О
Д
}else{
К О Д
}

if( !isset($_POST['user']) ){
header("location: http://" . $_SERVER['HTTP_HOST'] . "/login.php");
}else{
//user установлен
КОД ЗАПУСКА
} 

Автор: whatisnot 1.1.2015, 22:15
Вот именно - не понимание. Ну не хорошо держать в базе пароли, держат их хеш да еще "подсоленный". Логин необходимо проверять на занятость.

Автор: Sanchezzz 4.1.2015, 00:01
+ функции header должны объявляться до вывода любой строковых данных пользователю в браузер.

Разбейте код на методы

auth_login($login,$password)         // метод который авторизует пользователя на сайте 
auth_hash($password)                   // метод который возвращает хеширование пароль
auth_registration($login,$password)  // метод который регистрирует пользователя.
auth_check($login)                        // метод который проверяет свободен ли логин

Сперва принимаем данные, обрабатываем  потом выводим HTML.

Автор: Starikan 4.1.2015, 13:50
после обработки строковых данных через header всегда сначала обрабатываются исходящие через глобальные массивы потоковые конфигурации, а потом сессионные переменные, поэтому просто обращайся сразу через массив и не забудь установить соединение с протоколом.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)