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

Alterar dados com método getUsuario


Lúcio Flávio da Silva Sales

Pergunta

Estou tentando terminar a parte de alteração de dados de usuário num curso do SENAC, mas o negócio está enrolado.

 

 

 

Inicialmente vem uma imagem com o código abaixo para ser acrescentado na view index.php, que chama a sessão e busca o id do usuário:

 

if($resposta == "Sucesso") {
session_start();
$_SESSION["usuario_id"] = $objUsuario->getId();

header("Location: http://localhost/ecommerce/Views/Produto/listagem_produtos.php");}

 

É mandado fazer um método no arquivo usuario_controller.php, para receber o id do usuário:

<?php

...

public function getUsuario($_SESSION["usuario_id"]) {
$sql = "SELECT * FROM Usuarios WHERE id = $id";
return $_SESSION['usuario_id'];
}

Não há instruções específicas para criar o método, apenas é dito para fazer de acordo com os conhecimentos obtidos nas etapas anteriores, embora eu discorde que os conhecimentos anteriores sejam suficientes para deduzir a escrita dessa função.

 

As instruções são as seguintes:

"Na página de edição, vamos iniciar a sessão e criar uma variável $usuario, que vai receber um usuário do método getUsuario($_SESION[‘usuario_id’]), que deve ser criado no seu respectivo controller. Esse método recebe como parâmetro o id do usuário, que armazenamos na variável $_SESSION, seleciona o usuário através da instrução “SELECT * FROM Usuarios WHERE id = $id” e retorna o resultado obtido. Nosso código na view fica como na imagem a seguir".

 

Na imagem vem esse código que deve ser usado para criar o arquivo editar_usuario.php

session_start();

$usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]);

if (isset($_POST['editar'])) {
$objUsuario = new Usuario($_POST['nome'], $_POST['email'], $_POST['senha'], $_POST['endereco']);


        $controllerUsuario = new UsuarioController();

        $resposta = $controllerUsuario->Editar($usuario['ID'],$objUsuario);
//        $resposta = $controllerUsuario->editaUsuario($usuario['ID'],$objUsuario); // Mudei o nome do método pois não existe método com o nome editaUsuario.

        if($resposta == "Sucesso"){
        $usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]); // Não entendi o objetivo dessa linha. Ela está declarada na abertura da sessão.
            echo "Conta salva com sucesso!";

        }else{
            echo $resposta;            
        }


}
 

 

Mas a linha 32 do usuario_controller.php:

