[PHP-MYSQL] Array

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

[PHP-MYSQL] Array

Messaggio da abranca »

Ciao a tutti ragazzi,

sono a chiedere consiglio a qualcuno di voi più esperto di me.
Ho fatto un corso di programmazione php-mysql, e sto mettendo in pratica gli insegnamenti appresi ma ora ho un problema che non so come risolvere.

Spiego brevemente.

Ho due tabelle:
una di "accettazione cliente" in cui passo tutti i dati che mi servono: idCliente, data ingresso, data uscita, accessori e sintomi;
la seconda "accessori" che contiene l'elenco degli accessori e l'id.

Nel form iniziale, ho un elenco a discesa dove seleziono il cliente, dei campi dove inserisco le date, sintomi dove scrivo i sintomi e il campo accessori dove posso fare una selezione multipla.
Quando salvo l'accettazione salvo il campo accessori come array.
Nel database mi trovo, ad esempio:
idAccettazione = 1
idCliente = 5
dataIngresso = xx-xx-xxxx
dataUscita = xx-xx-xxxx
sintomi = testo scritto da me
accessori = 1,5,8 che corrispondono agli id degli accessori.

Ora mi trovo in questa situazione: compongo la scheda del lavoro ma vorrei che nel campo accessori, al posto dei numeri, corrispondano le descrizioni (accessorio1, accessorio5, accessorio8).

Mi trovo in difficolta.
Premetto che questo corso che ho seguito non è stato molto completo, cioè non sono stati fatti esempi pratici sufficienti per potermi far comprendere bene le viste, join, o altro.

Credo che il problema si possa risolvere con una join, ma non ho ben compreso il funzionamento.
Spero possiate aiutarmi!

Grazie in anticipo a tutti
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

ma il problema è l' sql ? non ho capito
se è l' sql

Codice: Seleziona tutto

SELECT campi, che, ti, servono
FROM tabellaA JOIN tabellaB on tabellaA.campo = tabellaB.campo
WHERE condizione di una delle due tabelle o entrambe
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

Grazie per la risposta.
In realtà entrambi! Il corso l'ho fatto online ma non sono stati molto chiari su alcuni passaggi.
Per inserire gli id articoli dal form php ho usato la funzione

Codice: Seleziona tutto

$arrAccessori = implode(",", $accessori);
che mi ha permesso di salvare la selezione multipla nella variabile $arrAccessori per poi fare una insert e salvarla nel database.
E fin qui tutto ok.

Il mio problema era come impostare la query per trasformare gli id della colonna accessori in descrizioni e come poter impostare, in php, la "stampa" nella scheda cliente delle descrizioni e non degli id.

In poche parole sono interessato sia alla sintassi mysql che php. mi piace capire e cercare di approfondire.

Ho provato con la query che mi hai segnalato nell'editor del db ma mi viene restituita vuota.
Ti allego 3 immagini per farti capire meglio.

La prima riguarda la tabella di accettazione per il cliente numero 5.
Come puoi vedere in accessori ci sono tre id identificativi.

Facendo la tua query mi viene restituita vuota (img2).

La img3 è il risultato del "gestionale" in php.
Quello che vorrei fare è trasformare la colonna articoli da valore id a descrizione.
Forse vedendo cosa voglio fare si può comprendere meglio il problema.

Spero di essere riuscito a spiegarmi bene. Scusate se faccio un po' di confusione ma sono agli inizi della programmazione php e faccio ancora un po' di confusione :shy:
Allegati
Risultato Finale
Risultato Finale
Img 2 - Query Join
Img 2 - Query Join
Img 1 - dettaglio cliente 5
Img 1 - dettaglio cliente 5
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

allora ricapitoliamo nella tabella cliente hai una colonna in cui ci sono più interi per gli accessori ?
cioè hai la colonna accessori di cliente che contiene più id di accessori ?
se si secondo me è progettato male il db, dovresti avere una tabella con i clienti, una tabella con gli accessori e una tabella intermedia con id cliente e id accesori
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

