Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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.
usa a funcao empty()
if(empty($retornovalidacao)){..
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.
eu sempre uso 2 funcoes: isset e empty...testa ae....
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;
}Estão faltando aspas na string então:
alert('"$retornovalidacao"');
mas ja usou isset e empty juntas?
if(isset($var) and !empty($var)){...
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']);
} 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');
} 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 "";
}
}
}$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...
É 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
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 codigoIgor, 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.
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....
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.
>
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...
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!
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...
Já ouvi falar do livro Use a Cabeça.
Parece ser muito bom. Estou fechando o tópico. Valeu pelas dicas.
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.