View Full Version : [PHP] inviare solo dati modificati
Fabiorayden
05-10-2007, 09:37
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?
isAlreadyInUse
05-10-2007, 09:42
A che prò?
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.
Fabiorayden
05-10-2007, 09:55
A che prò?
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.
isAlreadyInUse
05-10-2007, 10:00
Presumo che un form si riferisca ad un unica persona quindi modificando quella fai l'update solo su quel record. O sbagio?
Fabiorayden
05-10-2007, 10:32
Presumo che un form si riferisca ad un unica persona quindi modificando quella fai l'update solo su quel record. O sbagio?
Se il form e la query sono fatte come dici tu, è giusto e non ci sarebbero problemi.
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).
Fabiorayden
05-10-2007, 10:43
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.
Il problema è dopo il controllo come escludo i campi non modificati?
isAlreadyInUse
05-10-2007, 10:50
Piu che altro dovresti tener traccia non dei campi ma dei record che sono stati modificati. Altrimenti come componi la query di update?
Fabiorayden
05-10-2007, 11:02
Piu che altro dovresti tener traccia non dei campi ma dei record che sono stati modificati. Altrimenti come componi la query di update?
Quando faccio la select recupero l'id di ogni riga e i campi di input del form hanno un nome progressivo (es. nome1, nome2, nome3 etc, cognome1, cognome2, cognome3 e così via).
Quindi l'update non è un problema.
Il problema è dopo il controllo come escludo i campi non modificati?
Cmq riflettendoci un pò il codice PHP si incarta e non poco... e la query SQL (facendo l'update dei campi anche non modificati, quindi rimettendoli) è MOLTO più veloce di quanto pensi.
Io farei rifare l'update anche a ciò che non si modifica.
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 :D
credo puoi fare una cosa del genere:
<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)"
}
}
?>
spero di non aver fatto casini :)
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
Fabiorayden
05-10-2007, 13:16
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 :D
credo puoi fare una cosa del genere:
spero di non aver fatto casini :)
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
Se non ho interpretato male il codice, il controllo avviene dopo aver fatto il submit dei dati.
Io invece volevo fare il submit dei soli dati aggiornati.
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:
<?
$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] );
}
}
}
PS: mi sembra un'assurdità
Fabiorayden
05-10-2007, 14:44
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.
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.
;) (c.v.d)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.