Newsgroup: it.comp.www.php
Titolo: classi e istanze php 5

Correggetemi se ho capito male, vi prego!
Facendo cos�:
<?php
    $Db= new dbConn;
    $libri=$Db->query("select * from libri where nlibro='Imparare Php' Limit 
1");
    $libri_usati=$Db->query("select * from libri_usati where 
libri_usati='$libri[nlibro]'","");
?>
...creo 2 istanze della stessa classe giusto?
Quando viene creato $libri viene eseguita la query ed in effetti se lo 
richiamo con $libri[nome_campo] funziona egregiamente.
Quando viene creato $libri_usati invece mi restituisce 1 solo libro anzich� 
tutti quelli che ci sono..
La classe contiene un filtro per le query e la porzione di codice � questa:
public function query($sql, $field=""){
  $strumenti=$this->tools(); // attiva la classe strumenti (dove c'� il 
filtro)
  $e=$this->errors(); // attiva la classe degli errori
  $conn=$this->dbConn(); // attiva la connessione al db
  $query=$strumenti->filtro($sql);//filtra la query
  $result=mysql_query($query);//esegui la query
  $numRows=mysql_num_rows($result);
  if(!$result){
   $this->print_query_text($sql);
   die($e->print_errore(4,"Riga 147, myclass-2.php")); //stampa: Errore 
nella query: (mysql_error());
  }
  else{
   if($field!=""){
    $array=mysql_fetch_assoc($result);//restituisce un array coi risultati 
della query;
    return $array[$field];
   }else{
    return mysql_fetch_assoc($result);//restituisce un array coi risultati 
della query;
   }
   mysql_free_result($result);
  }
 }
Non riesco a capirne il motivo e non trovo soluzioni.. forse devo rileggere 
le guide anzi di sicuro, ma al momento non so cosa guardare nello 
specifico..
Ne avete un'idea?
Grazie a tutti!!
Logan 

   $strumenti=$this->tools(); // attiva la classe strumenti (dove c'è il


 nello specifico..
sì, ma prima delle guide sul problema specifico, ti consiglio di studiare 
meglio le basi della programmazione , perchè hai fatto una marea di 
errori.  

 
grazie per le risposte che mi sono state utili per ora, continuerò a 
sbatterci la testa finchè non trovo la soluzione adatta al mio problema..

 che mi serve..
vuoi avere un vettore con tutti i record della query (ognuno memorizzato 
in un vettore associativo)?
$result=mysql_query($query) or die(mysql_error());
$ret=array();
while($row = mysql_fetch_assoc($result)){
$ret[] = ($field!="")?$row[$field]:$row;
}
return $ret;
questo da per scontato che $field sia un  campo della tabella che esiste 
realmente, magari un  controllino non sarebbe male, ad esempio puoi 
trasformare l'operatore ternario così:
$ret[] = ($field!="" && isset($row[$field]))?$row[$field]:$row;
cioè se $field non esiste ti restituisce il record intero
oppure puoi decidere di restituire errore se $field non esiste

RedWiz ha scritto:


Finalmente funzia! ecco il codice (sempre liberi di correggermi!):
$ConnDb_1=new dbConn;
$ConnDb_2=new dbConn;
$LIBRI=$ConnDb_1->query("select * from libri where nLibri='Imparare php' 
Limit 1");
foreach($LIBRI as $k=>$v){
	print_r("$k:\n");
	if(is_array($v)){
		foreach($v as $a=>$b){
			print_r("<b>$a</b>: <i>$b</i>\n<br>");
		}
	}else{
		print_r("<b>$k</b>: <i>$v</i>\n<br>");
	}
}
/*-----------------------------------*/
$LIBRI_usati=$ConnDb_2->query("select * from libri_usati where 
libro='".$LIBRI[0][nLibri]."'","");
print "<br>LIBRI USATI <b>".strtoupper($LIBRI[0][nLibri])."</b>:\n<br>";
foreach($GLIBRI_usati as $k2=>$v2){
	print_r("<hr>\n");
	if(is_array($v2)){
		foreach($v2 as $a2=>$b2){
			print_r("<b>$a2</b>: <i>$b2</i>\n<br>");
		}
	}else{
		print_r("<b>$k2</b>: <i>$v2</i>\n<br>");
	}
}
invece nella classe DbConn il metodo pubblico (è corretto che sia 
pubblico o dovrei renderlo privato?) query è:
public function query($sql, $field=""){
		$strumenti=$this->tools(); // attiva la classe strumenti (dove c'è il 
filtro)
		$e=$this->errors(); // attiva la classe degli errori
		$conn=$this->dbConn(); // attiva la connessione al db
		$query=$strumenti->filtro($sql);//filtra la query
		$result=mysql_query($query)or die(mysql_error());//esegui la query
		$numRows=mysql_num_rows($result);
		if(!$result){
			$this->print_query_text($sql);
			die($e->print_errore(4,"Riga 147, myclass-2.php")); //stampa: Errore 
nella query: (mysql_error());
		}
		else{
 
			$ret=array();
			while($row = mysql_fetch_assoc($result)){
				$ret[] = ($field!="" && isset($row[$field]))?$row[$field]:$row;
			}
			mysql_free_result($result);
			return $ret;
 
 
		}			
}
Grazie RedWiz e a tutto il ng!! :)

 		}
In una classe non dovresti mai avere delle stampe a video, se non per 
motivi temporanei di debug. Dovresti solo sollevare eccezioni, che devono 
essere trappate da fuori.
Giusto per metterti un po' di altra carne sul fuoco... ;)
Bye.

 Per iniziare, funziona e stai imparando un po' le basi.
Era proprio ciò di cui avevo bisogno, molti di questi consigli/
correzioni i libri non te li forniscono (o magari si, ma un
apprendista alcune sfumeture le ignora alla sua prima esperienza) ed
era esattamente quello che mi serve!
GRAZIE! :)
mi metterò subito al lavoro per cucinare al meglio la carne ;)
Logan.