Использование функций и PDO для проверки существования аккаунта - PullRequest
0 голосов
/ 22 марта 2012

У меня возникают проблемы с использованием функций, чтобы проверить, существует ли учетная запись пользователя в бэкэнде. Я создал две функции: одна для проверки, если учетная запись пользователя уже существует, а другая для создания учетной записи.

Может ли кто-нибудь просветить меня ...? Что не так с кодом здесь?

<?php

    try{
    $username = 'web';
    $password = '1234';
    $username_signup = $_POST['username_signup'];
    $password_signup = $_POST['password_signup'];
    $hash = crypt($_POST['password'], '$3a$08$2'); // salt 

    $connection = new PDO ('mysql:host=localhost;dbname=tongue', $username, $password);
    $connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $connection -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    function check(c){
    $statement = $connection->prepare('
        SELECT email FROM user
        WHERE email=:username;
        ');
    $statement -> bindParam(':username', c, PDO::PARAM_STR, 127);
    $check = $statement -> execute();
    return $check;
    };

    function create(a,b){
    $statement = $connection->prepare('
        INSERT INTO user (email, hash)
        VALUES (:username, :hash);
        ');
    $statement -> bindParam(':username', a, PDO::PARAM_STR, 127);
    $statement -> bindParam(':hash', b, PDO::PARAM_STR);
    $statement -> execute();
    }

    check($username_signup);

    if ($check==0){
        create($username_signup, $hash);
        header("Location=index.php");
        exit();
    } else {
        header("Location=sign_up.php?error=1");
        exit();
    }


    $connection = null; 
    } // try{}

    catch(PDOException $e) {
        echo $e->getMessage();
        }   

?>

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Вот окончательный код:

<?php
        try{
        $username_signup = "Tst@gmail.com";
        $password_signup = "est";
        $hash = crypt($password_signup, '$3a$08$2'); // salt 

        $connection = new PDO ('mysql:host=localhost;dbname=tongue', 'web', '1234');
        $connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $connection -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

        function login ($query, $connect, $user) {
        $statement  =   $connect->prepare($query);
        $statement  ->  bindParam(':username', $user, PDO::PARAM_STR, 127);
        $statement  ->  execute();
        $data = $statement->fetch (PDO::FETCH_OBJ); // fetches the columns defined as $property
        return $data;
        }

        function create ($query, $connect, $user, $pass) {
        $statement  =   $connect->prepare($query);
        $statement  ->  bindParam(':username', $user, PDO::PARAM_STR, 127);
        $statement  ->  bindParam(':password', $pass, PDO::PARAM_STR, 127);
        $statement  ->  execute();
        }

        $sql = 'SELECT email, hash FROM user WHERE email=:username'; // must be defined before calling

        if ($row = login ($sql, $connection, $username_signup)) {
            echo "Account already exists!";
        }
        else {
            $sql = 'INSERT INTO user(email, hash) VALUES (:username, :password)';
            create($sql, $connection, $username_signup, $password_signup);
            echo "account created";
        };


    $connection = null;

    } catch(PDOException $e) {
        echo $e->getMessage();
    }

?>
0 голосов
/ 22 марта 2012

$connection не является глобальным, поэтому он не устанавливается внутри функций, поэтому вам нужно либо сделать его глобальным (не), либо передать его в качестве аргумента

ps, вам действительно нужно работать над своимимена функций и переменных

...