Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
salve galera... seguinte tenho o seguinte metodo:
public function logar() {
$qr = parent::getWhere('usuario',
"usuario = '$this->usuario'");
if(mysql_num_rows($qr) == 0){
echo 'invalida';
}
else{
echo 'logado';
}
}
mas ta dando o erro:
" Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\orientacao\loginsenha\validacao.php on line 36 "
a linha 36 é "if(mysql_num_rows($qr) == 0){"
orque isso acontece? estou herdando uma class que faz a conexão, select, etc etc...
retornou bool(false) ....
oq tenho que arrumar?
porque se eu uso um mysql_query("SELECT usuario....
ai funciona, mas quando eu uso o metodo da esse erro.. =/
Tem que ver o por que seu método getWhere está retornando false.
public function getWhere($linhas,$where) {
$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");
return $result;
}estranho que se eu colocar:
$qr = mysql_query("SELECT usuario FROM login WHERE usuario = 'rafael'");
ai funciona... sera que tem alguma coiza gaver com o ::parent ???
encontrei o Problema...
public function getWhere($linhas,$where) {
$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");
return $result;
}
para funcionar eu tenho que mudar o metodo para:
"SELECT $linhas FROM login WHERE $where"
ele ñ deve ta conseguindo encontrar o parametro $table... porque se eu coloco o nome da tabela direto funciona... mas porq?
eu declarei assim na minha classeMysqlConnect:
private $servido;
private $user;
private $pass;
private $base;
private $table;
public function __construct($servidor,$user,$pass,$base,$table){
$this->servidor = $servidor;
$this->user = $user;
$this->pass = $pass;
$this->base = $base;
$this->table = $table;
}tente assim:
$result = mysql_query( "SELECT " . $linhas . " FROM ". $this->table . " WHERE " . $where);
evite colocar varíaveis em strings. prefira usar concatenação
retornou false ainda.... mas manu
eu acho que a segunda classe não esta conseguindo herdar o valor dos atributos da primeira... esse deve ser o motivo
porque quando eu troco "$this->table" pelo nome da tabela mesmo da certo
não herdaram mesmo, pois você as definiu como private. Use protected http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
ja tentei usar até publica mas ñ resolveu o problema... porq sera em?? quer q poste as 2 classes completas?
poste-as. creio que ficará mais fácil de entender vendo o código mais amplamente
class MysqlConnect{
protected $servido;
protected $user;
protected $pass;
protected $base;
protected $table;
public function __construct($servidor,$user,$pass,$base,$table){
$this->servidor = $servidor;
$this->user = $user;
$this->pass = $pass;
$this->base = $base;
$this->table = $table;
}
public function connect(){
mysql_connect($this->servidor,$this->user,$this->pass) or die('Erro na CONEXAO');
}
public function select(){
mysql_select_db($this->base) or die('Erro no SELECT'. mysql_error());
}
public function getWhere($linhas,$where,$tabelas) {
$result = mysql_query("SELECT $linhas FROM $this->table WHERE $where");
return $result;
}
}
class Login extends MysqlConnect{
private $usuario;
private $senha;
public function __construct($user,$pass) {
$this->usuario = $user;
$this->senha = $pass;
}
public function logar() {
$qr = parent::getWhere('usuario',"usuario = '$this->usuario'");
echo var_dump($qr);
}
}
$base = new MysqlConnect('localhost','root','','estudo','login') or die(mysql_error() );
$base->connect();
$base->select();
$login = new Login('rafael','123456');
$login->logar();Bom, existe uma confusão na forma de trabalhar com herança. A classe Login não deve estender a classe MySQLConnect, pois o conceito de herança diz que a classe que herda (filha) deve especializar a classe que herdou (pai). Não é o que ocorre no seu caso, ja que a classe Login só utiliza a classe MySQLConnect.
Sugiro que estude um pouco sobre os padrões de projeto (design pattern) Registry e Singleton. Aqui tem um tópico muito interessante onde o João Batista fala sobre isto.
Além disto, utilize MySQLi ou PDO já que quer trabalhar com POO.
Carlos Eduardo
dÊ um var_dump() e veja o que $qr está recebendo. provavelmente está recebendo FALSE.