Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sacofrito

Erro com orientação a objetos

Recommended Posts

Bom dia pessoal

Estou aprendendo a programar orientado a objetos.

E estou tentando fazer alguns codigos com classes e functions. O objetivo do codigo é verificar a disponibilidade de alguns campos no banco de dados.

 

Meu codigo :

 

no arquivo cad.php

 

	include ('classes.php');
$retornovalidacao = new validacao();
$retornovalidacao-> verificacampos();
if ($retornovalidacao == ""){
	$retornovalidacao-> verificausuario($_POST['nome'], $_POST['login'], $_POST['senha']);
}
if ($retornovalidacao != "") { 
	echo "<script language='JavaScript'> alert('$retornovalidacao')</script>"; // aqui acontece o erro
//Catchable fatal error: Object of class validacao could not be converted to string in C:\wamp\www\ATENDIMENTOS\atendentes\cadastroAtendentes.php on line 11

	header('Location: cadastroAtendentes.html');
}
else{
	echo "<script language='JavaScript'> alert('Sucesso!')</script>";
	$insereatendente = new InsertAtendente();
	$insereatendente-> insere($_POST['nome'], $_POST['login'], $_POST['senha'], $_POST['empresa'], $_POST['fone'], $_POST['email'], $_POST['skype'], $_POST['obs']);
	IF ($insereatendente != "0"){
		echo "<script language='JavaScript'> alert('Ocorreu um erro ao inserir os dados.'</script>";
	}	
	else{
		echo "<script language='JavaScript'> alert('Dados inseridos com sucesso')</script>";
	}
}

 

No meu arquivo classes.php

 

class validacao{
private $varControle;
function verificacampos(){
	$this->varControle = "";
	if ($_POST['nome'] == ""){
		$this->varControle = "Nome não preenchido!<br>";
	}
	if ($_POST['login'] == ""){
		$this->varControle = $this->varControle . "Login não preenchido!<br>";
	}
	if ($_POST['senha'] == ""){
		$this->varControle = $this->varControle . "Senha não pode ficar em branco!<br>";
	}
	else{
		if ($_POST['senha'] != $_POST['senha2']){
			$this->varControle = $this->varControle . "Confirmação da senha incorreta!<br>";
		}
	}

	return $this->varControle;
}

function verificausuario($nome, $login, $senha){
	// verifico se o nome, login e senha estão disponiveis
	$sql = "SELECT nome, login, senha from atendentes where nome ='" . $this->nome . "'";
	$sql = $sql . " or login ='" . $this->login . "' and senha = '" . $this->senha . "'";
	$consulta = mysql_query($sql);
	if ($consulta != 0){
		return "Nome, Login ou senha indisponíveis!";
	}
	else{
		return "";
	}
}
}

// classe inserir dados
class InsertAtendente{
private $nome, $login, $senha, $empresa, $fone, $email, $skype, $obs;

function insere($nome, $login, $senha, $empresa, $fone, $email, $skype, $obs){
	$this->nome = $nome;
	$this->login = $login;
	$this->senha = $senha;
	$this->empresa = $empresa;
	$this->fone = $fone;
	$this->email = $email;
	$this->skype = $skype;
	$this->obs = $obs;

	$sql = "INSERT into atendentes (nome, login, senha, empresa, fone, email, skype) values ";
	$sql = $sql . "('" . $this->nome . "', '" . $this->login . "', '" .  $this->senha . "'";
	if ($this->empresa != ""){
		$sql = $sql . ",'" . $this->empresa . "' " ;
	}
	if ($this->fone != ""){
		$sql = $sql . ", '" . $this->fone . "' ";
	}
	if ($this->email != ""){
		$sql = $sql . ", '" . $this->email . "' ";
	}
	if ($this->skype != ""){
		$sql = $sql . ", '" . $this->skype . "' ";
	}
	if ($this->obs != ""){
		$sql = $sql . ", '" . $this->obs . "' ";
	}
	$sql = $sql . ")";

	$insere = mysql_query($sql) or die (mysql_error());

	return $insere;
}


}

 

O que esta dando errado?

Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

echo "<script language='JavaScript'> alert('$retornovalidacao')</script>";

 

Você não pode imprimir um objeto, nesse caso esse retorno validação teria de ser uma mensagem de sucesso ou falha, e não o objeto em si.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o erro.

