Files
ornekler/web/anket
semih e0e4a0d6c7 KabaLang örnekleri: konsol, masaüstü ve web için dokuz proje
Konsol: fraktal (paralel şeritli 24-bit Mandelbrot/Julia + yakınlaşma),
sudoku (geri izlemeli, canlı animasyon), fatura (JSON → terminal tablosu,
PDF ve Excel).
Masaüstü: hesap makinesi (işlem önceliği, canlı bağlama), odak (Pomodoro),
parola atölyesi (entropi ölçer, SHA-256).
Web: pano (Kanban REST API + SQLite), kisalt (302 yönlendirme, SVG
istatistik), anket (adres başına tek oy, sunucuda çizilen grafik).

Hepsi `kabalang calistir` ile derlenip çalışır; web uygulamaları yalnız
127.0.0.1'i dinler, SQL parametre bağlamalı, HTML çıktısı kaçırılır.
2026-10-03 08:37:47 +03:00
..

Anket — canlı oylama

Anket

Tek soruluk canlı anket. Oylar SQLite'ta tutulur, aynı adresten ikinci oy veritabanı kısıtıyla engellenir, sonuç grafiği her istekte sunucuda KabaLang ile SVG olarak çizilir.

kabalang calistir web/anket/anket.kbl
# → http://127.0.0.1:8473

Neyi gösteriyor

Konu Nerede
yapi Secenek + tipli alanlar, yapı listesi döndüren fonksiyon (-> liste<Secenek>) secenekler
Gövdesiz form: oy kimliği yolda (POST /oy/{id}) oy_ver
POST → 303 → GET deseni (sayfa yenilenince oy tekrar gitmez) oy_ver
Aynı grafiği iki genişlikte üretmek (masaüstü / telefon) grafik_svg(liste, isaretli, gen)
Doğru içerik tipiyle tek başına SVG: .tip("image/svg+xml") /sonuc.svg
JSON'u SQLite'ın json_object işlevine kurdurmak /api/sonuclar

Oy ekranı

Güvenlik

  • SQL enjeksiyonu: seçenek kimliği ve istemci adresi sorguya ? ile bağlanır. /oy/1 OR 1=1 var olmayan bir seçenektir → 404.
  • Çift oy: oy.adres sütunu UNIQUE; denetim ile kayıt tek iş parçacıklı sunucuda sırayla koşar, yarış koşulu yoktur.
  • Sunucu yalnız 127.0.0.1'i dinler. (Yerelde her istemci aynı adres olduğu için tarayıcı bir kez oy verebilir — anketi sıfırlamak için anket.db'yi silin.)

Veritabanı yolu ANKET_DB ile değiştirilebilir (varsayılan anket.db).