PHP
1. Kampüs Duyuru Kartı
Öğrenci işleri birimi, web sitesinde dönem sonu duyurusunu küçük bir PHP sayfası üzerinden göstermek istemektedir. Duyuru bilgileri PHP değişkenlerinde tutulacaktır.
- announcement.php adlı bir dosya oluşturunuz.
- Duyuru başlığı, açıklaması, tarihi ve aktif/pasif durumu için PHP değişkenleri tanımlayınız.
- Değişkenleri HTML içinde echo kullanarak ekrana yazdırınız.
- Durum değişkeni true ise “Aktif Duyuru”, false ise “Pasif Duyuru” yazdırınız.
- Kısa echo etiketi <?= ?> kullanılmayacaktır.
- Bu soruda veritabanı kullanılmayacaktır.
| Örnek değişkenler: $title = “Final Sınav Takvimi”; $description = “Final sınav tarihleri öğrenci bilgi sisteminde yayınlanmıştır.”; $date = “10 Haziran 2026”; $isActive = true; |
2. Kampüs Duyuru Kartı
Final haftasında kütüphane çalışma salonu için öğrencilerden kısa bir başvuru alınacaktır. Başvurular veritabanına değil, düz bir metin dosyasına kaydedilecektir. Saat çakışması dikkate alınmayacaktır.
- library_form.php adlı tek bir PHP dosyası oluşturunuz.
- HTML formunda Ad Soyad, Bölüm ve Saat Aralığı alanları bulunmalıdır.
- Form method=”post” ile aynı sayfaya gönderilmelidir.
- Ad Soyad, Bölüm veya Saat Aralığı boşsa “Lütfen tüm alanları doldurunuz.” mesajı gösterilmelidir.
- Form doğru gönderildiğinde başvuru library_applications.txt dosyasına yeni satır olarak eklenmelidir.
- Dosyaya yazılacak format şu mantıkta olmalıdır: Ad Soyad | Bölüm | Saat Aralığı
- Dosyaya ekleme yaparken file_put_contents() ve FILE_APPEND kullanılabilir.
- Sayfanın altında library_applications.txt içindeki önceki başvurular listelenmelidir.
- library_applications.txt dosyası yoksa “Henüz kayıtlı başvuru yok.” mesajı gösterilmelidir.
- Kullanıcıdan gelen tüm veriler ekrana yazdırılırken htmlspecialchars() kullanılmalıdır.
Saat çakışması kontrol edilmeyecektir. Aynı saat aralığına birden fazla başvuru yapılabilir.

| İlk açılış görünümü |

| Başvuru sonrası liste görünümü |
3. Kampüs Kafe Sipariş
Kampüs kafe, öğrencilerin birden fazla ürün için adet girerek sipariş toplamını görmesini istemektedir. Bu soru tek sayfa olarak değil, iki ayrı PHP sayfası olarak kurgulanacaktır.
campus_cafe.php dosyası sipariş formunu göstermelidir.
campus_cafe_result.php dosyası formdan gelen bilgileri alıp sipariş sonucunu göstermelidir.
campus_cafe.php sayfasında Öğrenci Adı alanı ve en az 4 ürün için adet inputları bulunmalıdır.
Ürünler ve fiyatlar PHP dizisi içinde tutulmalıdır. Örneğin: Tost 50 TL, Ayran 20 TL, Çay 15 TL, Sandviç 65 TL.
Formdaki ürün adet alanları PHP foreach döngüsü ile üretilebilir.
Form method=”post” ve action=”campus_cafe_result.php” kullanmalıdır.
campus_cafe_result.php sayfası POST ile gelen adetleri okumalıdır.
Adedi 0’dan büyük olan ürünler için ürün adı, adet, birim fiyat ve ara toplam gösterilmelidir.
| Örnek ürün dizisi: $menu = [ “Tost” => 50, “Ayran” => 20, “Çay” => 15, “Sandviç” => 65 ]; |

| campus_cafe.php beklenen form ekranı |

