CodeBlanks Logo Icon CodeBlanks

Proje sonu - İletişim formu

PHP kursu · Orta seviye · Ders 98/115

Tüm parçaları birleştirip çalışan iletişim formunu tamamlarsın.

Tüm parçaları birleştir

Son derste processSubmission() fonksiyonuyla tüm parçaları birleştirirsin. Bu fonksiyon sırayla şunları yapar: session_start() ile oturumu başlatır, $_POST'tan veriyi alıp htmlspecialchars ile kaçışlar ve bir ContactMessage örneğine doldurur.

Sonra validateMessage($m) ile doğrulama yapar; hata varsa "skip" döndürür. Hata yoksa handleUpload($_FILES['screenshot']) ile dosyayı işler ve $_SESSION['messages'][] = $m ile mesajı oturuma kaydeder. En son "ok" döndürür.

Oturumla mesaj saklamak

session_start() çağrısı oturumu başlatır; ardından $_SESSION süper globaline veri yazabilirsin. Mesajları saklamak için $_SESSION['messages'][] = $m yazarsın; bu, her gönderimi listenin sonuna ekler.

Sonraki isteklerde $_SESSION['messages'] otomatik yüklenir; böylece tüm gönderilmiş mesajları tek bir yerde görebilirsin. Oturum, kullanıcı çerezini sildiğinde veya süre dolduğunda biter.

Uygulama processSubmission fonksiyonunu yaz

Bir processSubmission(): string fonksiyonu yaz. İçinde session_start(); çağır. $m = new ContactMessage(); ile örnek oluştur; $m->name = htmlspecialchars($_POST['name'] ?? ''); ve aynı deseni email ve message için yaz. $errors = validateMessage($m); ile doğrula; count($errors) > 0 ise return "skip";. handleUpload($_FILES['screenshot'] ?? []); çağır. $_SESSION['messages'][] = $m; ile oturuma ekle ve return "ok"; döndür. Test için $_POST ve $_FILES dizilerini elle ver; echo processSubmission(); yaz.

Örnek çözümü göster
string { session_start(); $m = new ContactMessage(); $m->name = htmlspecialchars($_POST['name'] ?? ''); $m->email = htmlspecialchars($_POST['email'] ?? ''); $m->message = htmlspecialchars($_POST['message'] ?? ''); $errors = validateMessage($m); if (count($errors) > 0) { return "skip"; } handleUpload($_FILES['screenshot'] ?? []); $_SESSION['messages'][] = $m; return "ok"; } yaz. $_POST ve $_FILES dizilerini elle ver; echo processSubmission(); yaz.
Örnek çözüm:
<?php
// Tüm parçaları birleştir
class ContactMessage {
    public string $name = "";
    public string $email = "";
    public string $message = "";
}

function renderForm(): string {
    return '<form method="post" action="/iletisim.php">'
        . '<label>Ad: <input type="text" name="name"></label>'
        . '<label>E-posta: <input type="email" name="email"></label>'
        . '<label>Mesaj: <textarea name="message"></textarea></label>'
        . '<input type="submit" value="Gönder">'
        . '</form>';
}

function validateMessage(ContactMessage $m): array {
    $errors = [];
    if (empty($m->name)) {
        $errors[] = "Ad boş";
    }
    if (empty($m->email) || filter_var($m->email, FILTER_VALIDATE_EMAIL) === false) {
        $errors[] = "E-posta geçersiz";
    }
    return $errors;
}

function handleUpload(array $file): string {
    if ($file['error'] !== UPLOAD_ERR_OK) {
        return "skip";
    }
    if ($file['size'] > 2 * 1024 * 1024) {
        return "skip";
    }
    $dest = __DIR__ . "/uploads/" . basename($file['name']);
    move_uploaded_file($file['tmp_name'], $dest);
    return "ok";
}

function processSubmission(): string {
    session_start();
    $m = new ContactMessage();
    $m->name = htmlspecialchars($_POST['name'] ?? '');
    $m->email = htmlspecialchars($_POST['email'] ?? '');
    $m->message = htmlspecialchars($_POST['message'] ?? '');
    $errors = validateMessage($m);
    if (count($errors) > 0) {
        return "skip";
    }
    handleUpload($_FILES['screenshot'] ?? []);
    $_SESSION['messages'][] = $m;
    return "ok";
}

$_POST = ['name' => 'Ayşe', 'email' => 'ayse@example.com', 'message' => 'Merhaba'];
$_FILES = ['screenshot' => ['name' => 'gorsel.png', 'type' => 'image/png', 'tmp_name' => '/tmp/gecici.tmp', 'error' => UPLOAD_ERR_OK, 'size' => 1024]];
echo processSubmission();

Kendini test et

  1. İletişim formu mesajlarını istekler arasında nerede saklarsın?

    • $_GET
    • $_POST
    • $_SESSION
    • $_FILES
    Cevabı göster

    $_SESSION — Doğru. $_SESSION veriyi sunucuda oturum boyunca tutar; istekler arası taşınır.

  2. Proje sonu kavramlarını eşleştir

    session_start()
    Oturum başlatma
    $_SESSION['messages']
    Mesaj listesi
    validateMessage()
    Doğrulama
    handleUpload()
    Dosya taşıma
  3. session_start çağrısını tamamla

    ____;
    $_SESSION['messages'][] = $m;
    Cevabı göster
    session_start();
    $_SESSION['messages'][] = $m;

Orta seviye bölümündeki tüm dersler