Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    modifica dei soli campi cambiati nel form

    Ciao
    Testando i miei script direttamente dal pannello di controllo di phpmyadmin, andando in modifica record, ho notato una cosa che mi piacerebbe poter fare.
    Per esempio, in una tabella con questi campi:
    codice:
    id, IP, page, nikname, mail, sito_web, data, commento
    se modifico i soli campi page e nikname (ne cancello i contenuti), invece di una query con l'intero elenco dei campi, viene creata una query coi soli campi modificati:
    codice:
    UPDATE table_test SET page = '', nikname = '' WHERE id =7 LIMIT 1 ;
    Quel che chiedo è se è possibile fare la stessa cosa nel mio script di aggiornamento con poco dispendio di codice.

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    certo... ma che è il "poco dispendio"? dipende dove hai i campi, potresti avere:

    Codice PHP:
    function generateupdate($table$fields) {
      
    // puoi aggiungere i controlli che vuoi... per es. che ci siano campi...
      
    $query "UPDATE $table SET ";
      foreach (
    $fields as $field=>$val) {
        
    $query .= $field.' = "'.$val.'", ';
      };
      
    $query substr($query0, -2); // elimino l'ultima virgola in più
      // ... e puoi aggiungere WHERE, etc. etc.
      
    return ($query);
    };
    $query generateupdate('table_test', array('page' => 'prova''nikname' => 'eg')); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    certo... ma che è il "poco dispendio"? dipende dove hai i campi, potresti avere:

    Codice PHP:
    function generateupdate($table$fields) {
      
    // puoi aggiungere i controlli che vuoi... per es. che ci siano campi...
      
    $query "UPDATE $table SET ";
      foreach (
    $fields as $field=>$val) {
        
    $query .= $field.' = "'.$val.'", ';
      };
      
    $query substr($query0, -2); // elimino l'ultima virgola in più
      // ... e puoi aggiungere WHERE, etc. etc.
      
    return ($query);
    };
    $query generateupdate('table_test', array('page' => 'prova''nikname' => 'eg')); 

  4. #4
    Grazie per la risposta, eiyen.
    Ma non è questo il mio problema.
    Dal tuo esempio si presuppone che io conosca a priori i campi da modificare (page, nikname)
    Invece io parto con un form che visualizza tutti i campi coi suoi contenuti, per cui, alla consegna del form al processo, posso avere queste condizioni:
    modificati tutti i campi
    modificati solo alcuni campi
    nessun campo modificato

    Ne consegue che, quando passo ol form al relativo processo, non conosco i campi che sono stati modificati e che la query che verrà successivamente creata conterrà indiscriminatamente tutti i campi, modificati e non.
    Quel che volevo sapere e se c'è un modo per conoscere quali siano i campi che sono stati modificati per poter creare la query solo su quei campi o, se nessun campo è stato modificato, non eseguire nessuna query e nessuna modifica al DB

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    come "sai" se un campo è modificato o no? basta che generi l'array con i dati da passare usando solo i campi interessati (es. quelli con valore non nullo o diverso dal valore già presente nel db)

  6. #6
    Dunque. Da quel che dici potrei comportarmi in uno di questi modi:
    man mano metto i dati prelevati dal record nei vari controlli:
    li aggiungo anche in una matrice (array) che metterò in un campo nascosto del form
    oppure li metto anche in altrettanti controlli nascosti (gemelli a quelli visualizzati)
    oppure (caso alternativo): consegnato il form per il processo eseguo una query per leggere il record che si sta per modificare per confrontare i campi originali con quelli passati dal form

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    purtroppo non ho ben capito come mai hai solo "alcuni" campi... puoi fare un piccolo esempio di come si presenterebbe il form? in ogni caso:

    - se hai dei tag INPUT che coprono solo parzialmente i campi basta che passi questi alla funzioncina
    - se devi controllare se i campi sono stati aggiornati ci sono vari modi: potresti per esempio inserire dei campi "gemelli" nascosti con il valore originale e poi utilizzi solo quelli in cui il campo è variato

  8. #8
    Originariamente inviato da eiyen
    purtroppo non ho ben capito come mai hai solo "alcuni" campi... puoi fare un piccolo esempio di come si presenterebbe il form? in ogni caso:................
    Hai ragione, eiyen. A volte proprio non riesco a spiegarmi bene.
    Dunque avendo la tabella "table_test" coi campi "id, IP, page, nikname, mail, sito_web, data, commento", per la modifica di un determinato record preparo un form con tutti i campi editabili ( page, nikname, mail, sito_web, data, commento).
    Aggiungo poi un campo nascosto per l'id ed uno per il nome della tabella.
    Questo è il form che normalmente uso (faccio uso anche del $type_field per decidere se nel form debbo mettere una input type=\"text\" oppure una textarea)
    Codice PHP:
    $Query "SELECT * FROM " $table " WHERE id = " $id " LIMIT 1";
    $result mysql_query($Query);
    $row mysql_fetch_array($result);
    for (
    $i 1$i count ($fields); $i++) {
        echo 
    "<tr>\n";
        echo 
    "<td>" $fields[$i] . "</td>\n";
        
    $type_field $fields_type[$fields[$i]];
            if (
    $type_field == "text") {
                echo 
    "<td><textarea name=\""$fields[$i]."\" cols=\"45\" rows=\"5\">".$row[$fields[$i]]."</textarea></td>\n";
            } else {
                echo 
    "<td><input type=\"text\" name=\""$fields[$i]."\" value=\"".$row[$fields[$i]]."\" /></td>\n";
            }
        echo 
    "</tr>\n";

    Quindi ci sono tutti i campi editabili.

    A sto punto, seguendo il tuo suggerimento
    Originariamente inviato da eiyen
    .........- se devi controllare se i campi sono stati aggiornati ci sono vari modi: potresti per esempio inserire dei campi "gemelli" nascosti con il valore originale e poi utilizzi solo quelli in cui il campo è variato
    e per non complicare molto il codice penso che la strada più semplice sia appunto questa.

    Ti ringrazio perchè come il solito mi semplifichi la vita

  9. #9
    PS
    dimenticavo un esempio di come lavoro
    In questo link si può vedere un esempio del form che normalmente uso.
    Questo è un esempio di cui si può abusare perchè è un esempio che uso solo nei miei studi e non influenda la gestione ed i contenuti del sito.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.