|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
[PHP] inviare solo dati modificati
Supponendo di avere un form per la modifica dei dati presenti in un database, si può effettuare il submit dei soli dati modificati senza inviare quelli non modificati?
L'unica soluzione che mi è venuta in mente fino ad ora è quella di creare un form che contenga dei campi hidden generati dall'evento onchange di javascript e fare il submit di quest'ultimo form. Non so se la soluzione è fattibile... altrimenti c'è un modo meno complesso?
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
A che prò?
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2005
Città: Bisceglie (BT)
Messaggi: 1091
|
un modo semplice che mi viene in mente è che prima di caricare il form (nel codice)... vai nel database e prelevi i dati che ci sono, mettendoli nelle relative variabili.
al submit fai il confronto di quelle prelevate da DB e di quelle POST o GET (a seconda della modalità utilizzata) che vengono dal form.
__________________
[Laptop] DELL XPS 15 9510 (2021) i7-11800H, 16GB, 1TB SSD WDC SN730 NVMe, GeForce RTX 3050 4GB, Display Full HD [Mobile] Google Pixel 4a |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Per non fare un lungo update.
Mettiamo caso di avere il classico form anagrafico di una serie di persone. Se io su 40-50 persone modifico solo una 4-5 campi (es. l'indirizzo di pippo, il cap di pluto e così via), non mi sembrerebbe il caso di fare il submit e l'update di tutti i dati presenti nella tabella.
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Presumo che un form si riferisca ad un unica persona quindi modificando quella fai l'update solo su quel record. O sbagio?
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Quote:
Il mio problema era riferito ad un caso in cui non compaiono i campi di modifica per una sola persona (o prodotti o altro), ma per una serie di dati (es.: un'interrogazione al db di tutte le persone nate in una certa città) e tutti i relativi dati li inserisco in campi di input (ad eccezione del loro id).
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Quote:
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Piu che altro dovresti tener traccia non dei campi ma dei record che sono stati modificati. Altrimenti come componi la query di update?
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Quote:
Quindi l'update non è un problema.
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Feb 2005
Città: Bisceglie (BT)
Messaggi: 1091
|
Quote:
Io farei rifare l'update anche a ciò che non si modifica.
__________________
[Laptop] DELL XPS 15 9510 (2021) i7-11800H, 16GB, 1TB SSD WDC SN730 NVMe, GeForce RTX 3050 4GB, Display Full HD [Mobile] Google Pixel 4a |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
se ho capito bene il problema, con una query parametrica come suggerito...
per capire se i campi sono stati modificati, non useri javascript perchè: 1) più complesso 2) mai affidare queste operazioni lato client 3) posso disabilitare javascript 4) non mi piace ![]() credo puoi fare una cosa del genere: Codice:
<form> <input type="nome" value="Marco" /> <input type="hidden" name="<?php md5(nome)?>" value="<?php md5(Marco)?>" </form> <?php if (submit) { // // md5($REQUEST["nome"]) hash del nuovo? valore // inserito dall'utente nel capo nome // // $REQUEST[md5("nome")] nome del campo hidden relativo // (per ottenere l'hash originale) che memorizza // l'hash del valore originale del campo // $old_value = $REQUEST[md5("nome")]; $new_value = md5($REQUEST["nome"]); if $new_value != $old_value // campo modificato { $query += "SET 'nome' = addslashes($new_value)" } } ?> ![]() scusa lo pseudo codice ma non ricordo benissimo il php. eventualmente quel controllo transformato in funzione, con il nome del capo da controllare passato alla funzione
__________________
Desktop: Intel i7-4770K | Asus Gryphon Z87 | Crucial 16GB DDR3 1600MHz | Gigabyte GTX 780 OC Windforce x3 | Samsung 840 Pro 128GB (x 2 RAID0) | be quiet! Straight Power E9 680W CM Mercatino: bottoni, Dede371, pippokennedy, Bulbi_67, randose, DarkSiDE, davidepaco, _Legend_ Ultima modifica di Gremo : 05-10-2007 alle 12:31. |
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Quote:
Io invece volevo fare il submit dei soli dati aggiornati.
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Fai un array di javascript contenente i vecchi dati, quindi nell'onsubmit controlli i dati vecchi con i dati nuovi ed elimini i campi per i dati uguali. Per esempio:
Codice:
<? $res = mysql_query(...) $row = mysql_fetch_assoc($res); ?> var old_values = { nome: "<?= $row['nome'] ?>", cognome: "<?= $row['cognome'] ?>", } form.onsubmit = function() { for (var i = 0; i < this.length; i++) { if (old_values[ this[i].name ] && old_values[ this[i].name ] == this[i].value) { this[i].parentNode.removeChild( this[i] ); } } } |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Nov 2005
Città: Torino
Messaggi: 289
|
Per adesso quindi l'unica soluzione (che però sinceramente non farei) è quella di fare un confronto fra vecchio valore e nuovo valore.
Alla fine credo che ci vorrebbe più tempo a controllare tutti i campi che a farne l'update sul database.
__________________
Toshiba Satellite A100-926: Intel Core 2 Duo T7200, 2 GB ram ddr2, ATI MOBILITY RADEON X1600 512 MB Hypermemory (256 MB+256 MB) |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Feb 2005
Città: Bisceglie (BT)
Messaggi: 1091
|
Quote:
![]()
__________________
[Laptop] DELL XPS 15 9510 (2021) i7-11800H, 16GB, 1TB SSD WDC SN730 NVMe, GeForce RTX 3050 4GB, Display Full HD [Mobile] Google Pixel 4a |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:44.