neotheone 0 Denunciar post Postado Março 10, 2008 Queria saber como fazer a classe 'bd' acessar as variáveis que a função 'pegaDados()' da classe usuários pegam pelo metodo POST, não estou conseguindo fazer a gravação no banco de dados. <?php class bd extends usuarios{ var $conexao; function conexao(){ $login="neotheone"; $senha="game18"; $db="phpteste"; $this->conexao = mysql_connect("201.7.95.74", $login, $senha); if(!$this->conexao ){ echo "Erro de conexão com o servidor<br>"; } else { echo "Conexão realizada com sucesso <br>"; } $dbvalida=mysql_select_db($db, $this->conexao ); if(!$dbvalida){ echo "Erro ao seleciona o banco"; } else { echo "Banco selecionado com sucesso <br>"; } } public function insercao(){ $query = "insert into usuarios (username, senha, nome, email, cidade, estado) values($this->username, $this->senha, '$this->nome', '$this->email', '$this->cidade', '$this->estado')"; mysql_query($query, $this->conexao); if(mysql_affected_rows($conexao)!=1){ echo "Error na inserção dos dados <br>"; } else{ echo "Inserção realizada com sucesso"; } echo "Nome na classe banco: " . $this->nome . "<br>"; ; } function resultado(){ $query = "Select username, email from usuarios"; $result = mysql_query($query, $this->conexao ); echo "Imprimindo resultado... <br>"; while($linha = mysql_fetch_array($result)){ echo $linha['username'] . " - "; echo $linha['email']; } mysql_close($this->conexao ); } } class usuarios{ var $username; var $senha; var $nome; var $email; var $cidade; var $estado; var $erros; var $msg; function pegaDados(){ $this->username = $_POST["username"]; $this->senha = $_POST["senha"]; $this->nome = $_POST["nome"]; $this->email = $_POST["email"]; $this->cidade = $_POST["cidade"]; $this->estado = $_POST["estado"]; } function verificaDados(){ if(empty($this->username)){ $this->msg .="O campo username está vazio <br>"; $this->erros=1; } if(empty($this->senha)){ $this->msg .="O campo senha está vazio <br>"; $this->erros=1; } if(empty($this->nome)){ $this->msg .="O campo nome está vazio <br>"; $this->erros=1; } if(empty($this->email) || strstr( $this->email, '@')==false ){ $this->msg .="O campo email está vazio ou incorreto <br>"; $this->erros=1; } if($this->erros > 0){ echo $this->msg; exit; } } function mostraDados(){ echo $this->username . "<br>"; echo $this->senha . "<br>"; echo $this->nome . "<br>"; echo $this->email . "<br>"; echo $this->cidade . "<br>"; echo $this->estado . "<br>"; } } ?> <body> <?php $usuarios = new usuarios; $usuarios->pegaDados(); $usuarios->verificaDados(); $usuarios->mostraDados(); $bd = new bd; $bd -> conexao(); $bd -> insercao(); $bd -> resultado(); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Wanderson Regis Silva 0 Denunciar post Postado Março 10, 2008 Já pensou em usar da mesma forma que você acessa os dados da classe bd? Se ela extende a classe usuarios, ela só não tem acesso a itens tipo private dentro da classe principal. ... class x extends y { function __construct() { echo $this->itemClasseY; } } ... Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo P 0 Denunciar post Postado Março 10, 2008 a sua funcão pegaDados acessa os dados enviados via POST diretamente?? Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 Esse é o formulário de onde ele pega ($_POST) os dados <form name="cadastro" action="recebe_dados.php" method="post"> <table width="60%" border="0" cellspacing="1" cellpadding="1"> <tr> <td width="25%" bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">Username</font></strong></div></td> <td width="2%"> </td> <td width="73%" bgcolor="#999999"><input name="username" type="text" id="username"></td> </tr> <tr> <td bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">Senha</font></strong></div></td> <td> </td> <td bgcolor="#999999"><input name="senha" type="password" id="senha"></td> </tr> <tr> <td bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">Nome</font></strong></div></td> <td> </td> <td bgcolor="#999999"><input name="nome" type="text" id="nome"></td> </tr> <tr> <td bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">E-mail</font></strong></div></td> <td> </td> <td bgcolor="#999999"><input name="email" type="text" id="email"></td> </tr> <tr> <td bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">Cidade</font></strong></div></td> <td> </td> <td bgcolor="#999999"><select name="cidade" id="cidade"> <option value="Rio de Janeiro">Rio de Janeiro</option> <option value="São Paulo">São Paulo</option> </select></td> </tr> <tr> <td bgcolor="#000000"><div align="right"><strong><font color="#FFFFFF">Estado</font></strong></div></td> <td> </td> <td bgcolor="#999999"><select name="estado" id="estado"> <option value="RJ">RJ</option> <option value="SP">SP</option> </select></td> </tr> <tr> <td bgcolor="#000000"> </td> <td> </td> <td bgcolor="#999999"><input type="submit" name="Submit" value="Submit"></td> </tr> </table> </form> Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 parent::pegaDados(); Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 ainda não funciona, não consigo acessar a variável $nome que pertence a classe usuarios, na classe bd ele pensa que a variável ta vazia Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 desculpe, entendi que você queria acessar o método pegaDados(). parente::nome; Compartilhar este post Link para o post Compartilhar em outros sites
Wanderson Regis Silva 0 Denunciar post Postado Março 10, 2008 $this->nome; e é parent e não parente, e mesmo não testando, acho que isso faz acesso ignorando o objeto atual. Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 em que parte do código coloco isso? Caraca !!! ta sinistro! poxa não consigo pegar o valor das variáveis em outra classe!!!! na função pegaDados() , eu pego os valores das variaveis pelo metodo $_POST , to querendo inserir no banco e não consigo, pois não consigo fazer com que essas variaveis sejam enxergadas na outra classe! Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Coloca aonde você quer pegar na classe filha. Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 ainda não to conseguindo, pode me dar um exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Posta a linha aonde você quer capturar o nome, daí eu monto o exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 //Essa é a linha onde quero recuperar os dados das variáveis que foram pegas pelo $_POST, como você pode perceber essas funções estão em classes diferentes. function insercao(){ $query = "insert into usuarios (username, senha, nome, email, cidade, estado) values($this->username, $this->senha, '$this->nome', '$this->email', '$this->cidade', '$this->estado')"; mysql_query($query, $this->conexao); echo "Nome na classe banco: " . $this->nome . "<br>"; } //Essa é a linha onde recupera os dados do formulário function pegaDados(){ $this->username = $_POST["username"]; $this->senha = $_POST["senha"]; $this->nome = $_POST["nome"]; $this->email = $_POST["email"]; $this->cidade = $_POST["cidade"]; } Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Faz assim, na pegaDados() valoriza a propriedade nome com 'teste'; Roda ai pra ver o que acontece. Assim a gente vai 'rastreando' o problema. Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 eu fiz isso: function pegaDados(){ $this->username = $_POST["username"]; $this->senha = $_POST["senha"]; $this->nome = 'teste'; $this->email = $_POST["email"]; $this->cidade = $_POST["cidade"]; } não consegui pegar nessa função function insercao(){ $query = "insert into usuarios (username, senha, nome, email, cidade, estado) values($this->username, $this->senha, '$this->nome', '$this->email', '$this->cidade', '$this->estado')"; mysql_query($query, $this->conexao); echo "Nome na classe banco: " . $this->nome . "<br>"; } ps: porém se eu atribuir um valor assim, a classe bd ja consegue pegar o valor :/ class usuarios{ var $nome = 'teste'; function pegaDados(){ $this->username = $_POST["username"]; $this->senha = $_POST["senha"]; $this->nome = 'teste'; $this->email = $_POST["email"]; $this->cidade = $_POST["cidade"]; } } Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Use parent: echo "Nome na classe banco: " . parent::$nome . "<br>"; Assim você não corre o risco de estar chamando a nome da classe filha, caso exista. Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 olha o erro agora: Fatal error: Undefined class constant 'nome' in /portal/www/htdocs/app/neo/recebe_dados.php on line 48 Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Corrigindo: parent::$nome Compartilhar este post Link para o post Compartilhar em outros sites
neotheone 0 Denunciar post Postado Março 10, 2008 novo error: Fatal error: Access to undeclared static property: usuarios::$nome in /portal/www/htdocs/app/neo/recebe_dados.php on line 48 Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 10, 2008 Roda isso ai pra ver o que acontece: $_POST["username"] = 'testeusername'; $_POST["senha"] = 'testesenha'; $_POST["nome"] = 'testenome'; $_POST["email"] = 'testeemail'; $_POST["cidade"] = 'testecidade'; $_POST["estado"] = 'testeestado'; $User = new usuarios(); $User->pegaDados(); echo $User->nome; Compartilhar este post Link para o post Compartilhar em outros sites