• 07-01-2023, 11:36:08
    #1
    Selamlar,
    Bir duyuru sistemim var.
    Farklı farklı kullanıcılar ihtiyaç olduğu zaman şirkette duyuru çıkıyor ve bu duyuru hem Intranet sisteminde yayınlanıyor, hemde tüm kullanıcılara mail gidiyor. (yaklaşık 230 kişi)
    Title'i bir şekilde çekiyorum fakat link verirken şu sistem ile linki veriyorum.
    $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'] +1;
    Bu şekilde de Outlook üzerindeki mail'e link veriyorum.
    <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>
    Bazen bu ID'yi bir önceki ID olarak veriyor, hatalı bir şekilde mail gidiyor.
    Kullanıcı linke tıkladığı zaman boş içerik ile karşılaşıyor yada hata alıyor.
    Bunu ID'yi en doğru nasıl çekebilirim?
  • 07-01-2023, 11:54:48
    #2
    $last_id = $row['id'] +1;
    Bu kısımda son id değerini alırken neden +1 yaptığınızı anlayamadım açıkcası. Teoride $row['id'] direkt son id değerini vermesi gerekli.
  • 07-01-2023, 11:56:38
    #3
    mikropiks adlı üyeden alıntı: mesajı görüntüle
    $last_id = $row['id'] +1;
    Bu kısımda son id değerini alırken neden +1 yaptığınızı anlayamadım açıkcası. Teoride $row['id'] dierkt son id değerini vermesi gerekli.
    Duyuruyu POST ettiğim sayfada bir mantık hatam var sanırım o yüzden son duyurunun ID'sine 1 ekleyip link atıyordum.
    İlk önce mail göndertip daha sonra veritabanına kayıt ediyor anladığım kadarıyla şuan bu yapı;

    <?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
    
    
    $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'] +1;
    
    
    // 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
    
    $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.';
    }
    
    // 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);
    }
    
    
    // Veritabanı bağlantısını kapatın
    mysqli_close($conn);
    
    header('Content-type: application/json');
    
    exit(json_encode($json));
    ?>
  • 07-01-2023, 12:06:40
    #4
    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
  • 07-01-2023, 12:15:25
    #5
    $row = mysqli_fetch_column($result);

    <a href="https://cloud.***.com.tr/duyuru/duyuru_oku.php?id='. $row .'" style="color:#000000;">Bu yazı Outlook üzerinde düzgün görüntülenmiyor ise buraya tıklayarak Web üzerinden okuyabilirsiniz.</a>

    şeklinde deneyin hocam
  • 07-01-2023, 12:20:10
    #6
    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
    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));
    ?>
  • 07-01-2023, 12:59:43
    #7
    Hocam Satır 35 $result kısmını $result2 yapabilir misiniz?
  • 07-01-2023, 13:01:40
    #8
    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));
    ?>
  • 07-01-2023, 13:09:24
    #9
    Teorik olarak düzgün gözükmekte ve sorun çıkmaz gibi görünüyor. Fakat veri insert ederken herhangi bir hata durumunda script durmuyor. Bu koşulda duyuru eklenememiş olacak fakat son eklenen duyuru id bilgisi ile mail gönderilecektir.(Dolu id olduğundan bildirim boş çıkmaz fakat önceki bildirim görüntülenmiş olur) Bu durumu çözümlemek içinde satır 46 sonrası yürütmeyi durdurmak için exit(); veya duyuru eklenen ekrana küçük bir bilgi ile geri redirect yapılabilir.