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

  • Creatore Discussione Creatore Discussione otto9due
  • Data di inizio Data di inizio

otto9due

Utente Attivo
22 Feb 2014
591
25
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.
 
penso che ti manchi un echo davanti alla chiamata, se non lo metti non scrive nulla
 
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.
 
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..
 

Discussioni simili