Não atualiza usuario!

,

Bom galera, tenho um problema, estou tentando atualizar um usuário cadastrado no banco de dados, utilizando PDO, porem não tenho conseguido que o mesmo seja atualizado segue abaixo código do meu arquivo edit.php.

require_once 'init.php';
// resgata os valores do formulário
$nome = isset($_POST['nome']) ?$_POST['nome'] : null;
$senha = isset($_POST['senha']) ?$_POST['senha'] : null;
$email = isset($_POST['email']) ?$_POST['email'] : null;
$login = isset($_POST['login']) ?$_POST['login'] : null;
$endereco = isset($_POST['endereco']) ?$_POST['endereco'] : null;
$datanasc = isset($_POST['datanasc']) ?$_POST['datanasc'] : null;
$telefone = isset($_POST['telefone']) ?$_POST['telefone'] : null;
$cpf = isset($_POST['cpf']) ?$_POST['cpf'] : null;
$cidade = isset($_POST['cidade']) ?$_POST['cidade'] : null;
$estado = isset($_POST['estado']) ?$_POST['estado'] : null;
$cep = isset($_POST['cep']) ?$_POST['cep'] : null;
$id = (isset($_POST['id'])) ? $_POST['id'] : null;

// atualiza o banco senha = :senha,  cpf = :cpf,
$PDO = db_connect();
$sql ="UPDATE usuarios SET nome = :nome,  email = :email, login = :login, endereco = :endereco, datanasc = :datanasc, 
telefone = :telefone,  cidade = :cidade, cpf = :cpf, estado = :estado, cep = :cep WHERE id = :id";
$stmt =$PDO->prepare($sql);
$stmt->bindParam(':nome',$nome);
$stmt->bindParam(':email',$email);
$stmt->bindParam(':login',$login);
$stmt->bindParam(':endereco',$endereco);
$stmt->bindParam(':datanasc',$isoDate);
$stmt->bindParam(':telefone',$telefone);
$stmt->bindParam(':cidade',$cidade);
$stmt->bindParam(':estado',$estado);
$stmt->bindParam(':cep',$cep);
$stmt->bindParam(':cpf',$cpf);
$stmt->bindParam(':id', PDO::PARAM_INT);//,$id);
if ($stmt->execute())
{
header('Location: pageuser.php');
}
else
{
echo "Erro ao alterar";
print_r($stmt->errorInfo());
}

os dados vem através de uma session!

Qualquer explicação será bem vinda!

Boa tarde,

Provavelmente isto ocorre pois, a variável $id está com valor nulo. Assim, na hora de executar o update o comando retorna nulo e não encontra resultado. Você poderia alterar a condição que verifica se o valor foi recebido para não tentar efetuar o update quando as variáveis estiverem sem conteúdo pois, se tudo for nulo e o id estiver correto é melhor não correr o risco de sobrescrever os dados de um usuário de verdade.

Além disso, de acordo com a documentação do PHP também está faltando definir a variável $id no bindParam

$stmt->bindParam(':id', $id, PDO::PARAM_INT)

http://php.net/manual/pt_BR/pdostatement.bindparam.php

Consegui resolver, a forma com que estava passando o campo ID para atualizar estava errada! Como faço para colocar resolvido!

Apenas uma dica, caso use a versão 7+ do php, pode mudar essa linha…

$nome = isset($_POST['nome']) ? $_POST[‘nome’] : null;

Para o novo operador coalesce…

$nome = $_POST['nome'] ?? null;

Isso evita falta de atenção deixando o código mais enxuto…

Melhor ainda seria usar funções de filtro, evita ataques no site…

    $nome = filter_input(INPUT_POST, 'nome'); //PHP 5 e 7

Pesquise mais a respeito…
Quanto ao resolvido, procure na resposta um campo de flag/tique ao lado do “coraçãozinho” :joy: