mikropiks adlı üyeden alıntı: mesajı görüntüle
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
mikropiks adlı üyeden alıntı: mesajı görüntüle
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));
?>