Jump to content
Sebastião Teixeira

Dados não estão a ser inseridos na base de dados

Recommended Posts

Sebastião Teixeira

Pretendo que 'email' e 'time' sejam inseridos nas colunas 'Login' e 'Expire' da tabela 'Login', e que após 'time' < 'NOW()', estes sejam removidos da tabela.

 

function create_session($email, $remember)
{
	//Inicia-se conecção com as seguintes constantes
    $conn = new mysqli(SQLServer, SQLUsername, SQLPassword, database);

	//Verifica-se a presença de erros
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

	//Segurança contra SQLInjection
    $safe_email = $conn->real_escape_string($email);

	//Atribuição de valor à variável $time
    if ($remember == true) {
        $time = strval(86400 * 7);
    } else {
        $time = strval(86400 * 7);
    }

	//SQL Query - inserção de dados (temporários)
    $create_session = "INSERT INTO Login (Login, Expire) VALUES (?, (ADDTIME(NOW(), ?)));";

	//Execução
    prepareQuery($conn, $create_session, "s", array($safe_email));

	//SQL Query - obtenção do id
    $readID = "SELECT id FROM Login WHERE Login = ?;";

	//Execução
    $id = prepareQuery($conn, $readID, "ss", array($safe_email, $time));
    
    $conn->close();

	//remoção de dados temporários expirados
    removeOldSessions();

    return $id;
}


//Segurança contra SQLInjection (Prepared Query)
function prepareQuery($conn, $query, $type, array $parameters)
{
    $stmt = $conn->prepare($query);
    call_user_func_array(array($stmt, "bind_param"), array_merge(array($type), $parameters));
    $stmt->execute();
    $res = $stmt->fetch();
    $stmt->close();

    return $res;
}


function removeOldSessions()
{
    $conn = new mysqli(SQLServer, SQLUsername, SQLPassword, database);


    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $removeSessions = "DELETE FROM Login WHERE Expire < NOW();";

    prepareQuery($conn, $removeSessions, "", array());


    $conn->close();
    return;
}

Acontece que os dados não estão inseridos e nenhum erro está a ser reportado.

Agredeço a ajuda possível

Share this post


Link to post
Share on other sites
eSkiSo

Não sei se ja deste com o gato mas (adicionei mais umas linhas para melhorar):

function create_session($email = null, $remember = false) {
    //confirmar que o email foi fornecido e é correcto
    if(is_null($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) die("Invalid email");

	//Inicia-se conecção com as seguintes constantes
    $conn = new mysqli(SQLServer, SQLUsername, SQLPassword, database);

	//Verifica-se a presença de erros
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

	//Segurança contra SQLInjection
    $safe_email = $conn->real_escape_string($email);

	//Atribuição de valor à variável $time          
    if ($remember) {
        $time = date('Y-m-d H:i:s', strtotime("+1 week"));
        //$time = strval(86400 * 7);
    }
    else {
        $time = date('Y-m-d H:i:s', strtotime("+1 hour"));
        //$time = strval(86400 * 7); //-- Isto não faz basicamente nada seja true ou false faz o mesmo
    }

	//SQL Query - inserção de dados (temporários)
    $create_session = "INSERT INTO Login ('Login', 'Expire') VALUES (?, ?);";

	//Execução 
    //prepareQuery($conn, $create_session, "s", array($safe_email)); //  <<< o erro parece estar aqui so passas o email mas querias passar o email e a data presumo
    prepareQuery($conn, $create_session, "ss", array($safe_email, $time));

	//SQL Query - obtenção do id
    $readID = "SELECT id FROM Login WHERE 'Login' = ?;";

	//Execução
    //$id = prepareQuery($conn, $readID, "ss", array($safe_email, $time)); // este estava trocado com o de cima?
    $id = prepareQuery($conn, $readID, "s", array($safe_email)); // este estava trocado com o de cima?
    
    $conn->close();

	//remoção de dados temporários expirados
    removeOldSessions();

    return $id;
}

Um conselho que dou é dares uma olhadela em frameworks, não digo um Laravel que pode ser excessivo para o que queres fazer mas talvez o CodeIgniter, cakePHP, Lumen, etc, ajuda bastante.


Os meus programas em http://www.eskiso.net

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.