PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB` REDROOM
PHP 5.6.40
Preview: TEKNISYEN_MODULU.md Size: 12.81 KB
/home/ankaservis/servis.ankaservis.com/muhasebe/docs/TEKNISYEN_MODULU.md

# Teknisyen Modülü Dokümantasyonu

## Genel Bakış
Teknisyen modülü, teknik personel atamaları, teknisyene atanan servisler ve teknisyen performans takibini yönetir.

## Dosyalar
- `personelis.php` - Teknisyene atanan servisler listesi
- `index.php` - Ana sayfa (teknisyen dashboard'u)
- `gun.php` - Günlük servisler ve atamalar
- `markaListele.php` - Markaya göre servis listesi
- `turListele.php` - Ürün türüne göre servis listesi

---

## personelis.php

### Yapılan Düzeltmeler

#### 1. Header Dosyası Hatası
**Sorun:** `blok/header.php` kullanılıyordu ama `blok/ustic.php` kullanılmalıydı

**Çözüm:**
```php
// Önce
<?php require_once("blok/header.php"); ?>

// Sonra
<?php require_once("blok/ustic.php"); ?>
```

#### 2. Teknisyen Listesi Görüntülenmiyor
**Sorun:** Teknisyen seçilmediğinde veya geçersiz ID'de hata veriyordu

**Çözüm:**
```php
$prs = isset($_GET['PRS']) ? intval($_GET['PRS']) : 0;

if(empty($prs)) {
    echo "<tr><td colspan='9' class='text-center'>Lütfen bir teknisyen seçiniz.</td></tr>";
} else {
    // Teknisyen bilgilerini çek
    $teknisyen_sql = "SELECT * FROM yonetici WHERE id='$prs' AND pasif='0'";
    $teknisyen_result = mysql_query($teknisyen_sql, $baglanti);
    
    if(mysql_num_rows($teknisyen_result) == 0) {
        echo "<tr><td colspan='9' class='text-center'>Geçersiz teknisyen ID.</td></tr>";
    } else {
        // Servisleri listele
    }
}
```

#### 3. DataTables Yapılandırması
**Sorun:** DataTables "Requested unknown parameter" hatası

**Çözüm:**
- Tablo sütun sayısı ile DataTables yapılandırması eşleştirildi
- Türkçe dil desteği eklendi
- Responsive yapılandırma düzeltildi

#### 4. Undefined Array Key
**Sorun:** Array erişimlerinde kontroller eksikti

**Çözüm:**
```php
$durumyaz = isset($girisler['servisdurum']) ? htmlspecialchars($girisler['servisdurum']) : "";
$musteri_adi = isset($musterigetir['Ad_Soyad']) ? htmlspecialchars($musterigetir['Ad_Soyad']) : "";
$telefon = isset($musterigetir['Tel']) ? htmlspecialchars($musterigetir['Tel']) : "";
```

#### 5. mysql_num_rows Kontrolü
**Sorun:** Boş sonuç setlerinde hata veriyordu

**Çözüm:**
```php
$result = mysql_query($sql, $baglanti);
if($result && mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_array($result)) {
        // İşlemler
    }
} else {
    echo "<tr><td colspan='9' class='text-center'>Atanmış servis bulunamadı.</td></tr>";
}
```

#### 6. URL Rewrite Sisteminden Geçiş
**Çözüm:**
```php
// Önce (URL rewrite)
<a href="Detaylar-<?php echo $musterigetir['ID']; ?>-<?php echo $girisler['GID']; ?>-<?php echo dosya($musterigetir['Ad_Soyad']) ?>">

// Sonra (Standart PHP)
<a href="ServisDuzen.php?GiT=<?php echo $musterigetir['ID']; ?>&G=<?php echo $girisler['GID']; ?>&ADI=<?php echo urlencode($musterigetir['Ad_Soyad']) ?>">
```

---

## index.php (Teknisyen Dashboard)

### Yapılan Düzeltmeler

#### 1. Performance Optimizasyonu - N+1 Query Problemi
**Sorun:** Her servis için ayrı sorgular (müşteri, marka, ürün türü, durum)

**Çözüm:**
```php
// Önce: Her servis için ayrı sorgular
while($girisler = mysql_fetch_array($giris)) {
    $midi = $girisler['MID'];
    $musteri = mysql_query("SELECT * FROM musteriler WHERE ID='$midi'");
    $marka = mysql_query("SELECT * FROM marka WHERE id='$markaid'");
    $turu = mysql_query("SELECT * FROM urunturu WHERE id='$turuid'");
    $durum = mysql_query("SELECT * FROM servisDurumu WHERE id='$durumid'");
}

