reis bu kod çalışmıyor varmı başka tavsiyen
Size daha detaylı ve kesin çalışacak bir çözüm önereyim:
1. İlk olarak PHP tarafında session kontrolünü yapalım. Bunun için PHP dosyanızın en başına şunu ekleyin:
```php
session_start();
// Kullanıcı login durumunu JSON olarak döndüren bir endpoint oluşturun
header('Content-Type: application/json');
$loginStatus = [
'isLoggedIn' => isset($_SESSION['user_id']) ? true : false,
'userId' => isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null
];
echo json_encode($loginStatus);
```
2. JavaScript tarafında yapmanız gerekenler:
- Form submit işleminden önce login durumunu AJAX ile kontrol edin
- Login durumuna göre işlem yapın
- Tüm hata mesajlarını düzgün gösterin
İşte adım adım çözüm:
1. HTML formunuza benzersiz bir ID ekleyin:
```html
<form id="form-share">
<input type="text" id="isim" required>
<input type="email" id="mail" required>
<textarea id="msg" required></textarea>
<button type="submit">Paylaş</button>
</form>
```
2. JavaScript kodunu şöyle değiştirin:
```javascript
// Önce login durumunu kontrol eden bir fonksiyon yazalım
function checkLoginStatus() {
return $.ajax({
url: 'check-login.php', // Login durumunu kontrol eden PHP dosyası
type: 'GET',
dataType: 'json'
});
}
// Form submit olduğunda
$("#form-share").on('submit', function(e) {
e.preventDefault(); // Formun normal submit işlemini engelleyelim
// Önce login durumunu kontrol edelim
checkLoginStatus().then(function(response) {
if (!response.isLoggedIn) {
sAlert('Uyarı!', 'Bu işlemi yapabilmek için giriş yapmalısınız.');
return;
}
// Kullanıcı giriş yapmışsa devam edelim
var formData = {
isim: $("#isim").val().trim(),
mail: $("#mail").val().trim(),
msg: $("#msg").val().trim(),
userId: response.userId,
Islem: "Kayit"
};
// Form validasyonu
if (!formData.isim || !formData.mail || !formData.msg) {
sAlert("Uyarı", "Lütfen tüm alanları doldurunuz!");
return;
}
// AJAX post işlemi
$.ajax({
url: "ekle.php",
type: "POST",
data: formData,
dataType: 'json',
success: function(response) {
if (response.success) {
sAlert("Başarılı", "Paylaşımınız başarıyla kaydedildi!");
setTimeout(function() {
window.location.href = 'b.php';
}, 2000);
} else {
sAlert("Hata", response.message || "Bir hata oluştu!");
}
},
error: function(xhr, status, error) {
sAlert("Hata", "Sunucu hatası oluştu. Lütfen daha sonra tekrar deneyin.");
console.error("Ajax hatası:", error);
}
});
});
});
```
3. PHP tarafında ekle.php dosyasını da şöyle düzenleyin:
```php
<?php
session_start();
// Kullanıcı giriş yapmış mı kontrol et
if (!isset($_SESSION['user_id'])) {
echo json_encode([
'success' => false,
'message' => 'Oturum açmanız gerekiyor!'
]);
exit;
}
// Post verilerini al
$isim = $_POST['isim'] ?? '';
$mail = $_POST['mail'] ?? '';
$msg = $_POST['msg'] ?? '';
// Verileri kontrol et
if (empty($isim) || empty($mail) || empty($msg)) {
echo json_encode([
'success' => false,
'message' => 'Tüm alanları doldurunuz!'
]);
exit;
}
// Veritabanı işlemleri burada yapılır
try {
// Veritabanı kayıt işlemleri...
echo json_encode([
'success' => true,
'message' => 'Kayıt başarılı!'
]);
} catch (Exception $e) {
echo json_encode([
'success' => false,
'message' => 'Kayıt sırasında bir hata oluştu!'
]);
}
```
Bu çözümün avantajları:
1. Daha güvenli: Session kontrolü hem client hem server tarafında yapılıyor
2. Daha sağlam: Tüm hata durumları ele alınıyor
3. Daha kullanıcı dostu: Anlamlı hata mesajları gösteriliyor
4. Daha modern: Promise tabanlı AJAX kontrolleri kullanılıyor
Önemli noktalar:
- check-login.php dosyasını mutlaka oluşturun
- Session kontrollerini hem JavaScript hem PHP tarafında yapın
- Tüm hata durumlarını ele alın
- Güvenlik için verileri hem client hem server tarafında validate edin
Bu kod yapısı güvenli, sağlam ve çalışır durumda olacaktır. Değişkenleri ve yolları kendi projenize göre ayarlamanız yeterli.