public function getUsuario($_SESSION["usuario_id"]) {

gera o seguinte erro quando acionado o botão para logar no index.php:

 

Parse error: syntax error, unexpected token "[", expecting ")" in /opt/lampp/htdocs/ecommerce/Controllers/usuario_controller.php on line 32

 

Já pesquisei muito sobre essa escrita, mas não encontro nada parecido para comparar com o essa construção suugerida no curso.

Vou passar o link do arquivo php_senac.zip com os arquivos index.php e usuario_controller.php, caso seja necessário analisar mais detalhes do código. Também passo a apostila com as instruções do curso.

 

http://luciocatende.com/php_senac.zip

 

É lamentável que a tutoria do curso é deficiente no auxílio ao aluno. Tenho encontrado muita dificuldade para realizar a última etapa do curso, que trata da alteração e exclusão de registros no banco de dados.

Agradeço se alguém puder me ajudar.

 

 

 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 1

O arquivo zipado está com o arquivo PDF corrompido e também está faltando o código do conexao.php, mesmo assim, eu consegui fazer um código tão safado quanto o do Senac. Apesar de safado, ele funciona (pelo menos, até onde eu testei). Ele inclui, altera e exclui a conta do usuário, e só ocupa um arquivo ao invés de quatro arquivos que está no zip.

 

<!DOCTYPE html>
<html>
<body style="width:500px;margin:0 auto;margin-top:100px">
<?php if(isset($_GET['home'])){
	echo "Sinto muito, essa página não está pronta.";exit;} ?>
<form>
	E-mail:<input type=email name=email><p>
	Senha: <input type=password name=senha><p>
	<button type=submit>Entrar</button>
</form>
<?php
// esse código precisa de uma tabela no mysql: usuarios(id,email,senha)
if(isset($_GET['cadastrar'])){
	$Usuario=new Usuario();
	$Usuario->cadastrar();}
if(isset($_GET['editar'])){
	$Usuario=new Usuario();
	$velhoEmail=$_GET['velhoEmail'];
	$novoEmail=$_GET['editar'];
	$Usuario->editar($novoEmail,$velhoEmail);}
if(isset($_GET['excluir'])){
	$Usuario=new Usuario();
	$excluir=$_GET['excluir'];
	$Usuario->excluir($excluir);}

if(!isset($_GET['email'])){exit;}


class Usuario {
	public $id,$nome,$email,$senha,$endereco,$conexao;
	public function __construct(){
		$this->conexao = new mysqli("localhost","root","","laravel");
		return $this->conexao;}
	public function validaUsuario() {
		if ($this->validaEmail()) {
			if ($this->senha== null || strlen($this->senha) < 6) {
				return "Preencha a senha com no mínimo 6 caracteres!"; }
		return $this->Login();}}
	public function validaEmail() {
		if ($this->email == null) {
			echo "O e-mail é indispensável";
			return false;}
		elseif(strlen($this->email)>45) {
			echo "E-mail deve ter até 45 caracteres";
			return false;}
		return true;}
	public function Login() {
		$sql = "select * from usuarios where email = '$this->email'";
		$resposta = $this->conexao->query($sql);
		$usuario = $resposta->fetch_assoc();
		if (!$usuario) {
			echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;}
		elseif ($usuario['senha'] != $this->senha) {
				echo "Senha incorreta";exit;}
		echo "
		<table>
		<tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para 
			<td><form><input type=email name=editar onchange=submit()>
			<input type=hidden name=velhoEmail value=$this->email></form>
		<tr><td>Opção 2: <td>excluir o email $this->email 
			<td><form>
			<input name=excluir type=submit value=Excluir onchange=submit()>
			<input type=hidden name=excluir value=$this->email>
			</form>
		<tr><td>Opção 3: <td>ir para o Home Page 
			<td><form><input name=home type=submit value='Home Page'></form>
		</table>";}
	public function Cadastrar() {
		$this->email=$_GET['cadastrar'];
		$this->senha=$_GET['senha'];
		$sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')";
		if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}}
	public function Editar($novoEmail,$velhoEmail) {
		$sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'";
		if (!mysqli_query($this->conexao, $sql)) {
			return "Erro na tentativa de editar";exit;}}
	public function Excluir($email){
		$sql = "delete from usuarios where email='$email'";
		if (!mysqli_query($this->conexao, $sql)) {
			return "Erro na tentativa de editar";exit;}}
}


$Usuario = new Usuario();
$Usuario->email=$_GET['email'];
$Usuario->senha=$_GET['senha'];
$resposta = $Usuario->validaUsuario($Usuario);
?>

 

Link para o comentário
Compartilhar em outros sites

  • 1

Projeto Senac 2.0, atualizado em 10/08/2023 02:11 hs (ufa, terminei!)

O que dá mais trabalho com as classes é que eu sempre esqueço que todas as informações que foram gravadas na classe desaparecem, assim que você aperta o botão submeter.

Estava pensando em até criar um $_SESSION['classes'], mas o propósito desse projeto é outro. Ele é para ver como funcionam as classes. Eu acho difícil trabalhar com eles, eu prefiro mais o estilo dissertativo, a gente vai escrevendo o que der na telha.

MySQL

CREATE TABLE `usuarios` (
  `id` int NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `senha` varchar(255) NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `endereco` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 

---------------------------------------------------------------------------------------

index.php

<?php
require('classes.php');
$Usuario=new Usuario();
if(isset($_POST['email'])){
	$_SESSION['email']=$_POST['email'];
	$_SESSION['senha']=$_POST['senha'];}
if(isset($_SESSION['email'])){
	$email=$_SESSION['email'];
	$senha=$_SESSION['senha'];} else {$email="";$senha="";}
?>
<form method=post action=validar.php>
	<label class="text-primary h4">E-mail:</label> 
	<input class="form-control" type=text  name=email 
		placeholder= "Preencha seu e-mail" value='<?=$email?>' required><br>
	<label class="text-danger h4">Senha:</label>
	<input class="form-control" type=text name=senha 
		placeholder= "Preencha sua senha" value='<?=$senha?>'><br>
	<button class="btn btn-primary" name="logar" type="submit">
		Entrar</button>
	<button class="btn btn-primary" name="novo" type="submit">
		Novo</button>
	<button class="btn btn-primary" name="alterar" type="submit">
		Alterar</button>
	<button class="btn btn-primary" name="excluir" type="submit">
		Excluir</button>
</form>
<br><br><font size=4 color=red><i>
<div id=mensagem><?=$_SESSION['mensagem']?><div></i>
</body>
</html>
-----------------------------------------------------------------------------
 
cadastro.php
 
<?php
require('classes.php');
$Usuario=new Usuario();
if(isset($_POST['nome'])){
    $Usuario->nome = $_POST['nome'];
    $Usuario->email = $_POST['email'];
    $Usuario->senha = $_POST['senha'];
    $Usuario->endereco = $_POST['endereco'];
    $Usuario->cadastrar();
    $_SESSION['mensagem']="Nova conta já cadastrada.";
    header('location:index.php');}
$email=$_SESSION['email'];
$senha=$_SESSION['senha'];
$teste=$Usuario->validaUsuario($email,$senha);
if($teste=="Senha incorreta" || $teste=="Sucesso"){
    $_SESSION['mensagem']="Essa conta já está cadastrada";
    header('Location:index.php');}
?>
<form method=post>
    <label class="text-primary h4">Nome:</label> 
    <input class="form-control" name=nome required><br>
    <label class="text-primary h4">E-mail:</label> 
    <input class="form-control btn btn-warning" name=email 
        value=<?=$email?>><br><br>
    <label class="text-primary h4">Senha:</label> 
    <input class="form-control btn btn-warning" 
        name=senha value=<?=$senha?>><br><br>
    <label class="text-primary h4">Endereço:</label> 
    <input class="form-control" name=endereco required><br><br>
    <input class="form-control btn btn-primary" type=submit><br><br>  
</form>
<input class="form-control btn btn-primary" type=submit
        Value=Cancelar onclick="location.replace('index.php')">
  
-----------------------------------------------------------------------
classes.php

 <!DOCTYPE html>
<html>
<title>Projeto Senac 2.0</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css"
	rel="stylesheet" 
	integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" 
	crossorigin="anonymous">
<body class="w-25 mx-auto mt-5">

<?php
session_start();
class Usuario {
    public $host="localhost";
    public $user="root";
    public $password="";
    public $database="laravel";
    public $query, $link, $result, $id, $nome, $email, $senha, $endereco;
    public function MySQL(){}
    public function getConexao(){
        $this->link=mysqli_connect($this->host,$this->user,$this->password);
        if(!$this->link){
            echo "Falha na conexão com o Banco de Dados! <br>";
            echo "Erro:".mysqli_error($this->link);
            die();}
        elseif(!mysqli_select_db($this->link,$this->database)){
            echo "O Banco de Ddos solicitado não pode ser aberto! <br>";
            echo "Erro:".mysqli_error($this->link);
            die();}}
    public function excluir($id){
        $sql="delete from usuarios where id=$id";
        $resposta=$this->query($sql);
        return $resposta;}
    public function query($query){
        $this->getConexao();
        $this->query=$query; 
        if($this->result=mysqli_query($this->link,$this->query)){
            mysqli_close($this->link);
            return $this->result;} else {
                echo "Ocorreu um erro na execução dda SQL";
                echo "Erro:".mysqli_error($this->link);
                echo "SQL:".$query;
                die();
                return mysqli_close($this->link);}}
    public function Cadastrar() {
        $sql = "INSERT INTO  Usuarios (nome,email,senha,endereco) VALUES
            ('$this->nome','$this->email','$this->senha','$this->endereco')";
        if ($this->query($sql)) {return "Sucesso";} else {
            return "Erro na tentativa de cadastrar";}}
    public function Editar() {
        $sql="update usuarios set nome='$this->nome',email = '$this->email',
            senha='$this->senha',endereco='$this->endereco' where id=$this->id";
        if ($this->query($sql)) {return "Sucesso";} else {
            return "Erro na tentativa de editar";exit;}}
    public function validaUsuario($email,$senha) {
        $this->email=$email;
        $this->senha=$senha;
        if (strlen($this->email) > 100) {
            echo "E-mail deve ter até 100 caracteres";
            return false;}
        if ($this->senha == null || strlen($this->senha) < 6) {	
            return "Preencha a senha com no mínimo 6 caracteres!"; }
        $sql = "select * from usuarios where email='$this->email'";
        $resposta = $this->query($sql);
        $usuario = $resposta->fetch_assoc();
        if ($usuario==null) {
            $_SESSION['mensagem']="Email não cadastrado";
            header('location:index.php');exit;}
        if ($usuario['senha'] != $this->senha) {
                $_SESSION['mensagem']="Senha incorreta";
                header('location:index.php');exit;}
        $_SESSION['usuario']=$usuario['nome'];
        $this->id=$usuario['id']; 
        $this->nome=$usuario['nome'];
        $this->email=$usuario['email'];
        $this->senha=$usuario['senha'];
        $this->endereco=$usuario['endereco'];
        return "Sucesso";}
    }

?>
  
-----------------------------------------------------------------------------
editar.php
  
<?php
require('classes.php');
$Usuario=new Usuario();
if(isset($_POST['nome'])){
	$Usuario->id=$_POST['id'];
    $Usuario->nome = $_POST['nome'];
    $Usuario->email = $_POST['email'];
    $Usuario->senha = $_POST['senha'];
    $Usuario->endereco = $_POST['endereco'];
    $_SESSION['email']=$_POST['email'];
    $_SESSION['senha']=$_POST['senha'];
    $Usuario->editar();
    $_SESSION['mensagem']="Cadastro atualizado.";
    header('location:index.php');}
$Usuario->email=$_SESSION['email'];
$Usuario->senha=$_SESSION['senha'];
$Usuario->validaUsuario($Usuario->email,$Usuario->senha);
$id=$Usuario->id; 
$nome=$Usuario->nome;
$email=$Usuario->email;
$senha=$Usuario->senha;
$endereco=$Usuario->endereco;
?>
<form method=post>
	<input type=hidden name=id value=<?=$id?>>
    <label class="text-primary h5">Nome:</label> 
    <input class="form-control" name=nome value='<?=$nome?>'><br>
    <label class="text-primary h5">E-mail:</label> 
    <input class="form-control" name=email 
        value='<?=$email?>'><br>
    <label class="text-primary h5">Senha:</label> 
    <input class="form-control" 
        name=senha value='<?=$senha?>'><br>
    <label class="text-primary h5">Endereço:</label> 
    <input class="form-control" name=endereco value='<?=$endereco?>'><br>
    <input class="form-control btn btn-primary" type=submit value=Atualizar><br><br> 
</form>
<input class="form-control btn btn-primary" type=submit
        Value=Cancelar onclick="location.replace('index.php')">
------------------------------------------------------------------------------------
excluir.php
  
<?php
require('classes.php');
$Usuario=new Usuario();
if(isset($_POST['excluir'])){
    $id=$_POST['id'];
    $Usuario->excluir($id);
    $_SESSION['mensagem']="Essa conta acabou de ser excluido.";
    header('location:index.php');}
$Usuario->email=$_SESSION['email'];
$Usuario->senha=$_SESSION['senha'];
$Usuario->validaUsuario($Usuario->email,$Usuario->senha);
$id=$Usuario->id;
$nome=$Usuario->nome;
$email=$Usuario->email;
$senha=$Usuario->senha;
$endereco=$Usuario->endereco;
?>
<form method=post>
    <input name=id type=hidden value=<?=$id?>>
    <label class="text-primary h5">Id: <?=$id?> Nome:</label> 
    <input class="form-control btn btn-warning" value='<?=$nome?>'><br><br>
    <label class="text-primary h5">E-mail:</label> 
    <input class="form-control btn btn-warning" 
        value='<?=$email?>'><br><br>
    <label class="text-primary h5">Senha:</label> 
    <input class="form-control btn btn-warning" 
        name=senha value='<?=$senha?>'><br><br>
    <label class="text-primary h5">Endereço:</label> 
    <input class="form-control btn btn-warning" value='<?=$endereco?>'><br><br>
    <input class="form-control btn btn-primary" type=submit name=excluir value='Confirmar exclusao'><br><br> 
</form>
<input class="form-control btn btn-primary" type=submit
        Value=Cancelar onclick="location.replace('index.php')">
---------------------------------------------------------------------------
produtos.php

<?php
include("classes.php");
?>
<pre>
O usuário logado é <?=$_SESSION['usuario']?>.
A rotina de produtos não foi implantada 
na versão 2.0
</pre>
<button class="btn btn-primary" onclick="location.replace('index.php')">Voltar</button>
  
----------------------------------------------------------------------------
  
<?php
include('classes.php');
$Usuario=new Usuario();
$_SESSION['mensagem']="";
$_SESSION['email']=$_POST['email'];
$_SESSION['senha']=$_POST['senha'];
if (isset($_POST['logar'])) { 
	$resposta = $Usuario->validaUsuario($_POST['email'],$_POST['senha']);
	if($resposta == "Sucesso") {header("Location:produtos.php");}
	else {$_SESSION['mensagem']=$resposta;
        header('location:index.php');}}
if(isset($_POST['novo'])){header('location:cadastro.php');}
if(isset($_POST['alterar'])){header('location:editar.php');}
if(isset($_POST['excluir'])){header('location:excluir.php');}



 

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

  • 0

Obrigado, Frank!

 

Testei aqui e ficou bom!

Se não for pedir demais, eu queria saber a função que carrega os dados no formulário para serem alterados. Acho que era isso a que se propunha o da aula do SENAC.

Vou tentar com o estilo teu no código do SENAC.

O problema naquele código é que ele dá a instrução com uso de (['usuario_id']) na função, e isso está sendo recusado. As [] dentro dos ().

 


 

Editado por Lúcio Flávio da Silva Sales
Falta de complemento.
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,4k
×
×
  • Criar Novo...