• 11-09-2012, 04:36:50
    #1
    Girilmesi zorunlu alanları olan ve basit matematik sorusu içeren bir iletişim sayfası şablonu hazırladım. Ancak bir noktada takıldım. Her şey doğru gibi görünse de cevap ile girilen sayı eşleşmiyor. Sebebini bulmamda yardımcı olursanız sevinirim.

    Şablon şu şekilde:

    <?php
    /*
    Template Name: İletişim
    */
    
    // Güvenlik
    
    	$sayi1 = rand(1,10);
    	$sayi2 = rand(1,10);
    	$cevap = (string)($sayi1+$sayi2);
    	$spam_kontrol = $_POST['spam-kontrol'];
    
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['gonder'] ) && $_POST['gonder'] == '1' ) {
    
    	if ( $_POST['isminiz'] && $_POST['eposta'] && $_POST['konu'] && $_POST['mesaj'] ) {
    	
    		if ( !$_POST['isminiz'] ) {
    			$error = 'Adınızı girmelisiniz.';
    		} elseif ( !$_POST['eposta'] || !preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['eposta'])) ) {
    			$error = 'Geçerli bir e-posta adresi girmelisiniz.';
    		} elseif ( !$_POST['konu'] ) {
    			$error = 'Konu başlığını girmelisiniz.';
    		} elseif ( !$_POST['mesaj'] ) {
    			$error = 'Mesaj alanı boş bırakılamaz.';
    		} elseif ( empty($spam_kontrol) ) {
    			$error = 'Spam kontrolünden geçmek için soruyu cevaplamalısınız.';
    		} elseif ( !empty($spam_kontrol) ) {
    			if ( $spam_kontrol === $cevap ) {
    		
    			$isim = trim($_POST['isminiz']);
    			$eposta = trim($_POST['eposta']);
    			$konu = trim($_POST['konu']);
    			$mesaj = trim($_POST['mesaj']);
    			$gonderilecek_eposta = get_option('admin_email');
    			
    				$email_konu = '[ILETISIM FORMU] : ' . $isim . '';
    				
    				$headers = "From: ".$isim."<".$gonderilecek_eposta.">\r\n";
    				$headers .= "Reply-To: ".$konu."<".$eposta.">";
    
    				$govde = "İletişim formu aracılığıyla size bir e-posta gönderildi. \n\n";
    				$govde .= "Gönderen: ".$isim."\n\n";
    				$govde .= "E-posta: ".$eposta."\n\n";
    				$govde .= "Konu: ".$konu."\n\n";
    				$govde .= "Mesaj: ".$mesaj."\n\n";
    
    				$wp_posta = wp_mail($gonderilecek_eposta, $email_konu, $govde, $headers);
    				$emailSent = true;
    				$basarili = "Mesajınız yöneticiye ulaşmıştır. İlginiz için teşekkür ederiz.";
    			
    			} else {
    				$error = 'Spam kontrolünden geçmek için soruyu doğru cevaplamalısınız.';
    
    			}
    		}
    
    	} else {
    		$error = 'Tanımlanamayan bir hata oluştu.';
    	}
    	
    }
    
    get_header(); ?>
    
    <div id="sol-icerik">
    
    	<div class="icerik-kapsayici">
    		<div class="yazi-icerigi">
    		
    			<h1 class="yazi-basligi-ozel"><?php the_title(); ?></h1>
    			<?php the_content(); ?>
    			
    			<p>
    				Zorunlu alanlar (<span class="filtre-renkli">*</span>) ile işaretlenmiştir.
    			</p>
    			
    					<?php if ( $wp_posta ) : ?>
    						<div class="filtre-renkli yaz-ort">
    							<p>
    								<strong>
    									<?php echo $basarili; ?>
    								</strong>
    							</p>
    						</div>
    					<?php endif; ?>
    			
    					<?php if ( $error ) : ?>
    						<div class="filtre-renkli yaz-ort">
    							<p>
    								<strong>
    									<?php echo $error; ?>
    								</strong>
    							</p>
    						</div>
    					<?php endif; ?>
    			
    			<form action="<?php the_permalink(); ?>" method="post">
    			
    				<div class="hesabim-input-baslik">
    					<label for="isminiz">İsminiz <span class="filtre-renkli">*</span></label>
    					<input name="isminiz" id="isminiz" type="text" class="mekan-input" value="<?php echo htmlspecialchars_decode( $_POST['isminiz'] ); ?>" alt="Adını giriniz"/>
    				</div>
    
    				<div class="hesabim-input-baslik">
    					<label for="eposta">E-posta <span class="filtre-renkli">*</span></label>
    					<input name="eposta" id="eposta" type="text" class="mekan-input" value="<?php echo htmlspecialchars_decode( $_POST['eposta'] ); ?>" alt="E-posta adresinizi giriniz"/>
    				</div>
    				
    				<div class="hesabim-input-baslik">
    					<label for="konu">Konu <span class="filtre-renkli">*</span></label>
    					<input name="konu" id="konu" type="text" class="mekan-input" value="<?php echo htmlspecialchars_decode( $_POST['konu'] ); ?>" alt="Konu başlığını giriniz (<em>Premium üyelik</em> vs)"/>
    				</div>
    				
    				<div class="hesabim-input-baslik">
    					<label for="mesaj" class="yandan-carkli" title="İletişime geçme sebebinizin ayrıntılarını giriniz">Mesaj <span class="filtre-renkli">*</span></label>
    						<div class="mekan-textara"></div>
    					<textarea name="mesaj" id="mesaj" rows="15"><?php echo htmlspecialchars_decode( $_POST['mesaj'] ); ?></textarea>
    				</div>
    				
    				<div class="hesabim-input-baslik">
    					<label for="spam-kontrol" style="display:block">Spam Kontrol <span class="filtre-renkli">*</span></label>
    					<input class="hesabim-input-kucuk" name="spam-kontrol" type="text" id="spam-kontrol" value="" style="display:inline" /><span class="filtre-renksiz" style="display:inline; margin-left:5px;"><?php echo $sayi1 . ' + ' . $sayi2 . ' = ?'; ?></span>
    				</div>
    				
    				<div class="temizle"></div>
    				<p>
    					<input type="hidden" name="gonder" value="1" id="gonder">
    					<input type="submit" class="kirmizi-button saga-yasla" value="Gönder" style="margin-left:5px;" /><input type="reset" class="sari-button saga-yasla" value="Temizle" />
    				</p>
    				<div class="temizle"></div>
    				
    			</form>
    
    		</div>
    	</div>
    </div>
    			
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Eğer spam kontrol inputu boş ise doğru hatayı alıyorum ancak, sorunun cevabını doğru girince de yanlış girince de eşleşmedi hatası geliyor?
  • 11-09-2012, 05:20:05
    #2
    Üyeliği durduruldu
    Kullanıcının yazdığı toplam aslında görünenlerin toplamı ile değilde bir sonraki oluşan toplamla eşleşiyor bu yüzden yanlış diyor, sorun burda anladığım kadarıyla. En basit çözüm olarak doğrulama işlemini farklı bir dosyada yapmanız sorunu çözecektir
  • 11-09-2012, 05:49:12
    #3
    Teşekkürler. Sorun dediğiniz gibi. Biraz basite kaçtım ve hidden input value ile eşleştirdim. Ancak botlar için dediğiniz gibi harici dosya kullanmak daha mantıklı sanırım.