Sebastião Teixeira Posted September 11, 2020 at 08:18 PM Report Share #619327 Posted September 11, 2020 at 08:18 PM 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 Link to comment Share on other sites More sharing options...
eSkiSo Posted September 18, 2020 at 08:55 PM Report Share #619380 Posted September 18, 2020 at 08:55 PM 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 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now