|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2007
Messaggi: 4305
|
[php+mysql]Inserimento date...
Salve, ho un piccolo script dove mediante un form htm, inserisco dei dati in un db mysql, ora vorrei che quando effettuo la query di inserimento posso inserire e quindi registrare anche la data...e poi successivamente visualizzarla...Come potrei procedere?
__________________
Feedback Mercatino |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Beh hai l'imbarazzo della scelta:
- Memorizzi il timestamp unix come attributo long nel database. Da php la funzione che ritorna il timestamp è time() (hai informazioni anche sull'ora) - Memorizzi la data in un formato "leggibile", usando attributi DATE (AAAA-MM-GG) oppure DATETIME (AAAA-MM-GG OO:MM:SS) e li puoi ricavare sia da mysql con la funzione NOW() o da php convertendo il timestamp nel formato desiderato. Poi puoi sbizzarrirti come vuoi per esempio registrando le date come stringhe in un formato che decidi te via php o altro ancora. In realtà sotto mysql la gestione delle date e del tempo è così varia che spesso si fa un po' di confusione. Io per abitudine preferisco usare il timestamp unix, lo trovo più semplice da usare per i confronti e mediante php lo puoi trasformare in stringa nel formato che preferisci.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2007
Messaggi: 4305
|
Infatti può sembra un argomento semplice, invece...
Che venga registrata la data del primo inserimento, fin qui dovrebbe essere semplice, mi creo un campo timestamp nel db che vado a popolare con la query di inserimento giusto? poi ho la pagina di aggiornamento dove ci sono 5 campi che potrebbero essere aggiornato oppure no successivamente e vorrei che per ogni campo ci sia la data di modifica, come potrei fare non so se mi sono spiegato bene....
__________________
Feedback Mercatino |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Se ho capito bene tu devi inserire in una tabella dei dati i quali poi possono essere modificati e devi tenere traccia delle modifiche (della data almeno).
Io userei due tabelle: la prima tabella contiene i dati veri e propri aggiornati, nell'altra invece registri le date delle modifiche. La prima tabella potrebbe essere del tipo: DATI (id_dato, attributo_1, attributo_2, attributo_3, data_primo_inserimento) la seconda tabella protrebbe essere: MODIFICHE (id_modifica, id_dato, attributo_modificato, data_modifica) L'uso della tabella DATI è logico: quando inserisci un nuovo insieme di dati, crei un nuovo record che avrà un id_dato univoco (puoi farlo autoincrement) che sarà anche la chiave primaria, gli attributi di interesse e la data di primo inserimento. La tabella MODIFICHE contiene un id_modifca anche questo autoincrement e primary key, una chiave esterna id_dato che riporta l'id del dato modificato, un valore che indica quale attributo è stato modificato e la data di modifica. Il valore "attributo_identificato" devi decidere te come usarlo. Se per esempio tratti dati anagrafici, potresti dire che "attributo_modificato" assume valori da 1 a 3 dove 1=nome, 2=cognome, 3=C.F... Potresti anche usare una terza tabella dove associ i numeri agli attributi, ma non è necessario. In questo caso, se modifichi più attributi alla volta dovrai fare tante query di inserimento quanti sono gli attributi modificati.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight Ultima modifica di demos88 : 25-05-2011 alle 20:37. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2007
Messaggi: 4305
|
Ciao ho fatto qualche prova e non sono riuscito a risolvere, in pratica, non ho capito come fare, ecco un esempio questi sono i campi che possono vengono aggiornati singolarmente e in giorni diversi quindi la data deve essere indipendente...
Campo 1 = xxxxxx Data campo 1 = dd/MM/yyyy Campo 2 = yyyyy Data campo 1 = dd/MM/yyyy Campo 3 = zzzzzz Data campo 1 = dd/MM/yyyy Io per aggiornare i dati nei campi utilizzo questa query: Codice PHP:
__________________
Feedback Mercatino |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Quello a cui avevo pensato era qualcosa del genere:
creo le due tabelle che mi servono Codice:
CREATE TABLE `db`.`accounts` ( `account_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nome` VARCHAR( 16 ) NOT NULL , `cognome` VARCHAR( 16 ) NOT NULL , `cf` VARCHAR( 16 ) NOT NULL , `data_creazione` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB; CREATE TABLE `db`.`modifiche` ( `id_modifica` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `account` INT NOT NULL , `dato_modificato` INT NOT NULL , `data_modifica` INT NOT NULL , INDEX ( `account` ) ) ENGINE = InnoDB; ALTER TABLE `modifiche` ADD FOREIGN KEY ( `account` ) REFERENCES `db`.`accounts` ( `account_id` ) ON DELETE CASCADE ON UPDATE CASCADE ; Codice:
INSERT INTO `db`.`accounts` VALUES ( NULL , 'Paolo', 'Rossi', 'PLARSS', CURRENT_TIMESTAMP ); Ipotizzo che tu abbia delle caselle di testo da riempire con i nuovi dati (nome, cognome, cf); se all'atto della conferma una casella di testo è vuota oppure corrisponde al contenuto già presente nel DB, allora consideri il dato come non da modificare. Nello script che riceve i dati (presumiamo via GET) dovrai fare i vari controlli per verificare quali siano i dati da modificare. Ipotizziamo che tu abbia ricevuto nome e cf nuovi (l'esempio è infelice perchè se cambi il nome è ovvio che cambi anche il cf, ma tralasciamo...). Nello script php ti ritrovi $_GET['nome'] e $_GET['cf'] non nulli e diversi da quelli nel db (devi aver prima fatto un select ricercando l'id_account dell'account da modificare). Per modificare i 2 dati, userai in tutto 3 query: 2 per registrare le modifiche: Codice:
$sql="INSERT INTO `db`.`modifiche` VALUES (NULL , '". $id_account ."', '1', CURRENT_TIMESTAMP);" $sql="INSERT INTO `db`.`modifiche` VALUES (NULL , '". $id_account ."', '3', CURRENT_TIMESTAMP);" Ovviamente $id_account è l'id dell'account che modifichi e devi saperlo. Poi modifichi i dati veri e propri con una query di UPDATE: Codice:
$sql="UPDATE `db`.`accounts` SET `nome` = '". $_GET['nome'] ."', `cf` = '". $_GET['cf'] ."' WHERE `accounts`.`account_id` =". $id_account . ";"; Al posto dei numeri, per indicare l'attributo modificato puoi usare delle stringe tipo: "n", "c", "cf". Però il confronto fra numeri è in generale più veloce...
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:30.



















