Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    foreach: come si usa esattamente? Non ho capito ...

    Ciao a tutti,

    vorrei estrarre il contenuto di una tabella da un databse utilizzando il comando 'foreach' ma, per ragioni che mi sfuggono, questo codice estrae solo i dati corrispondenti al primo record:

    codice:
    
    include_once "_include/connessione.php";
    
    $query = 'SELECT * FROM utenti';//Seleziono la tabella da cui mi interessa estrarre i dati
    $risultato = mysql_query ($query,$conn);//Passo la query a MySQL
    
    $array = mysql_fetch_assoc($risultato);//Costruisco un array costituito dai soli indici asociativi
    
    //Costruisco il ciclo per estrarre i dati
    foreach ($array as $chiave => $valore)
    		{
    		echo "Campo: " . $chiave . " - " . "Contenuto: " . $valore . "
    \n";
    		}
    


    Se invece adoperao il seguente codice riesco ad estrarre tutti i record della tabella:

    codice:
    
    include_once "_include/connessione.php";
    
    $query = 'SELECT * FROM utenti';//Seleziono la tabella da cui mi interessa estrarre i dati
    $risultato = mysql_query ($query,$conn);//Passo la query a MySQL
    
    
    //Costruisco il ciclo per estrarre i dati
    while ($riga = mysql_fetch_assoc($risultato))
    	{
    	echo "Nome: " . $riga['nome'] . "
    \n";
    	echo "Cognome: " . $riga['cognome'] . "
    \n";
    	echo "EMail: " . $riga['email'] . "
    \n";
    	}
    


    Qualcuno mi spiega come funziona esattamente il comando 'foreach'? Sembra che il contatore non si incrementi rimanendo sempre sul primo record estratto ... :master:
    cosmosub
    --------
    "So di non sapere" - Socrate

  2. #2
    il punto non è che usi male foreach.. usi male mysql_fetch_*

    quella funzioe restituisce un record alla volta, ad ogni invocazione

    mentre foreach cicla sugli elementi di un array.. ma ogni array è una riga

    http://it.php.net/manual/it/function...etch-assoc.php
    http://it.php.net/manual/it/function...-fetch-row.php

    http://it.php.net/manual/it/control-...es.foreach.php


  3. #3
    Originariamente inviato da }gu|do[z]{®©
    il punto non è che usi male foreach.. usi male mysql_fetch_*
    :master: Non capisco:mysql_fetch_assoc($risultato) è uguale in entrambi gli script, sia quello che usa foreach sia quello che usa while.
    Ho letto su http://it.php.net/manual/it/functio...l-fetch-row.php che "[] ... La susseguente chiamata a mysql_fetch_row() restituisce la successiva riga nell'intervallo del risultato oppure FALSE se non ci sono più righe ... []". Questo immagino valga per mysql_fetch_* ... siccome non l'ho incluso nel ciclo non passa al record successivo, giusto?
    cosmosub
    --------
    "So di non sapere" - Socrate

  4. #4
    Originariamente inviato da cosmosub
    :master: Non capisco:mysql_fetch_assoc($risultato) è uguale in entrambi gli script, sia quello che usa foreach sia quello che usa while.
    Ho letto su http://it.php.net/manual/it/functio...l-fetch-row.php che "[] ... La susseguente chiamata a mysql_fetch_row() restituisce la successiva riga nell'intervallo del risultato oppure FALSE se non ci sono più righe ... []". Questo immagino valga per mysql_fetch_* ... siccome non l'ho incluso nel ciclo non passa al record successivo, giusto?
    nel rpimo script estrai un unico record e cicli sui campi del record [che viene restituito come array] con foreach [che serve appunto a ciclare su tutti gli elementi di un array].

    nel seocndo script cicli sull'insieme di record restituito dalla tua query

    chiaro?

    ogni chiamata di mysql_fetch_assoc estrae un record

  5. #5
    Grazie 1000 }gu|do[z]{®©,

    credo di aver capito!
    Resta il fatto che utilizzando il comando while si ottiene lo stesso risultato, apparentemente, con minore fatica.
    A scopo di studio ho elaborato questo script per estrarre i dati di una tabella utilizzando il comando foreach:

    codice:
    //CONNESSIONE DB
    include_once "../_include/connessione.php";
    $query = 'SELECT * FROM utenti';//Seleziono la tabella da cui mi interessa estrarre i dati
    $risultato = mysql_query ($query,$conn);//Passo la query a MySQL
    
    //INTESTO LA TABELLA
    echo "<table width=\"\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n";
    $array = mysql_fetch_assoc($risultato);//Costruisco un array costituito dai soli indici asociativi
    
    //COSTRUISCO IL CICLO PER ESTRARRE I NOMI DELLE TABELLE
    echo "<tr>";
    foreach ($array as $chiave => $valore)
    	{
    	echo "<td>[b]" . $chiave . "</strog></td>\n";
    	}
    echo "</tr>";
    
    //COSTRUISCO IL CICLO PER ESTRARRE IL CONTENUTO DEI CAMPI
    for ($i=1 ; $i<=mysql_num_rows($risultato) ; $i++)
    	{
    	echo "<tr>";
    	foreach ($array as $valore)
    		{
    		if ($valore == "")//Verifico che il campo non sia vuoto
    			{
    			//Se il campo è vuoto passo  (per non far visualizzare la tabella senza margini)
    			echo "<td></td>\n";
    			}
    			else //Altrimenti ...
    			{
    			//Passo il valore realmente contenuto nella tabella
    			echo "<td>" . $valore . "</td>\n";
    			}
    		}
    	echo "</tr>";
    	$array = mysql_fetch_assoc($risultato);//Richiamando mysql_fetch_assoc incremento la posizione del puntatore
    	}
    
    echo "</table>";

    Conosci un metodo più 'elegante' per ottenere lo stesso risultato?
    Vuoi farmi delle critiche costruttive sul codice che ho scritto?
    cosmosub
    --------
    "So di non sapere" - Socrate

  6. #6
    devi usare il while.. scordati del foreach.. usi il while per ciclare sull'insieme dei record.. poi si presuppone che i campi tu li conosca.. quindi non hai bisogno del foreach... chiaramente a meno che non si tratti di uno script che deve per qualche modo funzionare con tabelle che possono avere un numero variabile di campie


  7. #7
    Si sono daccordo anch'io; ho voluto lo stesso cogliere l'occasione per cercare di capire meglio foreach: potrebbe sempre servire!
    Grazie 1000 ancora: sei stato molto chiaro!
    cosmosub
    --------
    "So di non sapere" - Socrate

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.