| campus_cafe_result.php beklenen sonuç ekranı |
4. Kampüs Duyuru Kartı
Bir öğrenci kulübü yaklaşan etkinliklerini PHP dizisi içinde tutmak ve web sayfasında tablo olarak göstermek istemektedir.
- events.php dosyası oluşturunuz.
- Etkinlikler çok boyutlu bir PHP dizisi içinde tutulmalıdır.
- Her etkinlik için name, quota ve room bilgisi bulunmalıdır.
- foreach kullanarak etkinlikleri HTML tablosu içinde gösteriniz.
- Kontenjan 25’ten küçükse Not sütununda “Sınırlı Kontenjan” yazmalıdır.
Kontenjan 25 veya üzerindeyse Not sütununda “-” yazmalıdır.
| Örnek dizi: $events = [ [“name” => “PHP Tekrar Atölyesi”, “quota” => 30, “room” => “B-204”], [“name” => “SQL Uygulama Saati”, “quota” => 25, “room” => “Lab-2”], [“name” => “Proje Sunum Hazırlığı”, “quota” => 20, “room” => “A-105”] ]; |

Etkinlik tablosu için beklenen sade görünüm
5. Sertifika Ön Değerlendirme Formu
Bir atölye sonunda öğrencinin sertifika alıp alamayacağı basit bir PHP formu ile hesaplanacaktır.
- certificate_check.php dosyası oluşturunuz.
- Formda Ad Soyad, Katılım Puanı ve Ödev Puanı alanları bulunmalıdır.
- Form POST yöntemi ile aynı sayfaya gönderilmelidir.
- Katılım puanı %50, ödev puanı %50 etkili olacak şekilde ortalama hesaplanmalıdır.
- Ortalama 70 ve üzerindeyse “Sertifika alabilir”, değilse “Sertifika alamaz” yazmalıdır.
- Hesaplama işlemini bir PHP fonksiyonu içinde yapınız.
Boş veya sayı olmayan puan girilirse hata mesajı gösteriniz.

Database
1. Kütüphane Kitap Kayıtları – CREATE ve INSERT
Kampüs kütüphanesi, kitaplarını basit bir books tablosunda tutmak istemektedir.
- books adlı tabloyu oluşturacak SQL sorgusunu yazınız.
- Tabloda id, title, author ve stock alanları bulunmalıdır.
- id alanı otomatik artan primary key olmalıdır.
- title ve author metin tutmalıdır.
- stock tam sayı tutmalıdır.
- Aşağıdaki hedef veriyi oluşturacak INSERT sorgularını yazınız.
- Son olarak tüm kitapları listeleyen SELECT sorgusunu yazınız.

INSERT işlemleri sonunda beklenen tablo verisi
2. Kampüs Kafe Siparişlerini Okuma – SELECT
Kampüs kafe görevlisi, hazır siparişleri ve miktarı fazla olan siparişleri hızlıca görmek istemektedir.
- Tüm siparişleri listeleyen SELECT sorgusunu yazınız.
- Sadece status değeri ready olan siparişleri listeleyen sorguyu yazınız.
- quantity değeri 1’den büyük olan siparişleri listeleyen sorguyu yazınız.
- Siparişleri customer adına göre alfabetik sıralayan sorguyu yazınız.
- Sadece customer ve product sütunlarını gösteren sorguyu yazınız.

Sorguların çalışacağı başlangıç orders tablosu
3. Öğrenci Kulübü Üye Ekleme – INSERT
Web Tasarım Kulübü yeni bir üyeyi sisteme eklemek istemektedir.
- club_members tablosuna Ece Yılmaz adlı öğrenciyi Web Club kulübüne active üye olarak ekleyen INSERT sorgusunu yazınız.
- Ekleme işleminden sonra tüm üyeleri listeleyen SELECT sorgusunu yazınız.
- Sadece Web Club üyelerini listeleyen SELECT sorgusunu yazınız.
- Aşağıdaki hedef son hale ulaşılması beklenmektedir.

INSERT öncesi ve sonrası tablo durumu
4. Helpdesk Talebini Güncelleme – UPDATE
Üniversite IT biriminde Mehmet Can’ın şifre sıfırlama talebi çözüldüğü için talep durumu kapatılacaktır.
- Mehmet Can’ın talebinin status değerini closed yapacak UPDATE sorgusunu yazınız.
- Güncelleme işlemini id üzerinden yapınız.
- Güncellemeden sonra tüm tickets tablosunu listeleyen SELECT sorgusunu yazınız.
- Sadece status değeri open olan talepleri listeleyen SELECT sorgusunu yazınız.
- Aşağıdaki hedef son hale ulaşılması beklenmektedir.

