• 29-05-2019, 18:28:32
    #1
    Merhaba, iletişim formu oluşturdum fakat gönder butonuna ard arda basınca birden fazla mail yolluyor bu sorunu nasıl çözebilirim ?

    iletisim.html
    <!doctype html>
    <html lang="tr">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Bootstrap CSS -->
    <script src="https://www.google.com/recaptcha/api.js?hl=tr"></script>
        <link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
    </head>
    <body>
    
    <!-- Bootstrap Responsive İletişim Formu Start *** -->
    <br /> <!-- Bir satır boşluk -->
    <h1 style="text-align:center;">İletişim Formu</h1> <!-- Form başlığı -->
    <br /> <!-- Bir satır boşluk -->
    <div class="container-fluid">
    <div class="row">
    <div class="col-md-4"></div> <!-- 4 sütun Sol Tarafa Boş Verdik -->
    <div class="col-md-4"> <!-- 4 Sütun Ortaladık Başlangıcı -->
    
    <form action="gonder.php" method="post"> <!-- Form Başlangıcı -->
    
    <div class="form-group"> <!-- Ad Soyad Text Alanı -->
    <input required="required" name="AdiSoyadi" type="text" class="form-control" placeholder="Adınız ve Soyadınız">
    <small class="form-text text-muted">Lütfen adınızı ve soyadınızı girin.</small>
    </div> <!-- Ad Soyad Text Alanı Bitti -->
    
    <div class="form-group"> <!-- Mail Adresi Text Alanı -->
    <input required="required" name="MailAdresi" type="email" class="form-control" placeholder="E-Posta Adresiniz">
    <small class="form-text text-muted">Lütfen mail adresinizi girin.</small>
    </div> <!-- Mail Adresi Text Alanı Bitti -->
    
    <div class="form-group"> <!-- Mesaj Konusu Text Alanı -->
    <input required="required" name="MesajKonusu" type="text" class="form-control" placeholder="Mesajınızın Konusu">
    <small class="form-text text-muted">Lütfen mesajınızın konusunu girin.</small>
    </div> <!-- Mesaj Konusu Text Alanı Bitti -->
    
    <div class="form-group"> <!-- Mesaj Text Alanı -->
    <textarea rows="6" cols="10" name="Mesaj" required="required" class="form-control" placeholder="Mesajınızını Yazın"></textarea>
    </div> <!-- Mesaj Text Alanı Bitti -->
                        <div class="form-group">
                         <div class="g-recaptcha" data-sitekey="KEY"></div>
                        </div>
                                
    
                        <button type="submit" class="btn btn-primary">Gönder</button> <!-- Form Gönderme Butonu -->
    <button type="reset" class="btn btn-success">Temizle</button> <!-- Form Temizleme Butonu -->
    
    
    </form> <!-- Form Bitiş -->
    
    </div> <!-- 6 Sütun Ortaladık Tamamlandı -->
    <div class="col-md-4"></div> <!-- 4 sütun Sol Tarafa Boş Verdik -->
    </div>
    </div>
    <!-- Bootstrap Responsive İletişim Formu End *** -->
    
    </body>
    </html>

    gonder.php
    <?php
    error_reporting(0); //Hataları Gizle
    //Form'dan Bütün Değerler Post Methodu ile Çekiliyor
    $AdiSoyadi = trim(strip_tags($_POST['AdiSoyadi']));
    $MailAdresi = trim(strip_tags($_POST['MailAdresi']));
    $MesajKonusu = trim(strip_tags($_POST['MesajKonusu']));
    $Mesaj = trim(strip_tags($_POST['Mesaj']));
    
    
    if($AdiSoyadi and $MailAdresi and $MesajKonusu and $Mesaj){
    
    //Php Smtp Mailler Sınıfını Sayfaya Dahil Ediyoruz
    include ('phpmail/class.phpmailer.php');
    include ('phpmail/class.smtp.php');
    //Php Smtp Mailler Sınıfını Sayfaya Dahil Ediyoruz Tamamlandı
    
    //Mail Bağlantı Ayarları
    //Mail Hangi Hesaptan Gönderilecek ise onun bilgilerini yazın.
    $MailSmtpHost = "smtp.gmail.com";
    $MailUserName = "deneme@gmail.com";
    $MailPassword = "deneme";
    //Mail Bağlantı Ayarları Tamamlandı
    
    //Doldurulan Form Mail Olarak Kime Gidecek?
    $MailKimeGidecek = "deneme@gmail.com";
    //Doldurulan Form Mail Olarak Kime Gidecek Tamamlandı
    
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = $MailSmtpHost; //Smtp Host
    $mail->SMTPSecure = 'tls'; //yada tls
    $mail->Port = 587; //SSL kullanacaksanız portu 465 olarak değiştiriniz - TLS Portu 587
    $mail->Username = $MailUserName; //Smtp Kullanıcı Adı
    $mail->Password = $MailPassword; //Smtp Parola
    $mail->SetFrom($mail->Username, 'İletişim');
    $mail->AddAddress("$MailKimeGidecek", 'Mehmet Türkan'); //Mailin Gideceği Adres ve Alıcı Adı
    $mail->CharSet = 'UTF-8'; //Mail Karakter Seti
    $mail->Subject = $MesajKonusu; //Mail Konu Başlığı
    $mail->MsgHTML("Ad: "."$AdiSoyadi". "<br />" ."E-Posta: "."$MailAdresi". "<br />" ."Mesaj: "."$Mesaj"); //Mail Mesaj İçeriği
        
        if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
        }
        
        if (!$captcha) {
    echo     '<script>alert("Lütfen robot olmadığınızı doğrulayın.");</script>';
    exit;
        }
        
         if($mail->Send()) {
        $kontrol = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKODU&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
        if ($kontrol.success == false) {
        echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
        }
        else {
        echo '<script>alert("Mail gönderildi!");</script>';
        header("Refresh: 0;");
        }
         }
    }
    
    ?>
  • 29-05-2019, 18:37:38
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba formda bir token oluşturabilirsin bunu session'a atayıp kontrol edebilirsin böylece spam yapılmaz. token'i hidden input ile gizleyip gonder.php de kontrol edebilirsin.
  • 29-05-2019, 20:09:23
    #3
    Mavicap adlı üyeden alıntı: mesajı görüntüle
    Merhaba formda bir token oluşturabilirsin bunu session'a atayıp kontrol edebilirsin böylece spam yapılmaz. token'i hidden input ile gizleyip gonder.php de kontrol edebilirsin.
    başka bir öneriniz var mı ?
  • 29-05-2019, 20:29:36
    #4
    memobeyle adlı üyeden alıntı: mesajı görüntüle
    başka bir öneriniz var mı ?
    Google Captcha kullanabilirsiniz reCaptcha bu da bir çözüm böylece spam yapılmaz.
  • 29-05-2019, 20:32:16
    #5
    Mavicap adlı üyeden alıntı: mesajı görüntüle
    Google Captcha kullanabilirsiniz reCaptcha bu da bir çözüm böylece spam yapılmaz.
    reCapthcha kullanıyorum kodlara tekrar bakarsanız gönder butonuna ard arda basınca birden çok mail yolluyor nerede hata var ?
  • 29-05-2019, 20:38:47
    #6
    memobeyle adlı üyeden alıntı: mesajı görüntüle
    reCapthcha kullanıyorum kodlara tekrar bakarsanız gönder butonuna ard arda basınca birden çok mail yolluyor nerede hata var ?
    Şimdi tekrar inceledim

     if($mail->Send()) {
    $kontrol = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKODU&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
    if ($kontrol.success == false) {
    echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
    }
    else {
    echo '<script>alert("Mail gönderildi!");</script>';
    header("Refresh: 0;");
    }
    bu kısımda if( $mail->Send() ) derseniz zaten maili gönderecektir önce if ($kontrol.success == false) kontrolünü yapıp daha sonra herşey okeyse ondan sonra $mail->Send() denemeniz gerekmektedir.
  • 29-05-2019, 20:53:46
    #7
    Mavicap adlı üyeden alıntı: mesajı görüntüle
    Şimdi tekrar inceledim

     if($mail->Send()) {
    $kontrol = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKODU&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
    if ($kontrol.success == false) {
    echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
    }
    else {
    echo '<script>alert("Mail gönderildi!");</script>';
    header("Refresh: 0;");
    }
    bu kısımda if( $mail->Send() ) derseniz zaten maili gönderecektir önce if ($kontrol.success == false) kontrolünü yapıp daha sonra herşey okeyse ondan sonra $mail->Send() denemeniz gerekmektedir.
    if ($kontrol.success == false) {
    echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
    }
    else {
    if($mail->Send()) {
    
    echo '<script>alert("Mail gönderildi!");</script>';
    header("Refresh: 0;");
    }
    }

    böyle yaptım fakat yine aynı
  • 29-05-2019, 21:07:58
    #8
    memobeyle adlı üyeden alıntı: mesajı görüntüle
    if ($kontrol.success == false) {
    echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
    }
    else {
    if($mail->Send()) {
    
    echo '<script>alert("Mail gönderildi!");</script>';
    header("Refresh: 0;");
    }
    }
    böyle yaptım fakat yine aynı
    Şuan test etme imkanım yok kodu fakat

    dosyanızın başına session_start(); ekleyip

    $token = sha1(mt_rand(1, 90000) . 'SALT');
    $_SESSION["token"] = $token;

    <input type="hidden" value="<?= $token ?>" name="token">

    ekleyip formunuza daha sonra gonder.php de

    if($_SESSION["token"] == $_POST["token"]) kontrolü yaptıktan sonra işlemleri yapın mail ayarları vs hepsini bu doğruluktan sonra yapın.
  • 29-05-2019, 23:44:06
    #9
    butona tıklanıldıgı andan itibaren zorunlu input alanlarından birinin içeriğini sil böylelikle 1. gönderim için tıklanıldıgı anda inputu sileceği için 2. tıklanışta gönderim yapmayacaktır