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
Anladım,
Şu şekilde kodlarımı güncelledim fakat bu seferde duyuru veritabanına INSERT edemiyorum.
error.log dosyasında şu şekilde bir hata görüntülüyorum.
[php:error] [pid 654048] [client 100.100.100.3:50864] PHP Fatal error: Uncaught TypeError: mysqli_num_rows(): Argument #1 ($result) must be of type mysqli_result, null given in /var/www/duyuru/islemler/duyuru_ekle_islem.php:35\nStack trace:\n#0 /var/www/duyuru/islemler/duyuru_ekle_islem.php(35): mysqli_num_rows()\n#1 {main}\n thrown in /var/www/duyuru/islemler/duyuru_ekle_islem.php on line 35, referer: https://cloud.*****.com.tr/duyuru/islemler/duyuru_duzenle.php<?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
$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
$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'];
}
// 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'];
// 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']);
*/
$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));
?>