Olá Pessoal !
Estou precisando tanto da ajuda de vcs. É que eu estou bem no inicio de PHP, e onde estou cursando, foi pedido para fazer o sistema abaixo , só que eu nao estou consequindo de jeito maneira. Se alquem deste forum poder me ajudar serem muito grato.
Construa uma classe Pessoa no arquivo classePessoa.php que estende a classe Banco (classeBanco.php) com os seguintes atributos:
id (privado)
cpf (público)
nome (público)
email (público)
Implemente os seguintes métodos:
construtor,
getId,
setId
Crie um arquivo chamado index.html que tenha um formulário que envie os dados para o arquivo cadastrarPessoa.php por método POST na seguinte configuração:
Campo para o cpf
Campo para o nome
Campo para o email
Botão de enviar o formulário
No arquivo cadastrarPessoa.php crie um objeto chamado pessoa que instancia a classe Pessoa, passados os dados de formulário como parâmetros para o construtor da classe.
Execute o método salvar, que foi herdado na classe Pessoa pela classe Banco.
Crie uma variável que irá receber o retorno do método listar (herdado da classe Banco) do objeto pessoa e utilize as informações obtidas para montar uma tabela com os dados de todas as pessoas cadastradas (id, cpf, nome e email).
Observação:
- Não esqueça de criar uma tabela no banco de dados com o id como auto-incremento.
- Não esqueça de testar os parâmetros passados para o método construtor.
- A função mysql_fetch_object joga os valores do array no objeto antes de invocar o método construtor.
- O uso de uma folha de estilos para deixar a interface mais bonita é opcional.
Segue todas as files e seus códigos:
index.html(formulario)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulario</title>
</head>
<body>
<form method='post' action='cadastrarPessoa.php'>
<label for='cpf'>CPF</label>
<input type="text" id="cpf" name="cpf">
<label for="nome">Nome</label>
<input type="text" id="nome" name="nome">
<label for="email">Email</label>
<input type="text" id="email" name="email">
<!-- Botão de envio do formulario -->
<input type='submit' balue='cadastrar'>
</form>
</body>
</html>
classePessoa.php
<?php
include('classeBanco.php');
class Pessoa extends Banco{
private $id;
public $cpf;
public $nome;
public $email;
function __construct($cpf, $nome, $email) {
$this->cpf = $cpf;
$this->nome = $nome;
$this->email = $email;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
}
cadastrarPessoa.php
<?php
include('classePessoa.php');
header('Content-Type: text/html; charset=utf-8');
// Checar se a algum request com o método post (Envio de formulario)
if(strtoupper($_SEVER['REQUEST_METHOD']) === 'POST') {
// Variaveis para pegar as entradas do formulario
$cpf = "";
$nome = "";
$email = "";
// Variavel para caso haja algum erro no envio do formualrio
$error_message = "";
// Checar se o envio do input cpf não está vazio
if(!empty($_POST["cpf"])) {
// preencher variavel de entrada com envio do input no formulario
$cpf = $_POST["cpf"];
} else {
// Caso input do cpf for enviado vazio
$error_message = $error_message . "Por favor, insira um cpf <br>";
// Cancela resto do código
exit;
}
if(!empty($_POST["nome"])) {
$name = $_POST["nome"];
} else {
$error_message = $error_message . "Por favor, insira um nome <br>";
exit;
}
if(!empty($_POST["email"])) {
$email = $_POST["email"];
} else {
$error_message = $error_message . "Por favor, insira um email <br>";
exit;
}
// Se a variavel de mensagem de erro não conter nenhum erro
// Criar a instancia de Pessoa
if(empty($error_message)) {
// Criar a instancia e passar todas as infomações
$pessoa = new Pessoa($cpf, $nome, $email);
// Chamada para o método salvar()
$pessoa->salvar();
// Chamada para o método listar()
// Inserindo os resultados em um variavel
$resutados = $pessoa->listar();
/* Nesse ponto teremos $resultados como um array associativo
com informação de todas pessoas do banco de dados, agora é só fazer
um loop no array, pegar as informações e coloca-las em variaveis e com as
variaveis criar um tabela em html
se for necessario checar como as chaves e valores estão organizadas no array
$resultados é só utlizar o seguinte método: */
echo '<pre>'
echo var_dump($resultados);
// Ignora todos os códigos abaixo
exit;
}
}
classeBanco.php
<?php
header('Content-Type: text/html; charset=utf-8');
$db_username = "Nome de usuario da conexão local";
$db_password = "Password da conexão local... se existir";
// Opções de cofificação de charset
$opçoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
try {
// Criando conexão com o banco através da metodologia PDO
$db = new PDO("mysql:host=localhost; dbname=NomeDaDataBase; charset=utf8", $db_username, $db_password, $opçoes);
$db->setAttribute(PDO::ATTR_MODE, PDO::ERRMODE_EXCEPTION);
// Query para criar a table no banco de dados
$sql = "CREATE TABLE IF NOT EXISTS pessoas(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
cpf VARCHAR(13) NOT NULL, nome VARCHAR(50) NOT NULL, email VARCHAR(70) NOT NULL)";
// Executar a query
$db->exec($sql);
} catch(PDOException $e) {
// Caso haja algum erro na conexão
// Printar mensagem
echo $e->getMessage();
exit;
}
// Método para slavar informações da pessoa
function salvar() {
try {
// Query para inserir informação da pessoa
// Não é necessario inserir o id pq ele já será auto_increment na table
$sql = "INSERT INTO pessoas(cpf, nome, email)
VALUES ('$this->cpf', '$this->nome', '$this->email') ";
// Executar a query
$db->exec($sql);
echo 'Informações inseridas com sucesso';
} catch(PDOException $e) {
echo $e->getMessage();
exit;
}
}
// Método para retornar todas pessoas
function listar() {
// Query para selecionar as pessoas no banco de dados
$sql = "SELECT cpf, nome, email FROM pessoas";
// Executar a query
$result = $db->query();
// Transforma os resultados em um array associativo
$result->fetchAll(PDO::FETCH_ASSOC);
// Retornando o array associativo
return $result;
}
To tentando testar o código mas to recebendo esse erro de retorno:
Fatal error: Undefined class constant ‘ATTR_MODE’ in C:\xampp\htdocs\MAPA\classeBanco.php on line 13
ALguma luz?
Esse erro conseguir tirar comentando esta linha, mas tem mais erros, agora estou com o de: Fatal error: Call to undefined method Pessoa::salvar() in C:\xampp\htdocs\Facul\CadastrarPessoa.php on line 37
Estranho, aqui se eu comento ja retorna outro erro, não ta achando a classe :
Fatal error: Class ‘Banco’ not found in C:\xampp\htdocs\MAPA\classePessoa.php on line 4
Sendo que dentro dela ta certinho:
…
include(‘classeBanco.php’);
class Pessoa extends Banco {
…
È isso mesmo, não tem a classe banco no arquivo classebanco.php tem que incluir.
Tem como voce postar a classe que usou la dentro?
Valeu!
Perdão, um pequeno erro, na classe Pessoa herdamos a classe Banco só que na file classeBanco não exite uma CLASSE kkkkkkkk, é só reescrever a file:
<?php
class Banco {
function __construct() {
// Construtor para iniciar a classe
}
// Método para slavar informações da pessoa
public function salvar() {
// Faça a conexão com o banco dentro da função salvar
$db_username = "Nome de usuario da conexão local";
$db_password = "Password da conexão local... se existir";
// Opções de cofificação de charset
$opçoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
try {
// Criando conexão com o banco através da metodologia PDO
$db = new PDO("mysql:host=localhost; dbname=NomeDaDataBase; charset=utf8", $db_username, $db_password, $opçoes);
$db->setAttribute(PDO::ATTR_MODE, PDO::ERRMODE_EXCEPTION);
// Query para criar a table no banco de dados
$sql = "CREATE TABLE IF NOT EXISTS pessoas(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
cpf VARCHAR(13) NOT NULL, nome VARCHAR(50) NOT NULL, email VARCHAR(70) NOT NULL)";
// Executar a query
$db->exec($sql);
} catch(PDOException $e) {
// Caso haja algum erro na conexão
// Printar mensagem
echo $e->getMessage();
exit;
}
try {
// Query para inserir informação da pessoa
// Não é necessario inserir o id pq ele já será auto_increment na table
$sql = "INSERT INTO pessoas(cpf, nome, email)
VALUES ('$this->cpf', '$this->nome', '$this->email') ";
// Executar a query
$db->exec($sql);
echo 'Informações inseridas com sucesso';
} catch(PDOException $e) {
echo $e->getMessage();
exit;
}
}
// Método para retornar todas pessoas
public function listar() {
// Query para selecionar as pessoas no banco de dados
$sql = "SELECT cpf, nome, email FROM pessoas";
// Executar a query
$result = $db->query();
// Transforma os resultados em um array associativo
$result->fetchAll(PDO::FETCH_ASSOC);
// Retornando o array associativo
return $result;
}
}
1 curtida