Ciclo foreach dentro un ciclo while

  • Creatore Discussione Creatore Discussione Marco83
  • Data di inizio Data di inizio

Marco83

Nuovo Utente
3 Dic 2011
2
0
0
Salve,

Complimenti innanzitutto per la bella community e per il sito ricchissimo di contenuti (dai quali attingo di frequente).

Espongo qui il mio problema cercando di essere il più chiaro possibile.

Ho due tabelle "macchine" e "concessionarie" così strutturate:

Tab Macchine
Codice:
|id_macchina|nome_macchina| ecc ecc
|     1     |    fiesta   | ecc ecc
|     2     |     panda   |
|     3     |     punto   |
|     4     |    twingo   |
|    ecc    |      ecc    |

Tab Concessionarie
Nella colonna con_macchine, tramite form, inserisco come array gli id delle corrispondenti auto.
Codice:
|con_id|con_nome|con_macchine| ecc ecc
|  1   |  Fiat  |     2,3    | ecc ecc
|  2   |  Ford  |     1      |
|  3   |Renault |     4      |
|  ecc |  ecc   |     ecc    |

Ora vorrei riuscire ad ottenere una pagina in cui si visualizzano le seguenti informazioni:

Nome concessionaria - Macchine
Fiat - Panda, Punto
Ford - Fiesta
Renault - Twingo

Per estrarre il nome della concessionaria non ho problemi, ma non so come estrarre il nome delle macchine da id.

Ho provato in questo modo:

PHP:
$concessionarie_sql = $data->query("SELECT * FROM concessionarie ORDER BY con_nome ASC");

while($concessionarie_obj = $data->estrai($concessionarie_sql)){
  //Estraggo i dati relativi alle concessionarie
	$con_id[] = $concessionarie_obj->con_id;
	$con_nome[] = $concessionarie_obj->con_nome; 
	ecc ecc	 

  //Ora provo ad estrarre gli id delle macchine e a trasformarli in nomi.
       $con_macchine[] = $concessionarie_obj->con_macchine;
       $con_macchine[] = explode(',',$con_macchine);	
 
       $auto = array(); 

         foreach ($con_macchine AS $macchina) {     
            $macchine_sql = $data->query("SELECT nome_macchine FROM macchine WHERE id_macchina = '$macchina'");
              while($macchine_obj = $data->estrai($macchine_sql)){
                 $auto[] = stripslashes($macchine_obj->nome_macchina)." ";       
               }
         } 
}

Lo so, il codice è un pò confuso ma dopo vari tentativi, almeno con questo sono riuscito a fare un piccolo passo avanti. Solo che per ogni concessionaria, il codice restituisce solo il primo elemento dell'array, quindi ad esempio per fiat ottengo solo "panda" e non "panda,punto".

Avete suggerimenti?
 
ciao
secondo me, ma può essere che sbagli, il tuo problema nasce con un "peccato originale".
essendo la tabella delle marche auto (fiat, ford....) una tabella che contiene dati più generali rispetto a quelle dalle auto dovresti fare in modo che le due tabelle fossero fatte così:
tab concessionarie
Codice:
|con_id|con_nome| ecc ecc
|  1     |  Fiat      | ecc ecc
|  2     |  Ford     |
|  3     |Renault   |
| ecc   |  ecc      |
tab macchine
Codice:
|id_macchina|id_con|nome_macchina| ecc ecc
|     1         |   2    |   fiesta           | ecc ecc
|     2         |   1    |   panda          |
|     3         |   1    |   punto          |
|     4         |   3    |  twingo         |
|    ecc       | ecc   |  ecc             |
da qui con delle join poi estrai tutto quello che vuoi es.

SELECT c.con_nome, m.nome_macchina concessionarie AS c, macchine AS m WHERE m.id_con=c.id_con .....
 
Ti ringrazio innanzitutto per la risposta.

Si, facendo il quel modo risolverei il problema e credo che verrebbe fuori un codice anche più pulito e ordinato; il problema è che la tabella concessionarie viene popolata dagli utenti registrati... cioè, il proprietario della concessionaria si registra e tramite form invia le credenziali della sua azienda (nome, via, ecc.) e le automobili disponibili.

Se adottassi la tua soluzione dovrei far eseguire due query al momento della registrazione, una per popolare la tabella concessionarie e una per inserire gli id delle auto nella tabella macchine... il che creerebbe altri disordini credo.

Sono un pò in palla...
 
ciao
scusa una (o due) domanda:
ma la concessionara che si registra non riceve una pass o username?
non controlli chi si registra per poi autorizzare l'inserimento?
perchè non fai cosi può registrarsi uno qualsiasi (es io che con le concessionarie non ho nulla a che fare) e potrei inserire, es., delle foto di alex (orribile visu)
inoltre da quello che intuisco la consessionaria inserisce una o più automobili con determinate caratteristiche, ma se le caratteristiche cambiano o l'auoto non c'è più, la concessionaria può modificare o eliminare?
se è così (senza pass) la concessionaria A può andare a modificare/eliminare l'auto della concessionaria B (e non mi sembra una cosa corretta)
 

Ciao Marco83, secondo me è meglio seguire il consiglio di chi ne sa di piu, è vero è antipatico, ma sei fai come ti hano detto tirerai fuori un bel progetto.
Ricorda un db ben strutturato è quasi la metà del progetto
Ciao
 

Discussioni simili