Mas agora sempre retorna que o else daqui

 

	if ($retornovalidacao == ""){
	//verifica se os campos estão disponiveis
	$retornovalidacao-> verificausuario($_POST['nome'], $_POST['login'], $_POST['senha']);
}
else{
	echo "<script language='JavaScript'> alert('Nome, Login ou senha não foram preenchidos ou a confirmação da senha está incorreta.')</script>"; 		
	exit;
}

 

Estou preenchendo os campos e ja confirmei se o nome deles no html esta condizendo e estão sim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada ainda.

Tentei atribuir o valor do POST a uma variavel exibi-la em um alert.

Mas quando tento fazer isto aparece no debugador do fire fox

"valor do input text" is not defined.

 

Como resolvo isso? Bem estranho um erro destes. Ele passa por post mas da tipo indefinido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já usei amigo.

O fato é que esta enviando os dados. MAs ele aparece como tipo indefinido.

Se eu digitar "teste" no campo nome

o erro aparecerá

 

"teste is not defined"

 

se eu digitar babalablabal

aparece

 

"babalablabal is not defined"

 

No formulario html eu tenho uma função em javascript para tambem verificar o preenchimento dos campos.

 

Agora o meu php está assim

 

	include ('classes.php');
$retornovalidacao = new validacaoatendentes();
$retornovalidacao-> verificacampos();
if (empty($retornovalidacao)){
	//verifica se os campos estão disponiveis
	$retornovalidacao-> verificausuario($_POST['nome'], $_POST['login'], $_POST['senha']);
}
else{
	echo "<script language='JavaScript'> alert('Nome, Login ou senha não foram preenchidos ou a confirmação da senha está incorreta.')</script>"; 		
	exit;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu erro na parte da classe novamente.

Vou postar todo meu codigo.

 

 

php.

	include ('C:\wamp\www\ATENDIMENTOS\files\conexao_bd.php');
// Verificando novamente o preenchimento dos campos em caso do usuário desabilitar o javascript do navegador
include ('classes.php');
$retornovalidacao = new validacaoatendentes();
$retornovalidacao-> verificacampos();
if ($retornovalidacao == ""){
	//verifica se os campos estão disponiveis
	$retornovalidacao-> verificausuario($_POST['nome'], $_POST['login'], $_POST['senha']);
}
else{
	echo "<script language='JavaScript'> alert('Nome, Login ou senha não foram preenchidos ou a confirmação da senha está incorreta.')</script>"; 		
	exit;
}

// exibe o retorno
if ($retornovalidacao != "") { 
	echo "<script language='JavaScript'> alert('Login ou senha indisponíveis.')</script>"; 
	//header('Location: cadastroAtendentes.html');
}
else{ // tentando inserir os dados
	echo "<script language='JavaScript'> alert('Sucesso! Vamos tentar inserir os dados.')</script>";
	$insereatendente = new InsertAtendente();
	$insereatendente-> insere($_POST['nome'], $_POST['login'], $_POST['senha'], $_POST['empresa'], $_POST['fone'], $_POST['email'], $_POST['skype'], $_POST['obs']);
	IF ($insereatendente != "0"){
		echo "<script language='JavaScript'> alert('Ocorreu um erro ao inserir os dados.')</script>";
	}	
	else{
		echo "<script language='JavaScript'> alert('Dados inseridos com sucesso')</script>";
	}
}

 

As classes estão aqui neste codigo

 

class validacaoatendentes{
private $varControle;
function verificacampos(){
	$this->varControle = "";
	if ($_POST['nome'] == ""){
		$this->varControle = "Nome não preenchido!<br>";
	}
	if ($_POST['login'] == ""){
		$this->varControle = $this->varControle . "Login não preenchido!<br>";
	}
	if ($_POST['senha'] == ""){
		$this->varControle = $this->varControle . "Senha não pode ficar em branco!<br>";
	}
	else{
		if ($_POST['senha'] != $_POST['senha2']){
			$this->varControle = $this->varControle . "Confirmação da senha incorreta!<br>";
		}
	}
	if ($this->varControle != ""){
		return "Faltou campos!";
	}
	else{
		return "";
	}
}

function verificausuario($nome1, $login, $senha){
	// verifico se o nome, login e senha estão disponiveis
	$sql = "SELECT nome, login, senha from atendentes where nome ='" . $this->nome1 . "'";
	$sql = $sql . " or login ='" . $this->login . "' and senha = '" . $this->senha . "'";
	$consulta = mysql_query($sql);
	if ($consulta != 0){
		return "Erro";
	}
	else{
		return "";
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

$retornovalidacao = new validacaoatendentes();
	$retornovalidacao-> verificacampos();   
 if ($retornovalidacao == ""){

 

claro que assim nunca ira funcionar, você esta comparando um objeto com uma string

 

teste assim

$retornovalidacao = new validacaoatendentes();    
$val = $retornovalidacao-> verificacampos();   
 if ($val == ""){

ou

 

$retornovalidacao = new validacaoatendentes(); 	
if ($retornovalidacao-> verificacampos() == ""){

ja que o proprio metodo retorna vazio ou erro

 

PS esse oo ae nao tem nada de oo, eh pura gambiarra...altissimo acoplamento...etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que é a primeira vez que programo em OO. Estou meio perdido mesmo.

Voce podia dar um exemplo de como é a OO realmente?

 

 

 

 

 

Estou testando sua sugestão

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, você primeiro tem q estudar os basicos de funcoes, e vejo q você nao tem um padrao de programacao...eu posso indicar um otimo livro

 

http://www.novatec.c...os/phpobjetos2/

 

você tem q aprender associacao, composicao e agregacao, os 3 pilares da oo, e tb quanto menos codigo acoplado, melhor, o acoplamento eh a dependencia de um codigo ao outro, quanto mais independente, mais reaproveitavel, outro pilar da oo eh o reuso...

 

veja que este trecho

 

if ($_POST['nome'] == ""){
                       $this->varControle = "Nome não preenchido!<br>";
               }
               if ($_POST['login'] == ""){
                       $this->varControle = $this->varControle . "Login não preenchido!<br>";
               }
               if ($_POST['senha'] == ""){
                       $this->varControle = $this->varControle . "Senha não pode ficar em branco!<br>";
               }
               else{
                       if ($_POST['senha'] != $_POST['senha2']){

torna o seu codigo completamente usavel apenas para um projeto, o que nao eh legal...e toda vez q mudar ele de projeto, tera q mecher no codigo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor, obrigado pela resposta. Vou estudar meu orçamento para comprar o livro.

 

Mas nao consigo imaginar como eu poderia fazer um codigo ddste tipo para reaproveita-lo em outro projeto.

Ainda conheço muito pouco do mundo programação web.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao aproveita q o php tb eh procedural eestude eleprocedural, depois va ao oo, pq o procedural você vai aprender a linguagem, depois você aprende o oo, pois o oo eh conceito, ja a linguagem eh mais pratica....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor, sobre a procedural. Deste conceito acredito que eu nao va ter dificuldades pois tenho experiencia com VB6 totalmente procedural.

Eu precisaria mesmo programar procedural no php e depois partir para OO?

Se eu tiver duvida de alguma funçao posso pesquisar sobre isso e tals. Acredito que a sintaxe da linguagem seja o menor problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu precisaria mesmo programar procedural no php e depois partir para OO?

 

sim, pq embora a logica de programacao seja a mesma, os atributos de cada linguagem sao diferentes por exemplo, nao conheco vb, mas php nao eh tipado como java, e portanto eh completamente dinamico, ha variaveis variaveis, funcoes variaveis, objetos variaveis, e java nao, java eh duro como pedra, ja fex eh tipado como o java, porem eh flexivel como o php, o q você precisa conhecer mesmo nao eh o procedural, mas os "beneficios", as regalias, os truques q o php t oferece...outra coisa, ha alguns principios q se deve serguir no oo, como eu citei acima: agregacao, composicao e associacao, você sempre ira encontrar isto no oo, e tb reuso, e o reuso, pq você nao vai ter o mesmo trabalho de escrever tudo do zero a cada projeto, projetos diferentes tem requisitos diferentes, mas isso nao significa q tenha q escrever tudo o q você precisa do zero de novo, outro conselho, procure tb estudar sobre padroes de projeto, estude o livro q indiquei acima, ja vi gente com o pdf dele...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi. Fiz algumas coisinhas em procedural ha um mes atras quando entrei aqui na empresa.

Li algumas apostilas de introdução. Até testei algumas coisas com ajax usando jquery.

 

O caso é que o conceito que tive sobre OO na faculdade nao foi muito claro e quero investir bastante nisso. Parece ser um recurso muito útil pelos vários comentários positivos que vejo por aí.

 

 

Obrigado pela ajuda. Precisarei frequentar muito este fórum hehe.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

procure o livro do pablo dalloglio de programacao php com orientacao objetos e padroes de projeto, eh excelente, e depois estude padroes de projeto, pois o livro do pablo nao entra em detalhes nesse assunto, tem um em portugues excelente, use a cabeça padroes de projeto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.