• 25-12-2021, 20:27:45
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhabalar iletişim forumu yaptım php ama yolladıktan sonra her f5 attıpında bug oluyor ve aynısını mysql e yazıyor bunu nasıl düzelte bilirim kodlar aşşığda

    <?php
    
    session_start();
    
    include "conn.php";
    
    if(isset($_SESSION['user']))
    
    {
    
        $user = $db->query("SELECT * FROM users WHERE id = '{$_SESSION['user_id']}'")->fetch(PDO::FETCH_ASSOC);
    
    }
    
    if(isset($_POST['mesaj_ekle']))
    {
       $kaydet=$db->prepare("INSERT into mesajlar set
        adsoyad=:adsoyad,
        eposta=:eposta,
        telefon=:telefon,
        konu=:konu,
        icerik=:icerik
        
        ");
    
      $insert=$kaydet->execute(array(
    
        'adsoyad' => $_POST['adsoyad'],
        'eposta' => $_POST['eposta'],
        'telefon' => $_POST['telefon'],
        'konu' => $_POST['konu'],
        'icerik' => $_POST['icerik']
        
        
        ));
    //işlem sonucu dönüş almak
    
      if ($insert) {
    echo '<div class="alert alert-success" role="alert">
     <center>Mesajınız başarılı bir şekilde gönderildi !</center>
    </div>';
    ;
    
      }
    }
    ?>
  • 25-12-2021, 20:29:15
    #2
    Platin üye
    İşlem bittiğinde header ile tekrar yönlendirme yapın post verilerini sıfırlar
  • 25-12-2021, 20:34:42
    #3
    ymazmustafa adlı üyeden alıntı: mesajı görüntüle
    Merhabalar iletişim forumu yaptım php ama yolladıktan sonra her f5 attıpında bug oluyor ve aynısını mysql e yazıyor bunu nasıl düzelte bilirim kodlar aşşığda

    <?php
    
    session_start();
    
    include "conn.php";
    
    if(isset($_SESSION['user']))
    
    {
    
        $user = $db->query("SELECT * FROM users WHERE id = '{$_SESSION['user_id']}'")->fetch(PDO::FETCH_ASSOC);
    
    }
    
    if(isset($_POST['mesaj_ekle']))
    {
       $kaydet=$db->prepare("INSERT into mesajlar set
        adsoyad=:adsoyad,
        eposta=:eposta,
        telefon=:telefon,
        konu=:konu,
        icerik=:icerik
        
        ");
    
      $insert=$kaydet->execute(array(
    
        'adsoyad' => $_POST['adsoyad'],
        'eposta' => $_POST['eposta'],
        'telefon' => $_POST['telefon'],
        'konu' => $_POST['konu'],
        'icerik' => $_POST['icerik']
        
        
        ));
    //işlem sonucu dönüş almak
    
      if ($insert) {
    echo '<div class="alert alert-success" role="alert">
     <center>Mesajınız başarılı bir şekilde gönderildi !</center>
    </div>';
    ;
    
      }
    }
    ?>
    pm iletin yardımcı olalım
  • 25-12-2021, 20:47:41
    #4
    Merhaba,

    INSERT başarılı olduğunda üyeye time() fonksiyonunu SESSION olarak tanımlatın, dakika kontrolü ekletin ve örneğin önceki isteğinin üzerinden 1 dakika geçmemiş ise işlemi başarısız olarak döndürün.
    Bu sayede hem butona ard arda tıklarlarsa spam istek gönderemeyeceklerdir hem de yazdığınız sorun çözümlenmiş olacaktır.
  • 25-12-2021, 20:51:20
    #5
    Üyeliği durduruldu
    Profesör adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    INSERT başarılı olduğunda üyeye time() fonksiyonunu SESSION olarak tanımlatın, dakika kontrolü ekletin ve örneğin önceki isteğinin üzerinden 1 dakika geçmemiş ise işlemi başarısız olarak döndürün.
    Bu sayede hem butona ard arda tıklarlarsa spam istek gönderemeyeceklerdir hem de yazdığınız sorun çözümlenmiş olacaktır.
    müsaid iseniz tam kod atma şansınız varmı
  • 26-12-2021, 00:12:26
    #6
    Formunuzun action kısmını form.php?page=send gibi querystring içeren bir ifade ile değiştirin. Ardından kodunuzu şu şekilde revize edin.

    <?php
    
    session_start();
    
    include "conn.php";
    
    if(isset($_SESSION['user'])) {
        $user = $db->query("SELECT * FROM users WHERE id = '{$_SESSION['user_id']}'")->fetch(PDO::FETCH_ASSOC);
    }
    
    $page = $_GET['page'] ?? false;
    
    if($page === 'send')
    {
        if(isset($_POST['mesaj_ekle'])) {
            $kaydet = $db->prepare("INSERT into mesajlar (adsoyad, eposta, telefon, konu, icerik) VALUES (:adsoyad, :eposta, :telefon, :konu, :icerik)");
            $kaydet->execute([
                'adsoyad' => $_POST['adsoyad'],
                'eposta' => $_POST['eposta'],
                'telefon' => $_POST['telefon'],
                'konu' => $_POST['konu'],
                'icerik' => $_POST['icerik']
            ]);
        
            if ($db->lastInsertId())
                @header('Location:form.php?page=success');
            else
                @header('Location:form.php?page=error');
            
            exit;
        }
    } elseif ($page === 'success') {
        echo '<div class="alert alert-success text-center" role="alert">Mesajınız başarılı bir şekilde gönderildi!</div>';
    } elseif($page === 'error') {
        echo '<div class="alert alert-danger text-center" role="alert">Mesajınız gönderilemedi!</div>';
    }
    
    ?>