Ir para conteúdo
Fórum Script Brasil
  • 0

Preciso de ajuda para "session_start()"...


Carloscba

Pergunta

Estou fazendo uma lista de tarefa com login, pagina principal e mais coisas a adicionar, mas sem adicionar a session_start funciona que e uma beleza, mas quando adiciono ela para ligar ao bd da erro.

Funciona normal, quando coloco "session_start()" não conecta, da erro e não acha a pagina mais..

login:

<?php
// login.php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Include database connection
    include('db.php');
 
    $username = $_POST['username'];
    $password = $_POST['password'];
 
    // Check credentials
    $sql = "SELECT * FROM users WHERE username = '$username'";
    $result = mysqli_query($conn, $sql);
    $user = mysqli_fetch_assoc($result);
 
    if (password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header('Location: tasks.php');
    } else {
        echo "Invalid credentials!";
    }
}
?>


tasks:
 

<?php
// tasks.php
session_start();
include('db.php');
 
// Fetch tasks for the logged-in user
$user_id = $_SESSION['user_id'];
$sql = "SELECT * FROM tasks WHERE user_id = '$user_id'";
$result = mysqli_query($conn, $sql);
 
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>Task List</title>
</head>
<body>
    <h1>Task List</h1>
    <div class="task-container">
        <?php while($task = mysqli_fetch_assoc($result)): ?>
            <div class="task">
                <h2><?php echo $task['title']; ?></h2>
                <p><?php echo $task['description']; ?></p>
                <p>Start: <?php echo $task['start_date']; ?> | End: <?php echo $task['end_date']; ?></p>
                <p>Author: <?php echo $task['author']; ?></p>
                <a href="edit_task.php?id=<?php echo $task['id']; ?>">Edit</a>
                <a href="delete_task.php?id=<?php echo $task['id']; ?>">Delete</a>
            </div>
        <?php endwhile; ?>
    </div>
    <a href="new_task.php">Create New Task</a>
</body>
</html>
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Testei assim e funciou tb:
connection.php

<?php

// defina as variáveis de conexão
$config = [
  'db_host' => 'localhost',
  'db_user' => 'root',
  'db_pass' => 'my-secret-pw',
  'db_name' => 'scriptbrasil',
];

// tenta estabelecer conexão:
try {
  $sqli = new mysqli($config['db_host'], $config['db_user'], $config['db_pass']);
  // define o padrão de caracteres
  $sqli->set_charset('utf8');
  // selecionar/abrir o banco de dados para trabalhar
  $sqli->select_db($config['db_name']);
} catch (Exception $e) {
  // se não conseguir estabelecer conexão, exibe erro
  exit('<p><b>Falha na conexão</b>: ' . $e->getMessage() . '</p>');
}

return $sqli;

database.sql

drop schema if exists scriptbrasil;
create schema scriptbrasil;
use scriptbrasil;
--
--
--
create table users(
id int(9) AUTO_INCREMENT PRIMARY KEY,
username varchar(255),
`password` varchar(255),
created_at timestamp default current_timestamp
) Engine = InnoDB;
--
insert into users(username, `password`)
values (
    'user@email.com',
    '$2y$10$DQMbURH5W/29aw7gA59Rdu9DpC0Vk3Qfzkjc1DcWvN.wtoUXwODiK'
  ),
  (
    'admin@email.com',
    '$2y$10$DQMbURH5W/29aw7gA59Rdu9DpC0Vk3Qfzkjc1DcWvN.wtoUXwODiK'
  );
--
--
--

create table tasks(
  id int(9) AUTO_INCREMENT PRIMARY KEY,
  title varchar(255),
  description varchar(255),
  user_id int(9),
  author varchar(255),
  start_date datetime,
  end_date datetime,
  created_at timestamp default current_timestamp,
  constraint foreign key(user_id) references users(id)
) Engine = InnoDB;
--
insert into tasks(user_id, title, description, author, start_date, end_date)
values (
    1,
    'Task 1',
    'lorem ipsum dolor sit amet',
    'Author 1',
    '2024-01-01 00:00:00',
    '2025-01-01 00:00:00'
  ),
  (
    1,
    'Task 2',
    'consectetur adipisicing elit',
    'Author 2',
    '2024-08-01 00:00:00',
    '2025-10-01 00:00:00'
  ),
  (
    2,
    'Task 3',
    'sed do eiusmod tempor incididunt',
    'Author 3',
    '2024-08-30 00:00:00',
    '2024-09-05 00:00:00'
  ),
  (
    2,
    'Task 4',
    'ut labore et dolore magna aliqua',
    'Author 4',
    '2024-09-02 00:00:00',
    '2024-09-05 00:00:00'
  );

index.php

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Tasks Login</title>
  <style>
    label {
      display: block;
    }

    .mb-3 {
      margin-bottom: 1rem;
    }

    .my-3 {
      margin-top: 1rem;
      margin-bottom: 1rem;
    }

    .text-danger {
      color: brown;
    }
  </style>