// Sonra: JOIN ile tek sorguda
$sql = "SELECT g.*, 
        m.ID as mID, m.Ad_Soyad, m.Tel, m.Adres,
        ma.id as marka_id, ma.marka,
        ut.id as tur_id, ut.turu,
        sd.id as durum_id, sd.servisdurum, sd.renk
        FROM girisler g
        LEFT JOIN musteriler m ON g.MID = m.ID
        LEFT JOIN marka ma ON g.marka = ma.id
        LEFT JOIN urunturu ut ON g.turu = ut.id
        LEFT JOIN servisDurumu sd ON g.Gdurum = sd.id
        WHERE g.yeni_personel='" . $_SESSION["kulid"] . "' AND g.sonlandir='0' 
        ORDER BY g.GID DESC";
$giris = mysql_query($sql, $baglanti);
```

#### 2. Hatırlatmalar Optimizasyonu
**Sorun:** Hatırlatmalar için tekrarlanan sorgular

**Çözüm:**
```php
// Önce: Her hatırlatma için ayrı sorgu
while($girisler = mysql_fetch_array($giris)) {
    // Tarih karşılaştırması
}

// Sonra: Tek sorguda tüm hatırlatmalar
date_default_timezone_set("Europe/Istanbul");
$bugun = date("d.m.Y");
$sql = "SELECT * FROM servis WHERE durum='0' AND kullanici='" . $_SESSION["kulid"] . "'";
$giris = mysql_query($sql, $baglanti);
$hatirlatmalar = array();

while($girisler = mysql_fetch_array($giris)) {
    $tarih1 = $girisler['mtarih'];
    $tarih2 = $bugun;
    if(!tarihkarsilastir($tarih1, $tarih2)) {
        $hatirlatmalar[] = $girisler;
    }
}

foreach($hatirlatmalar as $girisler) {
    // HTML çıktısı
}
```

---

## gun.php

### Yapılan Düzeltmeler

#### 1. Teknisyen Atama Bilgisi
**Sorun:** `personel` alanı kullanılıyordu ama `yeni_personel` kullanılmalıydı

**Çözüm:**
```php
// Önce
$PID = $row['personel'];

// Sonra
$PID = isset($row['yeni_personel']) ? $row['yeni_personel'] : "";
```

#### 2. Undefined Array Key
**Sorun:** Tüm değişkenler için kontroller eksikti

**Çözüm:**
```php
$giris = isset($row['GID']) ? $row['GID'] : "";
$gtarih = isset($row['GTarih']) ? $row['GTarih'] : "";
$durumne = isset($row['Gdurum']) ? $row['Gdurum'] : "";
$urun = isset($row['uruncinsi']) ? htmlspecialchars($row['uruncinsi']) : "";
$takipno = isset($row['takipno']) ? htmlspecialchars($row['takipno']) : "";
```

#### 3. mysql_num_rows Kontrolü
**Sorun:** Boş sonuç setlerinde hata veriyordu

**Çözüm:**
```php
$marka_result = mysql_query("SELECT * FROM marka WHERE id='$markaal'", $baglanti);
if($marka_result && mysql_num_rows($marka_result) > 0) {
    $marka_ver = mysql_fetch_array($marka_result);
    $marka_adi = isset($marka_ver['marka']) ? htmlspecialchars($marka_ver['marka']) : "";
} else {
    $marka_adi = "";
}
```

#### 4. Teknisyen Bilgisi
**Sorun:** Teknisyen bulunamadığında hata veriyordu

**Çözüm:**
```php
$teknisyen_result = mysql_query("SELECT * FROM yonetici WHERE id='$PID'", $baglanti);
if($teknisyen_result && mysql_num_rows($teknisyen_result) > 0) {
    $teknisyen_ver = mysql_fetch_array($teknisyen_result);
    $teknisyen_adi = isset($teknisyen_ver['adi']) ? htmlspecialchars($teknisyen_ver['adi']) : "";
} else {
    $teknisyen_adi = "Atanmamış";
}
```

#### 5. DataTables Yapılandırması
**Çözüm:**
- Türkçe dil desteği eklendi
- Sütun genişlikleri tanımlandı
- Responsive yapılandırma eklendi

#### 6. URL Rewrite Sisteminden Geçiş
**Çözüm:**
```php
// Önce (URL rewrite)
<a href="Detaylar-<?php echo $MID; ?>-<?php echo $ID; ?>-<?php echo dosya($musteri_adi_temp); ?>">

