• 17-01-2013, 16:41:17
    #1
    Merhaba.

    Bir mail gönderme sayfası var. Buradan form doldurulunca gonder.php dosyasına yönlendiriliyor ve mail gönderiliyor. Bu sayfada mail gönderildi yazısı çıkıyor ve tekrar mail gönderme formuna yönlendiriliyor. Ancak geri tuşuna basınca gönderildi yazısı tekrar çıkıyor ve bu sayfada iken f5 yapılınca mail tekrar gönderiliyor. Bu durumu nasıl engelleyebilirim. Umarım anlatabilmişimdir.

    Teşekkürler.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:41:17 -->-> Daha önceki mesaj 16:40:41 --

    kod yazarak bilgi verirseniz sevinirim.
  • 17-01-2013, 16:53:31
    #2
    genel bir problemdir.

    En basit çözümler :
    1. POST işleminin sonunda header fonksiyonu ile başka bir sayfaya yönlendirmek.
    2. SESSION ile POST edip etmediğini öğrenmek.
  • 17-01-2013, 17:07:05
    #3
    header fonksiyonu ile yönlendirme yaparken aşağıdaki gibi hata veriyor.
    Warning: Cannot modify header information - headers already sent by (output started at /home/poemsclu/public_html/

    kullanılan kod örneği:

    <?
    ob_start();
    header("Location: foo.php");
    ob_end_flush();
    ?>
  • 17-01-2013, 18:03:18
    #4
    asilonline adlı üyeden alıntı: mesajı görüntüle
    header fonksiyonu ile yönlendirme yaparken aşağıdaki gibi hata veriyor.
    Warning: Cannot modify header information - headers already sent by (output started at /home/poemsclu/public_html/

    kullanılan kod örneği:

    <?
    ob_start();
    header("Location: foo.php");
    ob_end_flush();
    ?>
    Kodda bir sorun görünmüyor. Kodlamanızı UTF-8(BOM)'suz olarak kodlamayı deneyin.
  • 17-01-2013, 18:38:25
    #5
    forma güvenlik kodu eklerseniz sorun kalkacaktır...
  • 17-01-2013, 21:05:37
    #6
    hep headers already sent hatası verdi durdu. Şu şekilde halloldu.

    <?php
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=xxxx">'
    ?>

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 21:05:37 -->-> Daha önceki mesaj 20:52:12 --

    Ama post sayfasına yönlenip mail gönderilip başka sayfaya yönlendirilmeden önce çok hızlı bir şekilde f5 ve enter yapıldığı zaman onlarca mail gönderiyor. Sayfa yenilemeyi engellemek gerekiyor. Fikri olan.
  • 17-01-2013, 22:22:46
    #7
    session ya da üst mesajda bulunan güvenlik resmi bu ve benzeri şeyler formun F5 ile tekrar gönderilmesini engelleyecektir.

    Bir başka çözüm formu javascript ile göndermektir. Yani akıl ve zekalı koddan kaçamaz F5.
  • 18-01-2013, 08:39:49
    #8
    Kullandığım form sayfası şu. Dosya ismi de mail.php diyelim.

    <?php
    echo
    '
    <form name="contactform" id="contactform" action="contact.php" method="POST" >
    <table width="500" border="0" align="center" cellpadding="2" cellspacing="2">
      <tr>
        <td width="100"><b>Your Name</b></td>
        <td width="5" class="td"><b>:</b></td>
        <td width="350"><input type=text name="name" size="30" maxlength="30"></td>
      </tr>
      <tr>
    	<td width="100"><b>Your Email</b></td>
        <td width="5" class="td"><b>:</b></td>
        <td width="350"><input type=text name="eemail" size="30" maxlength="30"> </td>
      </tr>
      <tr>
        <td width="100"><b>Subject</b></td>
        <td width="5" class="td"><b>:</b></td>
        <td width="350"><input type=text name="subject" size="30" maxlength="30"> </td>
      </tr>
       <tr>
        <td width="100"><b>Your Message</b></td>
        <td width="5" class="td"><b>:</b></td>
        <td width="350" class="td"><textarea name="comments" id="comments" maxlength="1024" style="width:300" rows=10 cols="55" class=inputs></textarea></td>
      </tr>
      <tr>
        <td colspan=2 class="td"> </td>
        <td width="350" class="td"><input type=submit value="   Send   " id="submitbutton" class=inputs> <input type="reset" value="   Clear   " class="inputs"></td>
      </tr>
     </table></form>
    ';
    ?>
    Doldurulan form contact.php ye gönderiliyor ve oradan mail gönderiliyor. Kod da şu;

    <?php
    $your_email = "xxxxxx";
    $your_smtp = "xxxxx";
    $your_smtp_user = "xxxxxx";
    $your_smtp_pass = "xxxxxxxx";
    $your_website = "xxxxxxxx";
    
    
    require("mail-smtp/phpmailer/class.phpmailer.php");
    
    
    //function to check properly formed email address
    function isEmailValid($email)
    {
      // checks proper syntax
      if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email))
      {
        return false;
      } 
      
      return true;
      
    }
    
    
    //get contact form details
    $name = $_POST['name'];
    $email = $_POST['eemail'];
    $subject = $_POST['subject'];
    $comments = $_POST['comments'];
    
    
    //validate email address, if it is invalid, then returns error
    
    if (!isEmailValid($email)) {
    	die('Invalid Email Address');
    }
    
    //start phpmailer code 
    
    $ip = $_SERVER["REMOTE_ADDR"];
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
    
    
    $response="Date: " . date("d F, Y h:i:s A",time()+ 16 * 3600 - 600) ."\n" . "IP Address: $ip\nUser-agent:$user_agent\nEmail: $email\nName: $name\nSubject: $subject\nContents:\n$comments\n";
    //mail("info@mypapit.net","Contact form fakapster",$response, $headers);
    
    $mail = new PHPmailer();
    $mail->SetLanguage("en", "mail-smtp/phpmailer/language");
    $mail->From = $your_email;
    $mail->FromName = "Mail";
    $mail->Host = $your_smtp;
    $mail->Mailer   = "smtp";
    $mail->Password = $your_smtp_pass;
    $mail->Username = $your_smtp_user;
    $mail->CharSet  ="utf-8"; 
    $mail->Subject = "Mail Gönderildi";
    $mail->SMTPAuth  =  "true";
    
    $mail->Body = $response;
    $mail->AddAddress($your_email,"$your_website Admin");
    $mail->AddReplyTo($email,$name);
    
    
    if (!$mail->Send()) {
    echo "<p>There was an error in sending mail, please try again at a later time</p>";
    echo "<p>".$mail->ErrorInfo."</p>";
    } else {
    	;		
    }
    
    $mail->ClearAddresses();
    $mail->ClearAttachments();
    ?>
    
    <?php
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=xxxx./mail.php">'
    ?>
    Mail gönderilince sayfa yönlenmeden hemen f5 ve enter yapıldığında tekrar mail gönderiliyor. Sürekli basılırsa yüzlerce hatta binlerce gönderecek. Bu durum hem sunucuya zarar verir, hemde sunucudan hotmaile mail yönlendirdim, banlanmaya sebep olacak. Bu kodlara kesin çözüm uygulayabilir misiniz? Şu session olayını vs. Resimli güvenlik kodu doğrulaması koyulsa ilk forma koyulacak, sorun ikinci dosyada zaten. Bu arada ilk formda 15 saniye süreli zaman sayacı kullanıyorum. Gönder butonu 15 saniyede aktif oluyor.

    TEŞEKKÜRLER.
  • 22-01-2013, 01:08:14
    #9
    ilk forma güvenlik kontrolu koyulup ikinci formda kontrol ettirilcek ona göre gönderilcek.

    ilk forma eklenecek şey
    <input type="text" name="guvenlik_kodu" /><img id="captcha" src="securimage/securimage_show.php" alt="Güvenlik Kodu" />
    <a href="#" onclick="document.getElementById('captcha').src = 'securimage/securimage_show.php?' + Math.random(); return false">Resmi Tazele</a>
    ikinci forma
    include_once("securimage/securimage.php");
    $securimage = new Securimage();
    
    // Gonderilen guvenlik kodu yanlışsa yapılacak olan işlem
    if ($securimage->check($_POST['guvenlik_kodu']) == false) {
      die('<br /><br /><br /><center>GİRDİĞİNİZ GUVENLİK KODU YANLISTIR!LUTFEN GERİ GİDİP TEKRAR DENEYİNİZ!<br /><br /><input type="button" value="Geri Git!" onClick="javascript:history.go(-1)" /></center>');
    }