You are not logged in.
Pages: 1
Hi, I developed a plugin and I want to take data from a form in index.php and add it to the database, but the csrf check fails, can you help me what am I missing?
Below you can find the codes of both pages.
index.php
<?php
include('../../../inc/includes.php');
global $DB;
// GLPI'nin oturum açma durumunu kontrol et
Session::checkLoginUser();
// CSRF token oluştur
$csrf_token = Session::getNewCSRFToken();
// Sayfa başlığı ve stil dosyası
Html::header(__('Ziyaretçi Takip Sistemi', 'guvenlik'), $_SERVER['PHP_SELF'], 'config');
// Kullanıcının adını alın
$userName = $_SESSION['glpiname'];
// Lokasyon belirleme
$lokasyon = ($userName === 'rguvenlik') ? 'Ring' : 'OE';
echo "Token: " . $csrf_token; // Test için token’ı ekrana yazdırıyoruz
try {
$stmt = $DB->request('SELECT 1');
echo '<br><a class="navigationheader-title strong text-success"><i class="fa-regular fa-circle-check"></i> Veri tabani baglantisi basarili.</a>';
} catch (Exception $e) {
echo 'Bağlantı hatası: ' . $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Güvenlik Giriş-Çıkış Takip Sistemi</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.3.6/css/buttons.dataTables.min.css">
<script src="https://cdn.datatables.net/plug-ins/1.13.4/i18n/tr.json"></script>
<style>
.date-icon {
margin-right: 8px;
}
td.dataTables_empty {
text-align: center;
}
.group {
background-color: #f9f9f9;
font-weight: bold;
padding: 10px;
cursor: pointer;
}
</style>
</head>
<body>
<div id="page">
<main>
<h1 style="margin-top:50px" class="text-warning"><i class="fa-solid fa-person-military-to-person"></i> Ziyaretçi Kayıt Sistemi</h1>
<form id="veri-form" style="margin-top:50px">
<label for="giris_tarihi">Giriş Tarihi:</label>
<input type="datetime-local" id="giris_tarihi" name="giris_tarihi" required>
<label for="cikis_tarihi">Çıkış Tarihi:</label>
<input type="datetime-local" id="cikis_tarihi" name="cikis_tarihi" required>
<label for="personel_misafir">Personel/Misafir:</label>
<select id="personel_misafir" name="personel_misafir" required>
<option value="personel">Personel</option>
<option value="misafir">Misafir</option>
</select>
<label for="arac_plaka">Araç Plaka:</label>
<input type="text" id="arac_plaka" name="arac_plaka" required>
<!-- Gizli alan -->
<input type="hidden" id="lokasyon" name="lokasyon" value="<?php echo htmlspecialchars($lokasyon); ?>">
<!-- CSRF token'ı gizli alanda ekle -->
<input type="hidden" id="_glpi_csrf_token" name="_glpi_csrf_token" value="<?php echo $csrf_token; ?>">
<button class="btn btn-primary me-2" type="submit"><i class="far fa-save"></i> <span>Kaydet</span></button>
</form>
<h2 style="margin-top:50px">Giriş-Çıkış Kayıtları</h2>
<table id="veri-tablosu" class="display nowrap" style="width:100%">
<thead>
<tr>
<th>Giriş Tarihi</th>
<th>Çıkış Tarihi</th>
<th>Personel/Misafir</th>
<th>Araç Plaka</th>
</tr>
</thead>
<tbody></tbody>
</table>
</main>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.3.6/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.3.6/js/buttons.html5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.2/jszip.min.js"></script> <!-- Excel için JSZip -->
<script src="https://cdn.datatables.net/buttons/2.3.6/js/buttons.print.min.js"></script>
<script>
$(document).ready(function() {
function formatDate(dateString) {
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false // 24 saat formatını kullanmak için
};
return new Date(dateString).toLocaleDateString('tr-TR', options);
} var table = $('#veri-tablosu').DataTable({
ajax: 'ajax_listele.php',
columns: [
{ data: 'giris_tarihi', render: function(data) { return `<i class="fas fa-sign-in-alt date-icon"></i> ${formatDate(data)}`; } },
{ data: 'cikis_tarihi', render: function(data) { return `<i class="fas fa-sign-out-alt date-icon"></i> ${formatDate(data)}`; } },
{ data: 'personel_misafir' },
{ data: 'arac_plaka' }
],
order: [[0, 'desc']],
language: {
url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/tr.json"
},
dom: 'Bfrtip',
buttons: [
'copy', 'csv', 'excel', 'pdf', 'print'
],
createdRow: function(row, data, dataIndex) {
// Giriş tarihinin sadece gün kısmını al
const group = formatDate(data.giris_tarihi);
$(row).addClass('child-row').attr('data-group', group);
},
drawCallback: function(settings) {
var api = this.api();
var rows = api.rows({ page: 'current' }).nodes();
var last = null;
api.column(0, { page: 'current' }).data().each(function(giris_tarihi, i) {
const group = formatDate(giris_tarihi);
if (last !== group) {
$(rows).eq(i).before(
`<tr class="collapsed-group" data-group="${group}"><td colspan="4"><i class="fa-solid fa-plus"></i> ${group}</td></tr>`
);
last = group;
}
});
}
});
// Grupların açılıp kapanması
$('#veri-tablosu tbody').on('click', '.collapsed-group', function() {
var group = $(this).data('group');
var isVisible = $(`tr[data-group="${group}"]`).not('.collapsed-group').first().is(':visible');
$(`tr[data-group="${group}"]`).not('.collapsed-group').toggle(!isVisible);
$(this).find('i').toggleClass('fa-plus fa-minus');
});
// Formun gönderilmesi
$('#veri-form').on('submit', function(e) {
e.preventDefault();
var formData = new FormData(this);
formData.append('_glpi_csrf_token', '<?php echo $csrf_token; ?>');
fetch('ajax_ekle.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('Veri başarıyla eklendi.');
table.ajax.reload(); // Tabloyu yeniden yükle
} else {
alert(data.message || 'Veri ekleme başarısız.');
}
})
.catch(error => console.error('Hata:', error));
});
});
</script>
</body>
</html>
<?php
Html::footer();
?>
Ajax_add.php
<?php
include('../../../inc/includes.php');
// GLPI oturum kontrolü
Session::checkLoginUser();
// CSRF doğrulaması
if (!Session::validateCSRF($_POST)) {
echo json_encode(['success' => false, 'message' => 'CSRF doğrulaması başarısız.']);
exit;
}
// Formdan gelen verileri al
$giris_tarihi = $_POST['giris_tarihi'] ?? null;
$cikis_tarihi = $_POST['cikis_tarihi'] ?? null;
$personel_misafir = $_POST['personel_misafir'] ?? null;
$arac_plaka = $_POST['arac_plaka'] ?? null;
$lokasyon = $_POST['lokasyon'] ?? null;
// Gerekli alanların doluluğunu kontrol et
if (!$giris_tarihi || !$cikis_tarihi || !$personel_misafir || !$arac_plaka) {
echo json_encode(['success' => false, 'message' => 'Lütfen tüm alanları doldurun.']);
exit;
}
try {
// Veritabanına veri ekleme
$DB->insert(
'glpi_modul_veri',
[
'giris_tarihi' => $giris_tarihi,
'cikis_tarihi' => $cikis_tarihi,
'personel_misafir' => $personel_misafir,
'arac_plaka' => $arac_plaka,
'lokasyon' => $lokasyon // Eğer lokasyon ekleniyorsa
]
);
echo json_encode(['success' => true]);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Veri ekleme hatası: ' . $e->getMessage()]);
}
?>
Offline
Can anyone help me with this?
Offline
Pages: 1