UPDATE öncesi ve sonrası tablo durumu
5. Sepet Düzenleme – DELETE ve UPDATE
Bir öğrenci online kırtasiye sepetinden Mouse Pad ürününü çıkarmış, USB Cable ürününün adedini 3 yapmak istemiştir.
- Mouse Pad ürününü silecek DELETE sorgusunu yazınız.
- Silme işlemini mümkünse id alanı üzerinden yapınız.
- USB Cable ürününün quantity değerini 3 yapacak UPDATE sorgusunu yazınız.
- İşlemlerden sonra tüm cart_items tablosunu listeleyen SELECT sorgusunu yazınız.
- Kalan ürünlerin toplam tutarını quantity * price üzerinden hesaplayan SELECT sorgusunu yazınız.
- Aşağıdaki hedef son hale ulaşılması beklenmektedir.

DELETE/UPDATE öncesi ve sonrası sepet tablosu
Entegrasyon
1. Kampüs Etkinlik Kayıt Sistemi
Bir öğrenci kulübü yaklaşan etkinliklere web üzerinden kayıt almak istemektedir. Öğrenci etkinlikleri görmeli, bir etkinlik seçmeli ve formu gönderdiğinde kayıt veritabanına eklenmelidir.

Beklenen sade ekran görünümü örneği
Genel beklentiler
- index.php sayfası etkinlikleri events tablosundan listelemelidir.
- Kayıt formunda Ad Soyad, E-posta ve Etkinlik seçimi bulunmalıdır.
- Form POST ile register.php dosyasına gönderilmelidir.
- register.php gelen verileri kontrol etmeli ve registrations tablosuna eklemelidir.
- JavaScript yalnızca boş ad/e-posta/etkinlik kontrolü yapmalıdır.
- CSS sade olmalıdır; form ve etkinlik listesi okunabilir olmalıdır.
- Kayıt sonrası başarı veya hata mesajı gösterilmelidir.
events tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her etkinlik için benzersiz id. |
| title | VARCHAR(100) | Evet | Etkinlik adı. Örn: PHP Workshop. |
| event_date | DATE | Evet | Etkinlik tarihi. Örn: 2026-06-10. |
| room | VARCHAR(50) | Evet | Etkinliğin yapılacağı sınıf/lab. |
| quota | INT | Evet | Etkinliğin kontenjanı. |
registrations tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her kayıt için benzersiz id. |
| event_id | INT | Evet | Kayıt olunan etkinliğin events.id değeri. |
| student_name | VARCHAR(100) | Evet | Kayıt olan öğrencinin adı soyadı. |
| VARCHAR(120) | Evet | Kayıt olan öğrencinin e-posta adresi. | |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Evet | Kaydın oluşturulma zamanı. |
2. Basit Randevu Alma Sistemi
Akademik danışmanlık birimi, öğrencilerin uygun saatlerden birini seçerek randevu alabileceği küçük bir sistem istemektedir.

Beklenen sade ekran görünümü örneği
Genel beklentiler
- index.php sayfası appointments tablosundaki saatleri listelemelidir.
- Dolu saatler kullanıcı tarafından tekrar seçilememelidir.
- Randevu formunda Ad Soyad, E-posta ve Saat seçimi bulunmalıdır.
- Form POST ile book.php dosyasına gönderilmelidir.
- book.php seçilen randevu kaydını güncellemeli, student_name/email alanlarını doldurmalı ve is_booked değerini 1 yapmalıdır.
- JavaScript boş alan kontrolü yapmalıdır.
- CSS sade olmalı; uygun/dolu saatler anlaşılır şekilde listelenmelidir.
appointments tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her randevu saati için benzersiz id. |
| slot_date | DATE | Evet | Randevu tarihi. Örn: 2026-06-12. |
| slot_time | VARCHAR(20) | Evet | Randevu saati. Örn: 10:00. |
| student_name | VARCHAR(100) NULL | Hayır | Randevuyu alan öğrencinin adı. Boşsa saat uygundur. |
| VARCHAR(120) NULL | Hayır | Randevuyu alan öğrencinin e-postası. | |
| is_booked | TINYINT DEFAULT 0 | Evet | 0: uygun, 1: dolu. |
3. Basit Ürün ve Sepet Sistemi
Kampüs kırtasiyesi ürünlerini listelemek ve öğrencilerin seçtiği ürünleri sepete eklemek istemektedir.

