2010-03-12 5 views
2

Je suis en train de développer un gestionnaire d'utilisateurs qui doit contrôler l'accès à la vue détaillée des éléments modifiables. À l'heure actuelle, lorsqu'un utilisateur clique sur 'modifier', l'application interroge la table de liens pour vérifier si un utilisateur est en train de modifier cette page. Sinon, elle permet d'accéder à la page et insère un enregistrement dans la table de liens. éditer la même page en même temps.Verrouillage d'une vue détaillée si un utilisateur modifie l'élément

Ma question est quelle serait la meilleure façon de gérer la suppression des enregistrements si un utilisateur existe le navigateur sans enregistrer etc, donc aucune action pour supprimer l'enregistrement.

J'ai quelques idées mais j'aimerais avoir d'autres commentaires avant de me décider.

BenTheDesigner

Répondre

1

Un délai d'attente simple. Avoir un champ last_seen dans la table et le mettre à jour avec l'heure actuelle lorsque l'utilisateur effectue une action. Ensuite, vous pouvez vérifier si le champ last_seen a plus de 15 minutes ou plus, supprimez l'enregistrement.

Certains code de pseudo-ish:

edit_something() { 

    // Assume there's a lock 
    $is_editable = false; 

    // Check if lock exists 
    $q = mysql_query("SELECT * FROM linktable WHERE item_id = 2"); 

    // If a lock exists 
    if(mysql_num_rows($q) > 0) { 

     // Check if it's timed out 
     $r = mysql_fetch_assoc($q); 

     // Delete lock if it's over 15 minutes old 
     if(time() - $r > 15 * 60) { 
      mysql_query("DELETE FROM linktable WHERE item_id = 2"); 
      $is_editable = true; 
     } 
    } else { 
     $is_editable = true; 
    } 

    if($is_editable) { 
     // Lock for current user 
     mysql_query("INSERT INTO linktable SET item_id = 2, user_id = 5, last_seen = NOW()"); 
    } else { 
     echo "Sorry, it's locked."; 
    } 
} 
+0

Merci Tatu. C'était mon idée initiale. Je l'ai juste implémenté et ça marche vraiment bien. – BenTheDesigner

Questions connexes