ATUALIZAR REGISTRO no BANCO DE DADOS
[Concluído]
Boa noite Professor, tudo bem?
Consegui avançar bastante...
Estou com uma dificuldade que não não consegui encontrar o problema... estous seguindo o curso de Laravel 10... e na parte de formularios de atualização, consegui trazer os dados todos corretos para atualizar o registro... no momento de atualisar com $user->update($data), não funciona,
Tentei tambem usar o User:: não funcionou. o $user->save() tambem não deu certo... ele apenas volta para a listagem de dados sem fazer alteração.
atualizei o github. https://github.com/ubiratanlima/RELIG-SYS
Gratidão... acho que eu devo ter feito alguma coisa grave no laravel, mas ja fiz e refiz e paro no mesmo ponto... Salvar ele salva, atualizar ele não atualiza.
Olá, Ubiratan! Tudo bem?
Fico feliz que está conseguindo progredir, a tendência é só melhorar.
Estou sem acesso ao GitHub, poderia compartilhar comigo o trecho do código?
Boa tarde.
Adicionei o git
https://github.com/ubiratanlima/RELIG-SYS
Tambem avancei nos dados. percebi que ele está travando em alguma validação do whatsapp... mas ja tirei tudo e ele fica informando o seguinte, mas apenas utilizando o SAVE $user->save($data);
SQLSTATE[HY000]: General error: 1364 Field 'whatsapp' doesn't have a default value (Connection: mysql, SQL: insert into `users` (`updated_at`, `created_at`) values (2023-12-18 07:09:47, 2023-12-18 07:09:47))
Estou entendendo que ele esá falando que não existe dado no campo whatsapp, mas se eu dou um dd($data); , eu pego o valor e está correto... eu tirei as validações e mesmo assim ele trava ai, acredito que o update esteja travando no mesmo lugar, mas eu não sei debugar essa parte... seu colocar o dd antes, no edit, verificar os dados, e colocar o dd para verificar as primeiras informações que chega... depois que chega existe um tratamento, que ainda não tirei... mas estou fazendo os testes nesse momento. Mas parece que estou correndo atras do rabo... rsrsrsrs paro sempre no mesmo lugar. rsrsrs
Aguardo sua opinião... esse sistema está meio frank... rsrsrs
Isso daqui é perigoso, porque vc expõe informações do seu banco:
https://github.com/ubiratanlima/RELIG-SYS/blob/main/app/Http/Controllers/UserController.php#L54
Aqui nessa validação, você poderia usar um regex, ou usar algum pacote do Laravel com validações de WhatsApp e etc:
https://github.com/ubiratanlima/RELIG-SYS/blob/main/app/Http/Requests/StoreUpdateUserFormRequest.php#L53C18-L53C34
--
Faz um debug, para ver o que retorna:
dd(User::create($data));
É importante, até mesmo para saber se está chegando no controller, se não chegou, é porque não está passando pela validação.
Não entendi a esposição do banco de dados, a linha que eu monto o nome do arquivo? é por causa do dado que informo algue pode pegar e explorar pelo id? (vou modificar).
sobre a validação, estou utilizando a do laravellegends.
Na parte do User::create($data) ele retorna certinho, tudo que preciso.
Meu problema está no no método update.
Coloquei como NULLABLE o campo, mas ele não pode ser null... fiz isso e o problema passou para o proximo problema de NOT NULL, ou seja todos os campos que são NOT NULL estão dando problema, mesmo não estando NULL.
SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (Connection: mysql, SQL: insert into `users` (`updated_at`, `created_at`) values (2023-12-19 06:44:51, 2023-12-19 06:44:51))
rodei novamente colocando null para cpf, e olha só...
SQLSTATE[HY000]: General error: 1364 Field 'cpf' doesn't have a default value (Connection: mysql, SQL: insert into `users` (`updated_at`, `created_at`) values (2023-12-19 06:44:51, 2023-12-19 06:44:51))
fiz o debug no metodo update com o User::create($data) da resultado de chave duplicada...
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'users_email_unique' (Connection: mysql, SQL: insert into `users` (`name`, `data_nascimento`, `email`, `gender`, `whatsapp`, `telefone`, `especialidade`, `rg`, `cpf`, `crp`, `password`, `status`, `profile`, `updated_at`, `created_at`) values (FELIX 2000 111, 2023-12-05, [email protected], feminino, (12) 99999-9999, (12) 8888-8888, 6, 12.312.312-3, 351.941.800-20, 92/849492, $2y$10$h4FA2KEODNrPikR6sz/pCuHucKWRyNiIW3bHXUgZck4m5aGFk.lSa, active, profissional, 2023-12-19 07:26:37, 2023-12-19 07:26:37))
Mas os dados estão ai.
Ah sim, achei que era no cadastro, não tinha ficado claro.
Vc passou um array para o método save, por isso não funciona:
https://github.com/ubiratanlima/RELIG-SYS/blob/main/app/Http/Controllers/UserController.php#L176
Deve usar o método update: $user->update($data);
Bom dia Prof. Eu utilizei e não gravou no banco. foi o primeiro que usei. o que ele faz é redirecionar para a listagem no final sem fazer alteração nenhuma... estou fazendo o teste alterando apenas o nome...
Está passando por este if? https://github.com/ubiratanlima/RELIG-SYS/blob/main/app/Http/Controllers/UserController.php#L124
Coloca um dd após ele, para debugar.
SIM
Tem um print do resultado do debug? Quero ver o que tem no $user
ok. vou mandar no ZAP. aqui eu não consigo colocar os prints.
Dúvidas técnicas é somente por aqui, sobe o print para qualquer site de upload de imagens, ex: https://uploaddeimagens.com.br/
public function update(Request $request, string $id)
{
if (!$user == User::find($id)) {
return back();
}
$data = $request->all();
if ($request->foto) {
$extension = $request->foto->getClientOriginalExtension();
// $data['foto'] = $request->foto->store('profissionais');
$data['foto'] = $request->foto->storeAs('profissionais', bcrypt($request->crp).".".$extension);
}
$data['whatsapp'] = preg_replace("/[^0-9]/", "", $data['whatsapp']); // use mutators
$data['status'] = 'active';
$data['profile'] = 'profissional';
$user->update($data);
return redirect()->route('profissionais');
}
coloquei um album com os prints. Perdão por enviar pelo whatsapp. não acontecerá mais... disponibilizei esse album no google, para facilitar o envio organizado.
https://photos.app.goo.gl/YoGd4sPH6Aw9WwmY6
Irei limpando quando as duvidas forem sendo solucionadas...
nessa linha:
$data['whatsapp'] = preg_replace("/[^0-9]/", "", $data['whatsapp']); // use mutators
mesmo que eu deixe, o numero puro. da o mesmo erro. se deixo formatado tambem da o mesmo erro.
Eu fiz um teste deixando tudo null, ele tambem não grava... passar por todo código e no momento de gravar não grava.
Qual erro? Print por favor
Ele não traz erros, apenas volta para a listagem, sem alterar nada. https://uploaddeimagens.com.br/imagens/uGdpPps
Se eu trocar $user->update($data) por $user->save($data) ele traz o erro do valor default do banco de dados.
Qual o retorno disso?
dd($user->update($data));
Deixou o código igual ao que te passei acima?
false // app/Http/Controllers/UserController.php:176
exatamenta na linha do codigo
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!