Beklenen sade ekran görünümü örneği
Genel beklentiler
- index.php ürünleri products tablosundan listelemelidir.
- Her ürünün yanında Sepete Ekle butonu bulunmalıdır.
- Sepete ekleme işlemi POST ile add_to_cart.php dosyasına gönderilmelidir.
- cart.php sepet içeriğini ürün adı, adet, birim fiyat ve satır toplamı ile göstermelidir.
- Toplam tutar PHP tarafında hesaplanıp echo ile gösterilmelidir.
- JavaScript butona basıldığında kısa bir bilgi mesajı gösterebilir.
- CSS sade liste/kart görünümü için kullanılmalıdır.
products tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her ürün için benzersiz id. |
| name | VARCHAR(100) | Evet | Ürün adı. Örn: Notebook. |
| price | DECIMAL(10,2) | Evet | Ürün fiyatı. Örn: 80.00. |
| stock | INT | Evet | Ürünün stok adedi. |
cart_items tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Sepet satırı için benzersiz id. |
| product_id | INT | Evet | Sepete eklenen ürünün products.id değeri. |
| quantity | INT DEFAULT 1 | Evet | Sepetteki ürün adedi. |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Evet | Sepete eklenme zamanı. |
4. Helpdesk Destek Talebi Sistemi
Üniversite IT birimi, öğrencilerden gelen teknik sorunları takip etmek için basit bir destek talebi sistemi istemektedir.

Beklenen sade ekran görünümü örneği
Genel beklentiler
- index.php sayfasında yeni talep formu ve mevcut talepler listesi bulunmalıdır.
- Talep formunda Ad Soyad, E-posta, Konu ve Açıklama alanları bulunmalıdır.
- Form POST ile create_ticket.php dosyasına gönderilmelidir.
- Yeni talep oluşturulduğunda status değeri open olmalıdır.
- Her açık talebin yanında Kapat butonu bulunmalıdır.
- Kapat butonu POST ile close_ticket.php dosyasına gönderilmeli ve ilgili talebin status değeri closed yapılmalıdır.
- JavaScript boş form gönderimini engellemelidir.
- CSS sade tablo/liste görünümü için kullanılmalıdır.
tickets tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her destek talebi için benzersiz id. |
| requester | VARCHAR(100) | Evet | Talebi oluşturan kişinin adı soyadı. |
| VARCHAR(120) | Evet | Talebi oluşturan kişinin e-postası. | |
| subject | VARCHAR(150) | Evet | Talep konusu. |
| message | TEXT | Evet | Talep açıklaması. |
| status | VARCHAR(20) DEFAULT ‘open’ | Evet | open veya closed değerini tutar. |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Evet | Talebin oluşturulma zamanı. |
5. Ders Notu Paylaşım Panosu
Bir sınıf, PHP ve SQL dersleri için kısa notları paylaşabilecekleri küçük bir not panosu istemektedir.

Beklenen sade ekran görünümü örneği
Genel beklentiler
- index.php sayfasında not ekleme formu ve kayıtlı notlar listesi bulunmalıdır.
- Formda Ders Adı, Konu Başlığı ve Not İçeriği alanları olmalıdır.
- Form POST ile save_note.php dosyasına gönderilmelidir.
- save_note.php gelen notu notes tablosuna eklemelidir.
- index.php kayıtlı notları listelemelidir.
- Ders adına göre filtreleme GET parametresi ile yapılmalıdır. Örn: index.php?course=PHP
- JavaScript textarea içine yazılırken karakter sayısını göstermelidir.
- CSS sadece okunabilir form ve not listesi için kullanılmalıdır.
notes tablosu
| Sütun | Tip | Zorunlu | Açıklama |
| id | INT AUTO_INCREMENT PRIMARY KEY | Evet | Her not için benzersiz id. |
| course_name | VARCHAR(100) | Evet | Ders adı. Örn: PHP veya SQL. |
| title | VARCHAR(150) | Evet | Not başlığı. |
| content | TEXT | Evet | Not içeriği. |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Evet | Notun oluşturulma zamanı. |



