Evet bahsettiğiniz gibi önce mail gönderilip sonrasında kayıt işlemi gerçekleştiriliyor. Kayıt işlemi esnasında herhangi bir hatada id atlama veya kayıt yapılamama durumunda son_id+1 kısmı muhtemelen boşa düşecektir.
Sorunu düzeltmek için ilk olarak duyuru kaydı yapılmalı ve başarılı işlem sonrası son id değeri alınarak mail gönderilmeli. Mevcut koşullarda
satır 144-155 te bulunan kod bloğunu
last id çektiğiniz alanın üstüne çekmeniz gerekmekte. Bu insert işlemi üst kısımlardan veri beklendiği için aynı zamanda
satır 40-51 bulunan kod bloğunuda
insert işleminin üzerine çekmeniz gerekmekte.
İdeal İşlem Sıralaması- Login-Güvenlik Kontrolü
- Kategori ID-Name Verisi
- Duyuru Ekleme (Ekleme hatası olması durumunda işlemi durdurma)
- Son Duyuru ID değeri Okulum
- Mail Gonderme
Hocam Satır 35 $result kısmını $result2 yapabilir misiniz?
Hatayı düzelttim, konuyu güncellemeyi unuttum.
Şuan dediğiniz işlem sıralamasına göre yaptığımı düşünüyorum.
Güncel hali aşağıda, +1 değerini kaldırdım. Test ettim, gelen maillerdeki linkler düzgün geliyor.
Önceki halinde de düzgün geliyordu fakat aralıklı olarak yanlış ID gönderimi yapıyordu.
Bu yapıda bu sorun düzelmiş midir acaba? Sistemi canlıya çekmem için bu sorunu kökten çözmüş olmam gerekiyor.
<?php
require_once('config.php');
// Initialize the session
session_start();
//print_r($_SESSION);
//yetki kontrolü yap
if($_SESSION['duyuru_yetki'] != "1"){
header('Location: ../login.php');
session_destroy();
}
//bugünki tarih
$currentDate = date('Y-m-d');
// Check if the user is logged in, otherwise redirect to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: ../login.php");
exit;
}
$user_id = $_SESSION['id'];
ini_set('display_errors', 1); // Hata mesajlarını görüntülemeyi aktif hale getirin
error_reporting(E_ALL); // Tüm hata seviyelerini görüntüle
// Formdan gönderilen verileri alın
/*$title = mysqli_real_escape_string($conn, $_POST['title']);
$body = mysqli_real_escape_string($conn, $_POST['body']);
$category_id = mysqli_real_escape_string($conn, $_POST['category_id']);
*/
$title = trim($_POST['title']);
$body = trim($_POST['body']);
$category_id = trim($_POST['category_id']);
$created_user = $user_id; // Kullanıcının id'sini al
// Verileri veritabanına ekleyen SQL sorgusunu oluşturun
$sql = "INSERT INTO announcements (title, body, category_id, created_user) VALUES ('$title', '$body', '$category_id', '$user_id')";
// SQL sorgusunu çalıştırın
if (mysqli_query($conn, $sql)) {
// Sorgu başarıyla çalıştırıldıysa, post eklendi
$json['post']['status'] = true;
$json['post']['msg'] = 'Post eklendi';
} else {
// Sorgu çalıştırılamadıysa, hata mesajını yazdırın
$json['post']['msg'] = 'Post eklenemedi: ' . mysqli_error($conn);
}
$sql = "SELECT id FROM announcements ORDER BY id DESC LIMIT 1";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$last_id = $row['id'];
$query = "SELECT * FROM categories WHERE id = $category_id";
$result2 = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
$row2 = mysqli_fetch_assoc($result2);
$category_name = $row2['name'];
}
$ozet = '
<html>
<!--[if mso]>
<style>
body,table tr,table td,a, span,table.MsoNormalTable { font-family:Arial, Helvetica, sans-serif !important; }
</style>
<!--<![endif]-->
<center><img style="text-align: center;" src="https://cloud.*****.com.tr/duyuru/assets/img/*****-logo-mail.png"></center>
<center><table>
<td valign="middle" align="center" style="width: 400px; padding-top: 20px;">
<h2 style="font-family: Arial;">['. $row2['name'] .'] '. $title .'</h2>
</td>
<td></td>
</table></center>
<center><table>
<td valign="middle" align="center" style="padding-top:20px; width: 400px;">
<p style="font-family: Arial;">'. $body .'</p>
</td>
</table></center>
<center><table style="padding-top:20px; font-family: Arial; font-size:10px;">
<td valign="middle" align="center" style="width: 400px; font-family: Arial; font-size:10px;">
<a href="https://cloud.*****.com.tr/duyuru/duyuru_oku.php?id='. $last_id .'" style="color:#000000;">Bu yazı Outlook üzerinde düzgün görüntülenmiyor ise buraya tıklayarak Web üzerinden okuyabilirsiniz.</a>
</td>
</table></center>
<center><table style="font-family: Arial; font-size:10px;">
<td valign="middle" align="center" style="width: 400px; font-family: Arial; font-size:10px;">
<p>**Resimlerin tam boyutlu haline ulaşmak için üzerine tıklayabilirsiniz.</p>
</td>
</table></center>
</html>
';
// Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Include PHPMailer library files
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';
//require 'index.php';
// Create an instance of PHPMailer class
$mail = new PHPMailer;
// UTF-8
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
// SMTP configuration
//$mail->IsSMTP(); //Çalışmazsa etkinleştir.
$mail->Host = 'email.*****.com.tr';
$mail->SMTPAuth = true;
$mail->Username = 'enesis@*****.com.tr';
$mail->Password = '****';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// Sender info
$mail->setFrom('enesis@*****.com.tr', '***** Duyuru Sistemi');
// Add a recipient
$mail->addAddress('tsonkaya@*****.com.tr');
//$mail->addAddress('skaraca@*****.com.tr');
//$mail->addAddress('tturna@*****.com.tr');
//$mail->addAddress('scifci@*****.com.tr');
//cc bölümü
//$mail->addCC('tsonkaya@*****.com.tr');
// Email subject
$mail->Subject = 'Duyuru: ['. $row2['name'] .'] '. $title .''; // İleti konusu
// Set email format to HTML
$mail->isHTML(true);
// Email body content
$mailContent = '';
$mail->Body = $ozet;
$json = array('email' => array('status' => false, 'msg' => ''), 'post' => array('status' => false, 'msg' => ''));
if(!$mail->send()) {
$json['email']['msg'] = 'E-posta gönderilemedi: ' . $mail->ErrorInfo;
} else {
$json['email']['status'] = true;
$json['email']['msg'] = 'E-posta başarıyla gönderildi.';
}
// Veritabanı bağlantısını kapatın
mysqli_close($conn);
header('Content-type: application/json');
exit(json_encode($json));
?>