Ir para conteúdo

POWERED BY:

Arquivado

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

neotheone

Como acessar variável em outra classe?

Recommended Posts

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

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

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

parent::pegaDados();

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe, entendi que você queria acessar o método pegaDados().

 

parente::nome;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Coloca aonde você quer pegar na classe filha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

//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

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

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

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

Corrigindo:

parent::$nome

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

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