Proje sonu - İletişim formu
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
-
İ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.
-
Proje sonu kavramlarını eşleştir
- session_start()
- Oturum başlatma
- $_SESSION['messages']
- Mesaj listesi
- validateMessage()
- Doğrulama
- handleUpload()
- Dosya taşıma
-
session_start çağrısını tamamla
____; $_SESSION['messages'][] = $m;Cevabı göster
session_start(); $_SESSION['messages'][] = $m;