Piccola domandina.. Aiutatemi a capire una questa cosa strana..

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Ho costruito una classe un metodo al suo interno è fatto così..
PHP:
// Crea elenco autori
		public function ElencoAutoriSelect()
		{
			include "../funzioni/db/connection.php"; 
			  try
			{
			  $sql = 'SELECT id, nome, cognome, motto, link, linkimg FROM autori ORDER BY cognome DESC, nome DESC';
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include 'ERRORDB/outputpage.php';
			  exit();
			}     
			foreach ($result as $row)
			{
			  $autori[] = array(
				'id' => $row['id'],
				'nome' => $row['nome'],
				'cognome' => $row['cognome'],
				'motto' => $row['motto'],
				'link' => $row['link'],
				'linkimg' => $row['linkimg']			
			  );
			}
			
			$pattern = '<option value="%s">%s%s</option>';
			foreach ($autori as $autore) {
				$autore[] = sprintf($pattern, $autore["id"], $autore["nome"], $autore["cognome"]);
			}
			
			return $autore;
		}
Ora la cosa che non mi torna è questa..
In un' altra pag. vado a richiamare il metodo, avendo (istanziato la classe).
La cosa strana è che se scrivo così:
PHP:
<?php $tot->ElencoAutoriSelect();?>
non succede nulla..
Se scrivo così invece ( avevo fatto un test per vedere cosa arrivava ):
PHP:
<?php $tot->ElencoAutoriSelect(); var_dump($tot->ElencoAutoriSelect());?>
Il tutto funziona.. ed il risultato è questo..
Codice:
<select>
			array(7) {
  ["id"]=&gt;
  string(1) "1"
  ["nome"]=&gt;
  string(7) "Giacomo"
  ["cognome"]=&gt;
  string(9) "Gigliotti"
  ["motto"]=&gt;
  string(255) "dati inseriti prova"
  ["link"]=&gt;
  string(23) "http://www.miosito.it"
  ["linkimg"]=&gt;
  string(0) ""
  [0]=&gt;
  string(43) "<option value="1">GiacomoGigliotti</option>"
}
            </select>
Dove sbaglio?
I dati arrivano, ma non riesco a farli visualizzare come vorrei.
Il mio obiettivo è che la select si riempia di option prendendo i valori dal db.
Grazie anticipatamente.
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
penso che ti manchi un echo davanti alla chiamata, se non lo metti non scrive nulla
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Si questo l'ho già provato, ed ora c'è..
Ho fatto anche un altro tentativo migliorando la situazione...
PHP:
// Crea elenco autori
		public function ElencoAutoriSelect()
		{
			include "../funzioni/db/connection.php"; 
			  try
			{
			  $sql = 'SELECT id, nome, cognome, motto, link, linkimg FROM autori ORDER BY cognome DESC, nome DESC';
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include 'ERRORDB/outputpage.php';
			  exit();
			}     
			foreach ($result as $row)
			{
			  $autori[] = array(
				'id' => $row['id'],
				'nome' => $row['nome'],
				'cognome' => $row['cognome']			
			  );
			}
			
			$pattern = '<option value="%s">%s%s</option>';
			foreach ($autori as $autore) {
				$autore[] = sprintf($pattern, $autore["id"], $autore["nome"], $autore["cognome"]);
			}
			$autoretot = implode(' ', $autore);
			
			return $autoretot;
		}
Ma c'è sempre qualcosa che non va..
Ecco il risultato:
Codice:
<select>1 Giacomo Gigliotti <option value="1">GiacomoGigliotti</option></select>
Non capisco cosa generi quella parte prima di option.
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
PHP:
public function ElencoAutoriSelect()
		{
			include "../funzioni/db/connection.php"; 
			  try
			{
			  $sql = 'SELECT id, nome, cognome FROM autori ORDER BY cognome DESC, nome DESC';
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include 'ERRORDB/outputpage.php';
			  exit();
			}     
			foreach ($result as $row)
			{
			  $autori[] = array(
				'id' => $row['id'],
				'nome' => $row['nome'],
				'cognome' => $row['cognome']			
			  );
			}
			
			$pattern = '<option value="%s">%s %s</option>';
			foreach ($autori as $autore) {
// era qui l'errore...
				$autoresing[] = sprintf($pattern, $autore["id"], $autore["nome"], $autore["cognome"]);
			}

			$autoretot = implode(' ', $autoresing);
			
			return $autoretot;
		}
alla fine ho risolto.. avevo dato lo stesso nome all'array..