</head>

<body>
  <div class="container">
    <h3>System</h3>
    <form action="login.php" method="post">
      <div class="row">
        <div class="col">
          <label>Login</label>
          <input type="email" name="email" required />
        </div>
        <div class="col my-3">
          <label>Password</label>
          <input type="password" name="password" required />
        </div>
        <div class="col text-danger mb-3">
          <?php
          if (isset($_SESSION['flash'])) {
            echo $_SESSION['flash'];
            unset($_SESSION['flash']);
            session_write_close();
          }
?>
        </div>
        <div class="col">
          <button>Login</button>
        </div>
      </div>
    </form>
  </div>
</body>

</html>

login.php

<?php

function redirectWithFlash(string $message)
{
  $_SESSION['flash'] = $message;
  header('Location: ./');
  exit();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  session_start();
  // Include database connection
  $conn = include 'connection.php';

  $username = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
  $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_SPECIAL_CHARS);

  // Check credentials
  $query  = "SELECT * FROM users WHERE username = '$username'";
  $result = $conn->query($query);

  if (!$result->num_rows) {
    redirectWithFlash('user not found');
  }

  $user = $result->fetch_assoc();

  if (password_verify($password, $user['password'])) {
    unset($user['password']);
    $_SESSION['user'] = $user;
    header('Location: tasks.php');
    exit();
  }

  redirectWithFlash('Invalid credentials!');
}

header('Location: ./');
exit();

tasks.php

<?php
// tasks.php
session_start();
// check if user is logged in
if (!isset($_SESSION['user'])) {
  header('Location: ./');
  exit();
}
$conn = include 'connection.php';

// Fetch tasks for the logged-in user
$query  = 'SELECT * FROM tasks WHERE user_id = ' . $_SESSION['user']['id'];
$result = $conn->query($query);
$tasks  = $result->fetch_all(MYSQLI_ASSOC);
?>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="styles.css">
  <title>Task List</title>
</head>

<body>
  <h1>Task List</h1>
  <div class="task-container">
    <?php foreach ($tasks as $task) { ?>
      <div class="task">
        <h2><?= $task['title'] ?></h2>
        <p><?= $task['description'] ?></p>
        <p>Start: <?= $task['start_date'] ?> | End: <?= $task['end_date'] ?></p>
        <p>Author: <?= $task['author'] ?></p>
        <a href="edit_task.php?id=<?= $task['id'] ?>">Edit</a>
        <a href="delete_task.php?id=<?= $task['id'] ?>">Delete</a>
      </div>
    <?php } ?>
  </div>
  <a href="new_task.php">Create New Task</a>
</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Testei os dois códigos, e não encontrei nenhum erro. O problema é que fiz uma adaptação para fazer os códigos funcionarem, seria necessário todos os códigos para ver exatamente o que acontece. O mais importante é incluir as mensagens de erro, coisa que você não fez. Mas se você suspeita que a função session_start( ) está bloqueando o acesso ao banco de dados, tente isso:

<?php // index.php
session_start();
$conn=new mysqli("localhost","root","","terminais");
$teste=$conn->query("select * from users");
var_dump($teste);

As adaptações que eu fiz para fazer o seu código funcionar estão aqui:

<?php // index.php
// include('db.php'); mysql users(id,username,password); mysql tasks(id,user_id)
session_start();
$conn=new mysqli("localhost","root","","terminais");
// $hashed=password_hash('1234',PASSWORD_BCRYPT);
// $conn->query("insert into users (username,password) values ('frank','$hashed')");
$username = 'frank'; // $_POST['username'];
$password = '1234'; // $_POST['password'];
// Check credentials
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
$user = mysqli_fetch_assoc($result);
if (password_verify($password, $user['password'])) {
    $_SESSION['user_id'] = $user['id'];
    // header('Location: tasks.php');
} else {
    echo "Invalid credentials!";
}

$user_id = $_SESSION['user_id'];
$sql = "SELECT * FROM tasks WHERE user_id = '$user_id'";
$result = mysqli_query($conn, $sql);
 
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>Task List</title>
</head>
<body>
    <h1>Task List</h1>
    <div class="task-container">
        <?php while($task = mysqli_fetch_assoc($result)): ?>
            <div class="task">
                <h2><?php echo $task['title']; ?></h2>
                <p><?php echo $task['description']; ?></p>
                <p>Start: <?php echo $task['start_date']; ?> | End: <?php echo $task['end_date']; ?></p>
                <p>Author: <?php echo $task['author']; ?></p>
                <a href="edit_task.php?id=<?php echo $task['id']; ?>">Edit</a>
                <a href="delete_task.php?id=<?php echo $task['id']; ?>">Delete</a>
            </div>
        <?php endwhile; ?>
    </div>
    <a href="new_task.php">Create New Task</a>
</body>
</html>

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...