Editar dados de uma tabela criada com while - PHP - MYSQL

Pessoal estou com um problema, pois tenho essa tabela criada com while. e eu quero realizar update dos dadoscomo a data e a qtd de vagas, sendo via post. Como faço para pegar o id (id_periodos) para inserir na clausula WHERE do update? pois da forma que esta, esta alterando todos os registros da tabela no banco de dados.

<?php
require  '../banco.php';
                                             
include_once "../../../../lib/conexao.php";
                                
                                                                                             
$result_usuario = "SELECT id_periodo,date_format(dataInicio,'%d/%m/%Y')'dataInicio',
date_format(dataFim,'%d/%m/%Y')'dataFim',qtdVagas,qtdVagEstud,vgExp FROM periodo_ferias;";
                                                
$resultado_usuario = mysqli_query($conexao, $result_usuario);
while($dados = mysqli_fetch_assoc($resultado_usuario)) {
                                                    
    echo '<tr class="table-info">';
    echo '<td> <input style="width:60px;" name="periodo" type="text" value='. $dados['id_periodo'] .'></td>';
    echo '<td> <input style="width:120px;" name="dtInicio" type="text" value='. $dados['dataInicio'] .'></td>';
    echo '<td> <input style="width:110px;" name="dtFim" type="text" value='. $dados['dataFim'] .'></td>';
    echo '<td> <input style="width:70px;" name="qtdVagas" type="text" value='. $dados['qtdVagas'] .'></td>';                                                                                                                                                                                                 
    echo '</tr>';
}

if (!empty($_POST)) {
          
    $dtInicio   = $_POST ["dtInicio"];
    $dtFim  = $_POST ["dtFim"];
    $qtdVagas   = $_POST ["qtdVagas"];
    $id_periodo = $_POST ["periodo"];
   
    try {
        $pdo = Banco::conectar();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $sql = "UPDATE periodo_ferias set dataInicio = ?,dataFim = ?,qtdVagas = ? WHERE id_periodo = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($dtInicio,$dtFim,$qtdVagas,$id_periodo));
    
        Banco::desconectar();
                                                        
                                                        
    } catch (PDOException $e) {
        printf("falhou update Periodos: ".$e->getMessage());
    } 
                                                
}

No seu $_POST, já tem outras variáveis (dtInicio, dtFim, etc). Como você as está pegando? Estão vindo de um form ?

Sem mais detalhes, eu diria que o id precisa ser passado da mesma forma que esses valores (ex: inputs na página). Se for um campo que você não quer que o usuário possa editar, pode usar um input type hidden, passando o id pra ele.

Abraço.

Estou enviando via post mesmo, com botão de submit, so não pus ele no codigo. Essa solução eu ja tentei, e é a que esta mudando todos os registros no banco, pq, destaforma a clausula Where não esta identificando qual id_periodo deve ser alterado, ai altera todas as linha da tabela.

Você já está pegando o id_periodo do post em uma variável:

    $id_periodo = $_POST ["periodo"];

Então no seu form você precisa ter um controle chamado periodo que manda o valor para o post, da mesma forma que, suponho eu, você tem controles para os outros campos ( dtInicio, dtFim, qtdVagas).

Abraço.