allora il db è strutturato così:

gestionale
|_clienti (che contiene id, nome, cognome, cellulare, telfisso, email)
|_accessori (che contiene id, descrizione)
|_tipologia (id, descrizione)
|_accettazione (id,idCliente,dataIngresso,dataUscita,idTipologia,idAccessori,sintomi)

ora il "problema" è che un cliente può presentare più accessori e quando inserisco una scheda lavoro se ha tre accessori devo poterli salvare tutti e tre!
Se no dovrei fare x colonne dove salvare i vari id, ma non penso sia la soluzione corretta.
Domani aumentano gli accessori e cosa faccio? ricostruisco il db? direi di no.....

L'immagine riassuntiva allegata prima (img3) è la vista della tabella accettazione che contiene l'id cliente (di cui ho estratto il nome), codice lavoro (che sarebbe l'id della tabella accettazione), data accettazione e data consegna, l'id hardware (che sarebbe l'id della tipologia) e gli id degli accessori.

Come dicevo all'inizio sicuramente faccio un errore io o non so come impostare al meglio, ma sono agli inizi e mi piacerebbe capire e migliorare.
tu come imposteresti il db?

dato che ho usato implode per salvare la scelta multipla in un campo della tabella, con explode riesco a ricomporre l'array e con una query associare i vari idAccessori alla loro descrizione?
è questa la mia domanda a cui non so che soluzione applicare....
Allegati
riassuntiva
riassuntiva
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

io voglio capire solo una cosa
in questa tabella
accettazione (id,idCliente,dataIngresso,dataUscita,idTipologia,idAccessori,sintomi)
nella colonna idAccessori quanti id ci metti? di norma ne andrebbe inserito 1 e con una join puoi risolvere il problema della descrizione.
quindi per ogni accessorio del cliente crei una riga identica dove cambia appunto solo l' id accessorio e per questo suggerivo di creare una nuova tabella id_cliente id_accessorio rimuovendo la colonna idAccessori da accettazione.

se invece nella colona idAccessori salvi più di un id allora la join non puoi usarla e devi salvare gli id degli accessori in un array e poi per ogni id fai le query
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

si esattamente.
come ho scritto all'inizio salvo più id in quanto è una select multipla e passo i campi come array

Codice: Seleziona tutto

$arrAccessori = implode(",", $accessori);
Quindi si, è un array.
Ora come devo comportarmi?
Devo usare explode?
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

se sei riuscito a creare un array con gli id basta che per ogni elemento fai la select
una cosa del tipo

Codice: Seleziona tutto

$descrizioni = array();
forach($array as $id) {
       $query = 'select descrizione from tabella where id=' . $id;
       $result = mysql_query($query);
       $dati = mmysql_fetch_array($result);
       $descrizioni[] = $dati['descrizione'];
} 
cosi nell' array descrizioni hai tutte le descrizioni dei prodotti, nella view fai il foreach e te le prendi
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

Niente non ci sono riuscito!
Mi scuso per il ritardo ma ho avuto dei problemi col pc.


Comunque sia.
Con questo sono riuscito a dividere i campi:

Codice: Seleziona tutto

$stringa = $idAccessori;
                                    $ex = explode(',', $stringa); 
                                    foreach ($ex as $key) {
                                    echo $key."<br />" ;
                                        }
e mi scrive tutti i valori uno sotto l'altro, ossia da

Codice: Seleziona tutto

1,4,5
a

Codice: Seleziona tutto

1
4
5
con il secondo codice che posto, faccio una select sulla tabella accessori:

Codice: Seleziona tutto

$query = "select * from $tabAccessori where id=$key";
                                    $eseguiquery = mysql_query($query,$conn);
                                     while ($ris = mysql_fetch_assoc($eseguiquery)) {
                                         echo $ris['tipologia']."<br />";
                                     }
èd è già un risultato!
Ora il problema qual'è....che mi scrivi solo l'ultimo idAccessorio rilevato ossia il numero 5.

:cry:
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

suppongo che l' id sia la primary key di accessori quindi questa

Codice: Seleziona tutto

$query = "select * from $tabAccessori where id=$key";
ritorna una singola riga

Codice: Seleziona tutto

 while ($ris = mysql_fetch_assoc($eseguiquery)) {
                                         echo $ris['tipologia']."<br />";
                                     }
questo while è ridondante dato che come detto la riga è unica,
il problema è che le query le devi fare come ti ho descritto sopra
per ogni id dell' array fai la select e in un nuovo array salvi la colonna che ti serve
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

ma secondo te, aver strutturato il db in questo modo è sbagliato?
ossia passando un array degli id accessori?
come è possibile modificarlo e migliorarlo?
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

la relazione tra cliente e accessori è N a N poichè un cliente può avere più accessori e un accessorio può appartenere a più clienti, in questi casi la relazione si implementa creando una nuova tabella.
la tabella clienti va bene, la tabella accessori va bene, la tabella tipologia va bene, la tabella accettazione se il cliente può avere più tipologie o accessori rimuovi le colonne, e crea altre due tabelle, con tre colonne una id_cliente id_acettazione e id_accessorio, e un altra con id_cliente id_accettazione e id_tipologia, cosi per ogni accessorio che appartiene al cliente inserisci una riga nella prima tabella, stesso discorso per le tipologie inserendo nella seconda tabella.
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

grazie mille per la spiegazione!
scusa per il ritardo della risposta ma sono stato preso.

quindi una volta create le altre due tabelle, premendo il pulsante "inserisci" oltre alla tabella accettazione (che non ha più le colonne tipo e accessori) faccio eseguire altre due query (in totale 3) che vadano a compilare tutte le tabelle.

ora quello che non mi torna e che non riesco a focalizzare.
i campi (vedi immagine allegata) sono di selezione multipla.
come faccio a passare in un colpo solo tutti gli id inseriti???

grazie nel frattempo per le tue spiegazioni e per avermi fatto vedere un modo diverso di costruire il database!
Allegati
campi.png
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

allora o prepari una insert ad hoc che fa

tipo

Codice: Seleziona tutto

insert into tabella (id_cliente, id_id_accettazione, id_accessorio) values (1, 2, 3), (1, 2, 4), (1, 2, 5);
oppure per ogni id accessorio fai una insert
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

mi scuso nuovamente per il ritardo della risposta, ma ho dovuto abbandonare temporaneamente il progetto.
volevo chiederti un chiarimento.

i values che mi hai scritto nella query, sarebbero gli id degli accessori?
se cosi fosse non voglio passarli io a mano...
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [PHP-MYSQL] Array

Messaggio da ienaplinsky »

eh no non le devi inserire a mano, la stringa la devi creare tu

esempio primo caso (un unica insert)

Codice: Seleziona tutto

$idCliente = $_POST['idCliente'];
$idAccettazione = $_POST['idAccettazione];
$idAccessori = $_POST['idAccessori'];

$query = "INSERT INTO TABELLA (id_cliente, id_accettazione, id_accessorio) VALUES";
$virgola = false;
foreach($idAccessori as $idAccessorio) {
   if($virgola) {
      $query .= ","
   }
   
   $query .= " ($idCliente, $idAccettazione, $idAccessorio) "; 
   $virgola = true;
}

mysql_query($query);
esempio secondo caso (una insert per ogni id)

Codice: Seleziona tutto

foreach($idAccessori as $idAccessorio) {
   $query = "INSERT INTO TABELLA (id_cliente, id_accettazione, id_accessorio) VALUES ($idCliente, $idAccettazione, $idAccessorio)";
   mysql_query($query);
}
abranca
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 23 gennaio 2013, 11:48
Desktop: Gnome
Distribuzione: Ubuntu GNOME 15.04
Sesso: Maschile

Re: [PHP-MYSQL] Array

Messaggio da abranca »

ottimo, ora mi è più chiaro dopo aver letto gli esempi!
procedo con le mie prove e ti aggiorno!

grazie mille per la disponibilità ad insegnarmi!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti