sys/veri_detay/#008

PYBS (Personel Yönetim Bilgi Sistemi)

Son Senkronizasyon: 16.12.2025
personel-duzenle.php 278 satır • 14.63 KB
<?php
// modules/personel-duzenle.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki: Root, Yönetici, Muhasebe, İnsan Kaynakları
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

include '../includes/header.php';
include '../includes/menu.php';

$id = (int)$_GET['id'];
$mesaj = '';

// Mevcut veriyi çek
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$k = $stmt->fetch();

if (!$k) die("Kullanıcı bulunamadı.");

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    csrfKontrol($_POST['csrf_token']);

    // Temel Bilgiler
    $ad = guvenlik($_POST['ad']);
    $soyad = guvenlik($_POST['soyad']);
    $email = guvenlik($_POST['email']);
    $kan_grubu = $_POST['kan_grubu'];
    $adres = guvenlik($_POST['adres']);
    
    // Yeni Maaş Alanı
    $aylik_net_maas = (float)$_POST['aylik_net_maas'];
    
    // Telefonu formatla
    $ham_tel = !empty($_POST['telefon']) ? $_POST['telefon'] : '';
    $telefon = telefonFormatla($ham_tel);
    
    // --- Gerekli Alanlar ---
    $ise_giris_tarihi = $_POST['ise_giris_tarihi'];
    
    // DÜZELTME: SQL'den kaldırılan/olmayan alanlar PHP'de de çıkarıldı.
    // bolum_id, unvan ve cinsiyet artık SQL'e dahil edilmeyecek.
    
    $rol = $_POST['rol'];
    $sgk_no = !empty($_POST['sgk_no']) ? guvenlik($_POST['sgk_no']) : NULL;
    $tc_no = guvenlik($_POST['tc_no']);
    $dogum_tarihi = $_POST['dogum_tarihi']; 
    $medeni_durum = $_POST['medeni_durum'];
    $cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
    $isten_cikis_tarihi = !empty($_POST['isten_cikis_tarihi']) ? $_POST['isten_cikis_tarihi'] : NULL;
    
    // FOTOĞRAF İŞLEMLERİ (fotograf_yolu kullanıldı)
    $foto_yolu = $k['fotograf_yolu']; 
    
    // Şifre
    $yeni_sifre = !empty($_POST['yeni_sifre']) ? password_hash($_POST['yeni_sifre'], PASSWORD_DEFAULT) : NULL;

    if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] === UPLOAD_ERR_OK) {
        $yukleme_hedefi = yukle($_FILES['fotograf'], 'uploads'); 
        if($yukleme_hedefi) {
            if (!empty($k['fotograf_yolu']) && file_exists('../'.$k['fotograf_yolu'])) {
                 @unlink('../'.$k['fotograf_yolu']);
            }
            $foto_yolu = $yukleme_hedefi;
        } else {
            $mesaj = '<div class="alert alert-danger">Fotoğraf yüklenirken bir hata oluştu.</div>';
            goto end_of_post_logic;
        }
    }

    try {
        // DÜZELTME: SQL Sorgusundan 'bolum_id', 'unvan' ve 'cinsiyet' sütunları KALDIRILDI.
        $sql = "UPDATE kullanicilar SET ad = ?, soyad = ?, email = ?, kan_grubu = ?, adres = ?, aylik_net_maas = ?, 
                ise_giris_tarihi = ?, rol = ?, sgk_no = ?, tc_no = ?, telefon = ?, 
                dogum_tarihi = ?, medeni_durum = ?, cocuk_sayisi = ?, isten_cikis_tarihi = ?"; 
        
        $params = [
            $ad, $soyad, $email, $kan_grubu, $adres, $aylik_net_maas, 
            $ise_giris_tarihi, $rol, $sgk_no, $tc_no, $telefon, 
            $dogum_tarihi, $medeni_durum, $cocuk_sayisi, $isten_cikis_tarihi
        ];
        
        // Şifre Güncellemesi
        if (!empty($yeni_sifre)) {
            $sql .= ", sifre_hash = ?"; 
            $params[] = $yeni_sifre;
        }
        
        // Fotoğraf Güncellemesi
        if ($foto_yolu !== $k['fotograf_yolu']) { 
            $sql .= ", fotograf_yolu = ?"; 
            $params[] = $foto_yolu;
        }

        $sql .= " WHERE id = ?";
        $params[] = $id;

        $stmt_up = $pdo->prepare($sql);
        $stmt_up->execute($params);

        // LOG KAYDI
        logKaydet($pdo, $_SESSION['kullanici_id'], 'guncelleme', "Personel {$k['ad']} {$k['soyad']} bilgileri güncellendi.", 'kullanicilar', $id);

        $mesaj = '<div class="alert alert-success">Personel bilgileri başarıyla güncellendi.</div>';
        
        // Güncel veriyi tekrar çek
        $stmt->execute([$id]);
        $k = $stmt->fetch();

    } catch (PDOException $e) {
        $mesaj = '<div class="alert alert-danger">Veritabanı Hatası: ' . $e->getMessage() . '</div>';
    }

    end_of_post_logic:
}
?>

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-md-10">
            <div class="card-box p-4">
                <h4 class="mb-3 border-bottom pb-2"><i class="fas fa-user-edit text-primary me-2"></i> Personel Düzenle: <?php echo htmlspecialchars($k['ad'].' '.$k['soyad']); ?></h4>
                
                <?php echo $mesaj; ?>

                <form method="POST" enctype="multipart/form-data" novalidate>
                    <input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-lock me-2"></i> Giriş Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Kullanıcı Adı (Giriş İçin) <span class="text-danger">*</span></label>
                            <input type="text" class="form-control" value="<?php echo htmlspecialchars($k['kullanici_adi']); ?>" disabled title="Kullanıcı adı değiştirilemez.">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Şifre (Değiştirmek için) <span class="text-danger">*</span></label>
                            <input type="text" name="yeni_sifre" class="form-control" placeholder="Yeni şifreyi giriniz.">
                            <small class="text-muted">Boş bırakılırsa şifre değişmez.</small>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Sistem Rolü <span class="text-danger">*</span></label>
                            <select name="rol" class="form-select" required>
                                <?php
                                    $roller = ['calisan' => 'Çalışan', 'stajyer' => 'Stajyer', 'vardiya_amiri' => 'Vardiya Amiri', 'yonetici' => 'Yönetici', 'mudur' => 'Müdür', 'muhasebe' => 'Muhasebe', 'insan_kaynaklari' => 'İnsan Kaynakları', 'root' => 'Sistem Yöneticisi'];
                                    foreach($roller as $val => $text):
                                ?>
                                    <option value="<?php echo $val; ?>" <?php echo $k['rol'] == $val ? 'selected' : ''; ?>><?php echo $text; ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>
                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-user me-2"></i> Kişisel & Kimlik Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Ad <span class="text-danger">*</span></label>
                            <input type="text" name="ad" class="form-control" value="<?php echo htmlspecialchars($k['ad']); ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Soyad <span class="text-danger">*</span></label>
                            <input type="text" name="soyad" class="form-control" value="<?php echo htmlspecialchars($k['soyad']); ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">TC Kimlik No <span class="text-danger">*</span></label>
                            <input type="text" name="tc_no" class="form-control" value="<?php echo htmlspecialchars($k['tc_no']); ?>" required maxlength="11" pattern="\d{11}" title="11 haneli TC kimlik numarası">
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">SGK Sicil No</label>
                            <input type="text" name="sgk_no" class="form-control" value="<?php echo htmlspecialchars($k['sgk_no']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Doğum Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="dogum_tarihi" class="form-control" value="<?php echo $k['dogum_tarihi']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Kan Grubu</label>
                            <select name="kan_grubu" class="form-select">
                                <option value="">Seçiniz</option>
                                <?php 
                                    $kan_gruplari = ['0 Rh+', '0 Rh-', 'A Rh+', 'A Rh-', 'B Rh+', 'B Rh-', 'AB Rh+', 'AB Rh-'];
                                    foreach($kan_gruplari as $grup): 
                                ?>
                                    <option value="<?php echo $grup; ?>" <?php echo $k['kan_grubu'] == $grup ? 'selected' : ''; ?>>
                                        <?php echo $grup; ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Telefon</label>
                            <input type="tel" name="telefon" class="form-control" value="<?php echo htmlspecialchars($k['telefon']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">E-Posta Adresi</label>
                            <input type="email" name="email" class="form-control" value="<?php echo htmlspecialchars($k['email']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Adres</label>
                            <input type="text" name="adres" class="form-control" value="<?php echo htmlspecialchars($k['adres']); ?>">
                        </div>
                    </div>

                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-dollar-sign me-2"></i> Finansal & Aile Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Aylık Net Maaş (₺) <span class="text-danger">*</span></label>
                            <input type="number" step="0.01" name="aylik_net_maas" class="form-control" value="<?php echo $k['aylik_net_maas']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Medeni Hali</label>
                            <select name="medeni_durum" class="form-select">
                                <option value="">Seçiniz</option>
                                <option value="Bekar" <?php echo $k['medeni_durum'] == 'Bekar' ? 'selected' : ''; ?>>Bekar</option>
                                <option value="Evli" <?php echo $k['medeni_durum'] == 'Evli' ? 'selected' : ''; ?>>Evli</option>
                                <option value="Dul" <?php echo $k['medeni_durum'] == 'Dul' ? 'selected' : ''; ?>>Dul</option>
                                <option value="Boşanmış" <?php echo $k['medeni_durum'] == 'Boşanmış' ? 'selected' : ''; ?>>Boşanmış</option>
                            </select>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Çocuk Sayısı</label>
                            <input type="number" name="cocuk_sayisi" class="form-control" min="0" value="<?php echo (int)$k['cocuk_sayisi']; ?>">
                        </div>
                    </div>
                    
                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-calendar-alt me-2"></i> Giriş/Çıkış Tarihleri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">İşe Giriş Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="ise_giris_tarihi" class="form-control" value="<?php echo $k['ise_giris_tarihi']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label fw-bold text-danger"><i class="fas fa-calendar-times me-1"></i> İşten Çıkış Tarihi</label>
                            <input type="date" name="isten_cikis_tarihi" class="form-control" value="<?php echo $k['isten_cikis_tarihi']; ?>">
                            <div class="form-text small">Personel ayrıldıysa giriniz. Boşsa çalışıyor demektir.</div>
                        </div>
                    </div>

                    <hr class="my-4">

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-image me-2"></i> Fotoğraf</h5>
                    <div class="row mb-3">
                        <?php if (!empty($k['fotograf_yolu'])): ?> 
                        <div class="col-md-4 mb-3">
                            <label class="form-label small">Mevcut Fotoğraf</label>
                            <div class="border p-2 rounded text-center bg-light">
                                <img src="../<?php echo $k['fotograf_yolu']; ?>" alt="Mevcut Fotoğraf" class="img-fluid rounded" style="max-height: 150px;"> 
                            </div>
                        </div>
                        <?php endif; ?>
                        <div class="col-md-8">
                            <label class="form-label small">Profil Fotoğrafı (Yeni Yükleme)</label>
                            <input type="file" name="fotograf" class="form-control">
                            <div class="form-text small">Maksimum 2MB, JPG/PNG. Değiştirmek istemiyorsanız boş bırakın.</div>
                        </div>
                    </div>
                    
                    <div class="d-grid gap-2 mt-4">
                        <button type="submit" class="btn btn-primary btn-lg"><i class="fas fa-save me-2"></i> Değişiklikleri Kaydet</button>
                        <a href="personel-yonetimi.php" class="btn btn-secondary">İptal / Geri Dön</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

<?php include '../includes/footer.php'; ?>
DATA_PAYLOAD (Açıklama)
Kapak

DEMO SÜRÜMÜDÜR TAM SÜRÜM İÇİN İLETİŞİM KURUN

📖 PYBS (Personel Yönetim Bilgi Sistemi) Kullanım Kılavuzu

🚀 Proje Tanımı

PYBS, personel bilgilerini, izinleri, maaş bordrolarını ve performans değerlendirmelerini merkezi ve dijital bir platformda yönetmek için tasarlanmış kapsamlı bir Personel Yönetim Bilgi Sistemi'dir. Amacımız, İnsan Kaynakları (İK) süreçlerini otomatikleştirerek verimliliği artırmak ve veri tutarlılığını sağlamaktır.

✨ Temel Özellikler

Personel Yönetimi: Çalışanların kişisel, iletişim ve görev bilgilerini kaydetme/güncelleme.

İzin Yönetimi: Çalışanların izin taleplerini oluşturma, onaylama/reddetme ve kalan izin haklarını takip etme.

Performans Değerlendirme: Yöneticilerin ve çalışanların performans hedeflerini belirlemesi ve değerlendirmeleri kaydetmesi.

Bordro Entegrasyonu: Maaş ve avans bilgilerini kaydetme ve bordro çıktılarını oluşturma (Harici sistemlerle entegrasyon potansiyeli).

Raporlama: İK yöneticileri için özet ve detaylı personel, izin ve bordro raporları oluşturma.

💻 Son Kullanıcı Kullanımı🔑 Giriş Yapma

Demo için kullanıcı adı : test.test

Demo için şifre : 123456

Demo hesabında root / yonetici vb yetki yoktur.

Tam sürüm için iletişime geçin.

Sistem "Ramsa Makine" tarafından aktif olarak kullanılmaktadır

Meta Veri (Özet)

İşyeri çalışanlarının maaş, fazla mesai ve puantaj ile bordro takip, kontrol ve raporlama sistemi

9,519
Sinyal (Ağ Hiti)
1.54 MB
Kapasite

Ağda Paylaş