// Sonra (Standart PHP)
<a href="ServisDuzen.php?GiT=<?php echo $MID; ?>&G=<?php echo $ID; ?>&ADI=<?php echo urlencode($musteri_adi_temp); ?>">
```

---

## markaListele.php, turListele.php

### Yapılan Düzeltmeler

#### 1. Header Dosyası Hatası
**Çözüm:**
- `blok/header.php` → `blok/ustic.php` olarak değiştirildi

#### 2. Undefined Array Key
**Sorun:** `$_GET['MK']`, `$_GET['TUR']` kontrolleri eksikti

**Çözüm:**
```php
$mk = isset($_GET['MK']) ? intval($_GET['MK']) : 0;
$tur = isset($_GET['TUR']) ? intval($_GET['TUR']) : 0;

if(empty($mk)) {
    echo "<tr><td colspan='6' class='text-center'>Lütfen bir marka seçiniz.</td></tr>";
}
```

#### 3. mysql_num_rows Kontrolü
**Çözüm:**
- Tüm query sonuçları kontrol edildi
- Boş sonuç setlerinde uygun mesaj gösterildi

#### 4. URL Rewrite Sisteminden Geçiş
**Çözüm:**
- Tüm linkler standart PHP formatına dönüştürüldü

---

## Sorgu Parametreleri

### personelis.php
- `$_GET['PRS']` - Teknisyen ID (zorunlu)
- `$_GET['G']` - Teknisyen adı (URL için, opsiyonel)

### gun.php
- Tarih filtresi: Bugünün tarihine göre otomatik filtreleme yapılır

### markaListele.php
- `$_GET['MK']` - Marka ID (zorunlu)
- `$_GET['GiT']` - Marka adı (URL için, opsiyonel)

### turListele.php
- `$_GET['TUR']` - Ürün türü ID (zorunlu)
- `$_GET['GiT']` - Ürün türü adı (URL için, opsiyonel)

---

## Database Tabloları

### yonetici (Teknisyenler)
- `id` - Personel ID (Primary Key)
- `adi` - Personel adı
- `durum` - Durum (6=Teknisyen)
- `pasif` - Pasif durumu (0=Aktif, 1=Pasif)

### girisler
- `GID` - Servis ID (Primary Key)
- `MID` - Müşteri ID
- `yeni_personel` - Sorumlu teknisyen ID (personel değil!)
- `marka` - Marka ID
- `turu` - Ürün türü ID
- `Gdurum` - Servis durumu ID
- `sonlandir` - Sonlandırma durumu (0/1)
- `tarih` - Tarih

### servisDurumu
- `id` - Durum ID (Primary Key)
- `servisdurum` - Durum adı
- `renk` - Durum rengi

---

## Önemli Notlar

### 1. personel vs yeni_personel
- **DİKKAT:** `girisler` tablosunda `personel` alanı değil, `yeni_personel` alanı kullanılır!
- Teknisyen atamaları için `yeni_personel` alanı kontrol edilmelidir

### 2. Pasif Teknisyenler
- Sadece aktif teknisyenler listelenmelidir (`pasif='0'`)
- Menüde teknisyen listesi gösterilirken pasif kontrolü yapılmalıdır

### 3. Teknisyen Atama Kontrolü
```php
// Teknisyen atanmamışsa
if(empty($PID)) {
    $teknisyen_adi = "Atanmamış";
} else {
    $teknisyen_result = mysql_query("SELECT * FROM yonetici WHERE id='$PID'", $baglanti);
    if($teknisyen_result && mysql_num_rows($teknisyen_result) > 0) {
        $teknisyen_ver = mysql_fetch_array($teknisyen_result);
        $teknisyen_adi = isset($teknisyen_ver['adi']) ? htmlspecialchars($teknisyen_ver['adi']) : "Atanmamış";
    } else {
        $teknisyen_adi = "Atanmamış";
    }
}
```

### 4. URL Formatı
- **ÖNEMLİ:** URL rewrite sistemi kaldırılmıştır
- Tüm linkler standart PHP query string formatında olmalıdır
- Örnek: `ServisDuzen.php?GiT={MID}&G={GID}&ADI={ADI}`

---

## Best Practices

### 1. Teknisyen Listesi
```php
// Sadece aktif teknisyenleri listele
$teknisyen_sql = "SELECT * FROM yonetici WHERE durum='6' AND pasif='0' ORDER BY adi ASC";
$teknisyen_result = mysql_query($teknisyen_sql, $baglanti);

while($teknisyen = mysql_fetch_array($teknisyen_result)) {
    echo "<option value='" . $teknisyen['id'] . "'>" . htmlspecialchars($teknisyen['adi']) . "</option>";
}
```

### 2. Servis Listesi (JOIN ile)
```php
$sql = "SELECT g.*, 
        m.Ad_Soyad, m.Tel, m.Adres,
        ma.marka,
        ut.turu,
        sd.servisdurum, sd.renk
        FROM girisler g
        LEFT JOIN musteriler m ON g.MID = m.ID
        LEFT JOIN marka ma ON g.marka = ma.id
        LEFT JOIN urunturu ut ON g.turu = ut.id
        LEFT JOIN servisDurumu sd ON g.Gdurum = sd.id
        WHERE g.yeni_personel='$teknisyen_id' AND g.sonlandir='0' 
        ORDER BY g.GID DESC";
