Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24

    colore cella del campo modificato

    Salve a tutti, scusate il gioco di parole del titolo ma mi servirebbe una mano:
    grazie ai vostri aiuti sono riuscito a terminare il mio database ma ho ancora 2 domande da porvi
    1* come faccio a colorare (es. rosso) il campo che ho modificato in precedenza in modo da visualizzarlo alla prossima interrogazione del record!?
    2* come posso far in modo che oltre al supervisore e l'admin l'unico a poter modificare i campo di un determinato record sia il suo creatore!?
    mi spiego:
    $nutente = $_SESSION['nome'];<--nick dell'utente loggato che corrisponderebbe ad owner
    $user = $_SESSION['utente'];<-- livello dell'user
    if($user=='supervisore' || $user=='admin' || $nutente='owner'){......}
    owner in questo caso è un campo della tabella del db che identifica il creatore del record.

    Grazie ancora per la vostra disponibilità.
    buona giornata

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24
    Ragazzi nessuna info a riguardo?

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Scusa, non ho ben capito:

    1. Vorresti che quando vai sul form di modifica di un record siano evidenziati i campi che hanno subito una modifica in precedenza?In questo caso devi tener traccia del ultima modifica, ad esempio con un campo extra dove memorizzarla. Quando salvi il record, prima riprendi il record e poi confronti con i nuovi dati: in codice, sarebbe una cosa del genere:

    Codice PHP:
    //salva
    <?php
    if(isset($_POST['salva'])){
        
    // Salvataggio 
        
    $id $_POST['id'];
        
    $fields = ['nome''cognome''altroCampo']; // i campi del record
        
    $old $database->query("SELECT * FROM tabella WHERE id=".$id);
        
    $modified = [];
        foreach(
    $fields as $field){
            if(
    $_POST[$field] != $old[$field]){
                
    $modified[] = $field;
            }  
        }
       
    $s_modified implode(';'$modified);
       
    $database->query("UPDATE tabella SET ...., 'modified'='$s_modified' WHERE id=$id);
    }
    ?>
    // nel form
    <?php
    $record 
    $database->query("SELECT * FROM tabella WHERE id=".$id);
    $modified explode(';'$record['modified']);
    ?>

    <form ...>
       <?php $style = (in_array('nome'$modified) ) ? 'red' 'normal' ?>
       <input name='nome' value='..' class='<?php echo $style?>' />

         <?php $style = (in_array('cognome'$modified) ) ? 'red' 'normal' ?>
       <input name='cognome' value='..' class='<?php echo $style ?>' />
        etc
    </form>
    2. Non ti sei già risposto?
    Ultima modifica di boots; 03-11-2016 a 18:44

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24
    Grazie della risposta.
    Mi spiego meglio:

    Ho un form di inserimento dove vengono inseriti i campi di ogni record con un ID univoco nella tabella A
    Un secondo form chiamato "modifica" mi visualizza dapprima la lista di tutti i record inseriti per ordine crescente in base all'id e poi sotto mi da la possibilità di visualizzare/modificare/cancellare il record selezionato, scegliendo il numero dell'id da un menu a tendina
    Se per caso il campo X del record con id 23 viene modificato, il record completo originale viene prima copiato nella tabella B con una INSERT e poi viene aggiornato il campo scelto (UPDATE tabellaA SET $campo = '$record' WHERE id = '$id_mod'")
    A me interesserebbe sapere (in un modo qualsiasi) e quindi differenziare i campi di ogni singolo record che hanno subito modifica da quelli invece che non ne hanno subito in modo da sapere dove cercare nel "log modifiche" il campo da controllare e quindi all'accorrenza ripristinarlo con la sua versione precedente.

    Per quanto riguarda il secondo punto, i mancava solo:

    $creator="SELECT owner FROM tabellaA WHERE id='$associato'";
    $cr=mysql_query($creator) or die("Errore nella query $cr: " . mysql_error());
    while ($row = mysql_fetch_assoc($cr)){

    $ut = $row['owner'];
    }

    if($user=='admin' || $user=='supervisore' || $ut==$nutente){

    Infatti la mia difficoltà era nel sostituire un campo ad una variabile.

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se il "vecchio" record è salvato su un'altra tabella, quando fai modifica devi prendere oltre al record corrente anche quello di "backup". A questo punto confronti i valori e evidenzi di conseguenza. Se nella tabella di backup mantieni anche il medesimo id, ti basta fare una cosa del genere:

    Codice PHP:
    <?php
    $record 
    mysql_query("SELECT * FROM tabellaA WHERE id=$id");
    $record_bk mysql_query("SELECT * FROM tabellaB WHERE id=$id");

    $row mysql_fetch_array($record);
    $row_bk mysql_fetch_array($record_bk);
    ?>

    <form ....>
      <?php 
         $style 
    = ($row['campo'] != $row_bk['campo']) ? 'red' 'normal'?>
         <input name... class="<?php echo $style ?>" />
       <?php
         $style 
    = ($row['campo2'] != $row_bk['campo2']) ? 'red' 'normal'?>
         <input name... class="<?php echo $style ?>" />
         
          etc...
    </form>

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24
    Ti ringrazio ancora ma provandolo ho notato che:
    1* mi da sempre lo stesso id (il primo per precisione)
    2* non mi cambia il colore del campo modificato ma mi sostituisce al suo valore la scritta normal o red
    ti incollo il codice


    <?php
    $query1= " SELECT * FROM tabellaA ";
    $result1=mysql_query($query1) or die (mysql_error());
    $query2= " SELECT * FROM tabellaB ";
    $result2=mysql_query($query2) or die (mysql_error());
    while($arr=mysql_fetch_array($result1)) {
    while($arr2=mysql_fetch_array($result2)) { ?>
    <tr>
    <td width='5'> <?php echo $arr['id'] ?> </td>
    <td width='5'> <?php echo $arr['owner'] ?> </td>
    <td width='5'> <?php echo $style = ($arr['cod_mat'] != $arr2['cod_mat']) ? 'red' : 'normal'; ?></td>
    </tr>
    }
    }
    A me interessa visualizzare tutti i record della tabella e vedere quali tra questi ha campi modificati.

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    il mio era un esempio (imposti la classe di style in red/normal). Poi dovresti adattarla alle tue esigenze.
    Codice PHP:
    <tr>
     <td width='5'> <?php echo $arr['id'?> </td>
     <td width='5'> <?php echo $arr['owner'?> </td>
     <td width='5'> <?php echo ($arr['cod_mat']  != $arr2['cod_mat']) ? '<b>'.$arr['cod_mat'].'</b>' $arr['cod_mat']; ?></td>
    </tr>
    Ad esempio così ti mette in bold i campo cod_mat se è cambiato

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24
    Ho provato e la cosa funziona e ti ringrazio tantissimo.
    Un'ultima cosa non riesco a risolvere: se inserisco un nuovo record i campi di quest'ultimo mi risultano tutti "rossi" senza che questi siano stati modificati. Dovrei usare qualche if per ovviare alla cosa?!

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    devi vedere se quando fai un nuovo inserimento viene anche creato un nuovo record nella tabellaB (ma da come dici sembra di no).
    Prova a fare così:

    Codice PHP:
    $record mysql_query("SELECT * FROM tabellaA WHERE id=$id");
    $row mysql_fetch_assoc($record);
    $backup mysql_query("SELECT * FROM tabellaB WHERE id=$id");
    if(
    mysql_num_rows($backup)>0){
       
    $row_bk mysql_fetch_assoc($backup);
    }else{
       
    $row_bk $row;
    }

    // il resto è uguale 
    PS: Ovviamente, visto che non è il nocciolo del problema, tutte le fasi di controllo/sicurezza non le ho messe. Inoltre sarebbe opportuno passare a mysqli o meglio pdo

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24
    <?php
    $query1= " SELECT * FROM tabella1 ";
    $result1=mysql_query($query1) or die (mysql_error());
    $query2= " SELECT * FROM tabella2 ";
    $result2=mysql_query($query2) or die (mysql_error());

    while($arr=mysql_fetch_array($result1)) {
    $arr2=mysql_fetch_array($result2) ?>
    <tr>
    <?php $idd = ($arr['id'] != $arr2['id']) ? 'red' : 'normal'; ?>
    <td width='5'> <?php echo $idd ?></td>
    <td width='5'> <?php echo $arr['owner'] ?> </td>
    <?php $cod = ($arr['cod_mat'] != $arr2['cod_mat']) ? 'red' : 'normal'; ?>
    <td width='5'> <?php echo $cod ?></td>
    <?php $des = ($arr['descriz'] != $arr2['descriz']) ? 'red' : 'normal'; ?>
    <td width='5'> <?php echo $des ?></td>
    ...........

    in questo modo mi vengono visualizzati tutti i record e i campi modificati cambiano in "red" mentre quelli originali in "normal"
    ho provato col tuo codice ma purtroppo non va poichè io nn seleziono a priori l'id del record ma solo dopo la visualizzazione dell'elenco di tutti i record (e in questo momento io vorrei i colori diversi per i campi modificati) scelgo l'id del record da modificare e quindi vengo linkato alla pagina modifica.php
    Per quanto riguardo l'UPGRADE del linguaggio, ci stavo già pensando.
    Ti ringrazio ancora per la disponibilità.

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.