v2.5.2
Giriş yap

Sayfa içerisinde aynı anda düzenleme işlemi #Php#Js

ozzy34
505 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhaba, düz php ile yazılmış sipariş panelim var. Panel içerisinde siparişlerin düzenleme ekranına girip adres, telefon ya da ürün bilgileri güncelleme ekranı var.
Düzenleme sayfasına kullanıcılardan birisi girip düzenleme işlemi yaparken, başka birisi daha açarsa; o sayfanın şu an başkası tarafından düzenlendiğini görmesini ve düzenleme işlemi yapamamasını sağlamam gerekiyor.
Bunu sanırım sayfaya girdiğinde session ataması yapıp js ile kaydet butonunu kitleyerek yapabilirim ama birisi o sayfadayken bunun bilgisini alıp başkalarına nasıl gösterebilirim?
Session ile sayfayı kapattığında session'u nasıl temizleyebilirim ?
Ya da aynı anda girerlerse session ile ilgili sorun yaşar mıyım ? Şu an için 1-2 kişi var 100-200 kişi aynı anda tıklarsa ne gibi sorun yaşarım?

hakankorkz
588 gün önce
   
   // Veritabanındaki "editing" durumunu sorgula
$stmt = $db->prepare("SELECT * FROM editing_status WHERE page_id = :page_id");
$stmt->bindParam(':page_id', $page_id);
$stmt->execute();
$editing_status = $stmt->fetch(PDO::FETCH_ASSOC);

// Eğer sayfa düzenleniyorsa, kullanıcıyı uyar ve çıkış yap
if ($editing_status && $editing_status['user_id'] != $_SESSION['user_id']) {
    echo "Bu sayfa şu anda başkası tarafından düzenleniyor. Lütfen daha sonra tekrar deneyin.";
    exit;
}

// Sayfa düzenlenmiyorsa, "editing" durumunu kaydet
$stmt = $db->prepare("REPLACE INTO editing_status (page_id, user_id) VALUES (:page_id, :user_id)");
$stmt->bindParam(':page_id', $page_id);
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->execute();

// Sayfayı göster
echo "Sayfa düzenlenebilir.";

// "editing" durumunu kaldır
$stmt = $db->prepare("DELETE FROM editing_status WHERE page_id = :page_id AND user_id = :user_id");
$stmt->bindParam(':page_id', $page_id);
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->execute();

// Session'ı sonlandır
session_destroy();

// Sayfayı yönlendir
header("Location: index.php");
exit;

buna ek olarak tabloya bir de süre koyarsın kullanıcı aniden terk edebilir sayfayı ortalama 1 saat geçtiyse durumu siler false felan çekersin