```

### 3. Null Kontrolleri
```php
$durumyaz = isset($girisler['servisdurum']) ? htmlspecialchars($girisler['servisdurum']) : "";
$musteri_adi = isset($musterigetir['Ad_Soyad']) ? htmlspecialchars($musterigetir['Ad_Soyad']) : "";
$telefon = isset($musterigetir['Tel']) ? htmlspecialchars($musterigetir['Tel']) : "";
```

---

## Menü Entegrasyonu

### yonetici_menu.php
```php
// Teknisyen listesi dinamik olarak oluşturulmalı
$teknisyen_sql = "SELECT * FROM yonetici WHERE durum='6' AND pasif='0' ORDER BY adi ASC";
$teknisyen_result = mysql_query($teknisyen_sql, $baglanti);

while($teknisyen = mysql_fetch_array($teknisyen_result)) {
    $aktif = (isset($_GET["PRS"]) && $_GET["PRS"] == $teknisyen['id']) ? "active" : "";
    echo "<li class='$aktif'>";
    echo "<a href='personelis.php?PRS=" . $teknisyen['id'] . "'>";
    echo htmlspecialchars($teknisyen['adi']);
    echo "</a>";
    echo "</li>";
}
```

**ÖNEMLİ:** Menü başlıklarındaki bozuk karakterler düzeltilmiştir:
- Tüm Türkçe karakterler doğru şekilde yazılmıştır
- İkon karakterleri kaldırılmıştır
- Sadece yazılar bırakılmıştır

---

## Test Edilmesi Gerekenler

- [ ] Teknisyen listesi görüntüleniyor mu?
- [ ] Teknisyene atanan servisler listeleniyor mu?
- [ ] Günlük servisler doğru görüntüleniyor mu?
- [ ] Teknisyen atanmamış servisler "Atanmamış" olarak görünüyor mu?
- [ ] Pasif teknisyenler listede görünmüyor mu?
- [ ] Dashboard performansı kabul edilebilir mi?
- [ ] Tüm linkler standart PHP formatında mı?
- [ ] URL rewrite olmadan sayfalar açılıyor mu?

---

## Son Güncelleme
**Tarih:** 2025-01-14
**Versiyon:** 2.0

**Son Değişiklikler:**
- URL rewrite sisteminden standart PHP URL'lerine geçiş
- Header dosyası düzeltmeleri
- Undefined array key hataları düzeltildi
- Performance optimizasyonları yapıldı
- personel vs yeni_personel kullanımı düzeltildi

Directory Contents

Dirs: 0 × Files: 20

Name Size Perms Modified Actions
15.22 KB lrw-r--r-- 2025-11-14 06:05:02
Edit Download
4.52 KB lrw-r--r-- 2025-11-14 07:00:34
Edit Download
5.36 KB lrw-r--r-- 2025-11-14 07:59:50
Edit Download
13.95 KB lrw-r--r-- 2025-11-14 04:36:48
Edit Download
6.29 KB lrw-r--r-- 2025-11-14 07:11:42
Edit Download
3.86 KB lrw-r--r-- 2025-11-14 07:27:20
Edit Download
10.45 KB lrw-r--r-- 2025-11-14 06:05:02
Edit Download
4.43 KB lrw-r--r-- 2025-11-14 07:00:44
Edit Download
21.79 KB lrw-r--r-- 2025-11-14 04:35:56
Edit Download
3.60 KB lrw-r--r-- 2025-11-14 08:05:30
Edit Download
10.27 KB lrw-r--r-- 2025-11-14 07:27:10
Edit Download
13.51 KB lrw-r--r-- 2025-11-14 06:05:22
Edit Download
3.01 KB lrw-r--r-- 2025-11-14 08:02:42
Edit Download
4.75 KB lrw-r--r-- 2025-11-14 04:35:56
Edit Download
5.50 KB lrw-r--r-- 2025-11-14 06:05:02
Edit Download
9.77 KB lrw-r--r-- 2025-11-14 04:35:56
Edit Download
11.03 KB lrw-r--r-- 2025-11-14 04:36:48
Edit Download
6.94 KB lrw-r--r-- 2025-11-14 07:02:16
Edit Download
12.81 KB lrw-r--r-- 2025-11-14 04:35:56
Edit Download
23.86 KB lrw-r--r-- 2025-11-14 04:36:48
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 REDROOM — Secure File Manager. All rights reserved. Built with ❤️ & Red Dark UI