• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

RayBacK

HELP : Cannot redeclare class

8 mensagens neste tópico

Boas,

Eu tou aqui com um problemazito e não o consigou resolver, e queria ver se vcs me conseguia ajudar e que ja tou a dar em tonot  :cheesygrin:!

É o seguinte eu tenh uma class, em que nessa class tem umas instancia e dentro dessa instancia eu quero xamar outra class a que fas a conecção a base de dados e como tenh um loop a instancia ele dix me isto "Cannot redeclare class sql_db", eu percebo pk mas eu queria era uma ajuda para contornar a situação se poderem ajudar agradecia a vossa ajuda.

Obrigada

RayBacK

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na boa.

Este e o fixeiro mysql.php

Eu ja tou habituado a ele, pois usava-o no phpnuke.

<?php
class sql_db
[code=php]{

var $db_connect_id;
var $query_result;
var $row = array();
var $rowset = array();
var $num_queries = 0;

//
// Constructor
//
function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
{

	$this->persistency = $persistency;
	$this->user = $sqluser;
	$this->password = $sqlpassword;
	$this->server = $sqlserver;
	$this->dbname = $database;

	if($this->persistency)
	{
		$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
	}
	else
	{
		$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
	}
	if($this->db_connect_id)
	{
		if($database != "")
		{
			$this->dbname = $database;
			$dbselect = @mysql_select_db($this->dbname);
			if(!$dbselect)
			{
				@mysql_close($this->db_connect_id);
				$this->db_connect_id = $dbselect;
			}
		}
		return $this->db_connect_id;
	}
	else
	{
		return false;
	}
}

//
// Other base methods
//
function sql_close()
{
	if($this->db_connect_id)
	{
		if($this->query_result)
		{
			@mysql_free_result($this->query_result);
		}
		$result = @mysql_close($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}

//
// Base query method
//
function sql_query($query = "", $transaction = FALSE)
{
	// Remove any pre-existing queries
	unset($this->query_result);
	if($query != "")
                {

		$this->query_result = @mysql_query($query, $this->db_connect_id);

	}
	if($this->query_result)
	{
		unset($this->row[$this->query_result]);
		unset($this->rowset[$this->query_result]);
		return $this->query_result;
	}
	else
	{
		return ( $transaction == END_TRANSACTION ) ? true : false;
	}
}

//
// Other query methods
//
function sql_numrows($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_num_rows($query_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_affectedrows()
{
	if($this->db_connect_id)
	{
		$result = @mysql_affected_rows($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_numfields($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_num_fields($query_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fieldname($offset, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_field_name($query_id, $offset);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fieldtype($offset, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_field_type($query_id, $offset);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fetchrow($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
            //@RJR-Pwmg@Rncvkpwo@-@Eqratkijv@(e)@VgejIHZ.eqo
		$this->row[$query_id] = @mysql_fetch_array($query_id);
		return $this->row[$query_id];
	}
	else
	{
		return false;
	}
}
function sql_fetchrowset($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		unset($this->rowset[$query_id]);
		unset($this->row[$query_id]);
		while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
		{
			$result[] = $this->rowset[$query_id];
		}
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fetchfield($field, $rownum = -1, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		if($rownum > -1)
		{
			$result = @mysql_result($query_id, $rownum, $field);
		}
		else
		{
			if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
			{
				if($this->sql_fetchrow())
				{
					$result = $this->row[$query_id][$field];
				}
			}
			else
			{
				if($this->rowset[$query_id])
				{
					$result = $this->rowset[$query_id][$field];
				}
				else if($this->row[$query_id])
				{
					$result = $this->row[$query_id][$field];
				}
			}
		}
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_rowseek($rownum, $query_id = 0){
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_data_seek($query_id, $rownum);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_nextid(){
	if($this->db_connect_id)
	{
		$result = @mysql_insert_id($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_freeresult($query_id = 0){
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}

	if ( $query_id )
	{
		unset($this->row[$query_id]);
		unset($this->rowset[$query_id]);

		@mysql_free_result($query_id);

		return true;
	}
	else
	{
		return false;
	}
}
function sql_error($query_id = 0)
{
	$result["message"] = @mysql_error($this->db_connect_id);
	$result["code"] = @mysql_errno($this->db_connect_id);

	return $result;
}

} // class sql_db

?>

Este e o fixeiro db.php


<?php
include("mysql.php");
$db = new sql_db('localhost', 'username', 'password', 'db', false);
if(!$db->db_connect_id) {
    die("mysqlerror.html");
}

Agora aqui e que há problemas neste fixeiro

classes.php


<?php

class account 
{	

var $id;
var $health;


function consuming($type, $amount) {
                include("db.php"); --> AQUI
	$this->id = $_SESSION['USERID'];
	$this->health = $_SESSION['HEALTH'];
	$result = $db->sql_query("SELECT drugs.strength AS strength, drugbag.drugid AS drugid, drugbag.amount AS amount, drugbag.tconsumed AS consumed FROM drugbag, drugs WHERE drugbag.userid = '$this->id' AND drugbag.drugid = $type AND drugs.id = $type");
	$row = $db->sql_fetchrow($result);											
	$inpact = $row['strength'] * $amount;
	$newhealth = $this->health - $inpact;
	$_SESSION['HEALTH'] = $newhealth;
	$healthpercent = ($newhealth  / 1000);
	$db->sql_query("UPDATE stats SET lasthealth = '$this->health', health = '$newhealth' WHERE id = '$this->id'");
	$newamount = $row['amount'] - $amount;
	$totalconsumed = $row['consumed']+$amount;
	$db->sql_query("UPDATE drugbag SET amount = '$newamount', tconsumed = '$totalconsumed' WHERE userid = '$this->id' AND drugid = '$type'");
	return $healthpercent;		
}

}

[/code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema está no "return" da "class account"..

Não podes colocar "return $healthpercent;" porque o "return" vai fazer com que o script pare ou retorne para um include ou require... isso quer dizer que ele está a chamar o include("db.php"); duas vezes e por isso mostra aquele erro... tenta colocar:  print("$healthpercent");  em vez de   

return $healthpercent;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu ja tentei e não deu, o problema axo eu é como eu tou a faser um foreach e tou a puxar a instancia consuming, logo ele vai tar a tentar declarar a class, sempre que eu puxar pela instancia, logo n vai dar!


foreach($_POST as $key=>$value) {
if (is_numeric($key) AND $value > "0") {
$account->consuming($key, $value);
echo "$key => $value<br>";
}
}

Tipo se desse para faser logo include sem ser dentro da instancia, ou entao apagar a class n sei se da, e tb n tou a ver outra maneira.

PS: ja tentei kom uma funcao para ver se a class tivesse defenida tipo if (!class_exists('sql_db')), mas dpx dame outro erro tipo isto Fatal error: Call to a member function sql_query() on a non-object. n sei o k faser se souberes, ou tiveres alguma ideia era dix ai sff!

Obrigada

RayBacK

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei... Tenta fazer o seguinte em vez de criares um ficheiro mysql.php e um db.php coloca tudo no ficheiro mysql.php assim:

<?php

class sql_db
{

var $db_connect_id;
var $query_result;
var $row = array();
var $rowset = array();
var $num_queries = 0;

//
// Constructor
//
function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
{

	$this->persistency = $persistency;
	$this->user = $sqluser;
	$this->password = $sqlpassword;
	$this->server = $sqlserver;
	$this->dbname = $database;

	if($this->persistency)
	{
		$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
	}
	else
	{
		$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
	}
	if($this->db_connect_id)
	{
		if($database != "")
		{
			$this->dbname = $database;
			$dbselect = @mysql_select_db($this->dbname);
			if(!$dbselect)
			{
				@mysql_close($this->db_connect_id);
				$this->db_connect_id = $dbselect;
			}
		}
		return $this->db_connect_id;
	}
	else
	{
		return false;
	}
}

//
// Other base methods
//
function sql_close()
{
	if($this->db_connect_id)
	{
		if($this->query_result)
		{
			@mysql_free_result($this->query_result);
		}
		$result = @mysql_close($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}

//
// Base query method
//
function sql_query($query = "", $transaction = FALSE)
{
	// Remove any pre-existing queries
	unset($this->query_result);
	if($query != "")
                {

		$this->query_result = @mysql_query($query, $this->db_connect_id);

	}
	if($this->query_result)
	{
		unset($this->row[$this->query_result]);
		unset($this->rowset[$this->query_result]);
		return $this->query_result;
	}
	else
	{
		return ( $transaction == END_TRANSACTION ) ? true : false;
	}
}

//
// Other query methods
//
function sql_numrows($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_num_rows($query_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_affectedrows()
{
	if($this->db_connect_id)
	{
		$result = @mysql_affected_rows($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_numfields($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_num_fields($query_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fieldname($offset, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_field_name($query_id, $offset);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fieldtype($offset, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_field_type($query_id, $offset);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fetchrow($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
            //@RJR-Pwmg@Rncvkpwo@-@Eqratkijv@(e)@VgejIHZ.eqo
		$this->row[$query_id] = @mysql_fetch_array($query_id);
		return $this->row[$query_id];
	}
	else
	{
		return false;
	}
}
function sql_fetchrowset($query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		unset($this->rowset[$query_id]);
		unset($this->row[$query_id]);
		while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
		{
			$result[] = $this->rowset[$query_id];
		}
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_fetchfield($field, $rownum = -1, $query_id = 0)
{
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		if($rownum > -1)
		{
			$result = @mysql_result($query_id, $rownum, $field);
		}
		else
		{
			if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
			{
				if($this->sql_fetchrow())
				{
					$result = $this->row[$query_id][$field];
				}
			}
			else
			{
				if($this->rowset[$query_id])
				{
					$result = $this->rowset[$query_id][$field];
				}
				else if($this->row[$query_id])
				{
					$result = $this->row[$query_id][$field];
				}
			}
		}
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_rowseek($rownum, $query_id = 0){
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}
	if($query_id)
	{
		$result = @mysql_data_seek($query_id, $rownum);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_nextid(){
	if($this->db_connect_id)
	{
		$result = @mysql_insert_id($this->db_connect_id);
		return $result;
	}
	else
	{
		return false;
	}
}
function sql_freeresult($query_id = 0){
	if(!$query_id)
	{
		$query_id = $this->query_result;
	}

	if ( $query_id )
	{
		unset($this->row[$query_id]);
		unset($this->rowset[$query_id]);

		@mysql_free_result($query_id);

		return true;
	}
	else
	{
		return false;
	}
}
function sql_error($query_id = 0)
{
	$result["message"] = @mysql_error($this->db_connect_id);
	$result["code"] = @mysql_errno($this->db_connect_id);

	return $result;
}

} 

$db = new sql_db('localhost', 'username', 'password', 'db', false);

if(!$db->db_connect_id) {  die("mysqlerror.html");  }

?>

E depois na "class account" coloca include("mysql.php"); em vez de include("db.php");

<?php

class account 
{	

var $id;
var $health;


function consuming($type, $amount) {
                include("mysql.php"); --> AQUI
	$this->id = $_SESSION['USERID'];
	$this->health = $_SESSION['HEALTH'];
	$result = $db->sql_query("SELECT drugs.strength AS strength, drugbag.drugid AS drugid, drugbag.amount AS amount, drugbag.tconsumed AS consumed FROM drugbag, drugs WHERE drugbag.userid = '$this->id' AND drugbag.drugid = $type AND drugs.id = $type");
	$row = $db->sql_fetchrow($result);											
	$inpact = $row['strength'] * $amount;
	$newhealth = $this->health - $inpact;
	$_SESSION['HEALTH'] = $newhealth;
	$healthpercent = ($newhealth  / 1000);
	$db->sql_query("UPDATE stats SET lasthealth = '$this->health', health = '$newhealth' WHERE id = '$this->id'");
	$newamount = $row['amount'] - $amount;
	$totalconsumed = $row['consumed']+$amount;
	$db->sql_query("UPDATE drugbag SET amount = '$newamount', tconsumed = '$totalconsumed' WHERE userid = '$this->id' AND drugid = '$type'");
	return $healthpercent;		
} 
?>

Talvez assim funcione..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ehehe, iss n resoltou mas fex me pensar noutra cena e agora ja ta a workar tudo bem obrigada!

Fiz assim :

if(!class_exists('sql_db')) {
class sql_db
{

E por ai fora..

Já ta a dar brg!!

RayBacK  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em vez de  include("mysql.php"); --> AQUI

usa

include_once("mysql.php"); --> AQUI

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora