Jump to content
Son zamanlarda artan kullanıcı hesap hırsızlıkları sebebiyle tüm kullanıcılara şifre sıfırlama maili gönderilmiştir. Lütfen güveli şifreler seçiniz. Mevcut e-mail adresinize erişemiyorsanız, en aşağıdaki destek linkinden bize ulaşınız. ×

Php Post Işlemi Sınırlama?


Recommended Posts

Arkadaşlar php post yapan kişinin 2 den fazla post yapmasını nasıl engelleyebilirim?

index.php

<form action="post.php" method="post">
What is your name:<br/>
<input type="text" name="names" /><br/>
<label>choose a surname:</label>
<select name="surname">
<option value="surname1" >Surname 1</option>
<option value="surname2" >Surname 2</option>
		</select>
		</p>
<input type="submit" value="Post" />
</form>

 

post.php

<html>
<head>
<title>PHP POST Method</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
if(isset($_POST['names']) && isset($_POST['surname'])) {
   $names = strip_tags($_POST['names']);
   $surname = strip_tags($_POST['surname']);
$ip = $_SERVER['REMOTE_ADDR']; 
$veriler = $names." - ".$surname." - ".$ip." - ".date("d.m.Y")."-".date("H:i:s")."\r\n";
$dosya_adi = "log.txt";

$logdosyam=file_get_contents("log.txt");
//if (!stristr($logdosyam, $ip)){ 
    $dosya = fopen ($dosya_adi , 'a');
    fwrite ($dosya , $veriler );
    fclose ($dosya);

	   if(empty($names) || empty($surname)) {
      echo 'Geçersiz karakter veya hiç bir veri girilmedi!';
   } else {
	  echo 'Ok<br>' . $names . ' <br> Kod: ' . $surname;
   }
} else {
   echo 'Birşeyler yanlış gitti!';
}
?>
</body>
</html>

 

Link to comment
Share on other sites

buttonun onclik evresine return true yapmak ya da butonu pasif yapmak 1. seçenek:

onclick="this.disabled=true; return true;"

ya da form içerisinde hidden bi checkbox ekleyip post.php de ya da formu gönderdiğin sayfada kontrol ettirmek 2. seçenek.

<input type="hidden" name="submitted" id="submitted" value="true" />
<input type="submit" name="submit" id="submit" value="Submit" onclick="checkSubmit(submitted.value);" />
<script language="javascript">
function checkSubmit(submittedValue)
{
     if(submittedValue)
     {
        //your code goes here......
        document.getElementByID("submitted").value=false;
     }
     else
       Alert("The page was already submitted!"); 
}
</script>

ya da 

<?php

	if not (isset($_POST['submitted'])){
		blabla...
	}
	
?>

 

  • Like 1
Link to comment
Share on other sites

@blackman12 senin bu yöntemin post işlemini 3 sorgu ile sınırlamak istesem işe yaramayacaktır sanırım,istediğim bu değil gibi :closedeyes: 

veya ben yanlış sordum,bir ip adresi günde en fazla 2 post yapabilsin 2.gün sıfırlansın tekrar post yapabilsin 

Edited by Mehmet
Link to comment
Share on other sites

bunun için mysql kullanman en mantıklısı. ip ve tarih şeklinde iki sütunu olan bir tablon olur, buraya post yapanların ip lerini ve post tarihlerini girersin.

SELECT COUNT(*) FROM users WHERE tarih='date("Y-m-d")'

sonucu 2 ise post yapmasına izin vermezsin. ya da 1 den büyükse, 2 den küçükse şeklinde koşulları değiştirebilirsin.

  • Like 2
Link to comment
Share on other sites

böylemi olmalı? :closedeyes:

<?php
include("config.php");//include veri tabanı bilgilerim
$ip = $_SERVER['REMOTE_ADDR'];
$tarih=date("Y-m-d");
if(isset($_POST['names']) && isset($_POST['surname'])) {
   $names = strip_tags($_POST['names']);
   $surname = strip_tags($_POST['surname']);
	   if(empty($names) || empty($surname)) {
      echo 'Geçersiz karakter veya hiç bir veri girilmedi!';
   }
   else {
   $sqlIPsor = mysql_query("SELECT COUNT(*) FROM user group by ipadres");
 //$sqlTariHsor = mysql_query(SELECT COUNT(*) FROM users WHERE tarih='date("Y-m-d")');
  if( mysql_num_rows($sqlIPsor) != 2 ){
$sqlekle = mysql_query("INSERT INTO users(ipadres,gun) VALUES (".$ip.",".$tarih.")") or die(mysql_error());
   }
} elseif {
   echo 'Kalan Post hakkınız 1';

} else {
   echo 'Bugün Kalan Post hakkınız bitti!';
}
?>

 

Link to comment
Share on other sites

blackman12 html5 storage gerekli bilgiler tarayıcı geçmişini temizleyince siliniyor ise pek bir işime yaramaz,kısaca kullanıcı tarafından silinmeyecek.

 

Edit:Veritabanına ip ve tarihi ekleyebildim fakat verileri koşullara göre ayarlayamadım vede kodları daha kısa tutmak istiyorum.

<?php
include("config.php");//include veri tabanı bilgilerim
$sayi1=1;
$sayi2=2;
$ip = $_SERVER['REMOTE_ADDR'];
$tarih=date("Y-m-d");
$sqlIPsor = mysql_query("SELECT COUNT(*) FROM tabloadim group by ipadres");
$sqlTariHsor = mysql_query("SELECT COUNT(*) FROM tabloadim group by gun");
if(isset($_POST['names']) && isset($_POST['surname'])) 
{
   $names = strip_tags($_POST['names']);
   $surname = strip_tags($_POST['surname']);
}
if(empty($names) || empty($surname)) {
      echo 'Geçersiz karakter veya hiç bir veri girilmedi!';
   }
      elseif( mysql_num_rows($sqlIPsor) < $sayi1 ){
	$sqlekle = mysql_query("INSERT INTO tabloadim(ipadres,gun) VALUES ('".$ip."','".$tarih."')") or die(mysql_error());   
   echo 'Kalan Post hakkınız 1';
	  }
	elseif( mysql_num_rows($sqlIPsor) < $sayi2 ){
  $sqlekle = mysql_query("INSERT INTO tabloadim(ipadres,gun) VALUES ('".$ip."','".$tarih."')") or die(mysql_error()); 
   echo '2.POST : Kalan Post hakkınız 0';
	}else{
	echo 'Kalan Post hakkınız 0';
    }
?>

 

Edited by Mehmet
Link to comment
Share on other sites

  • 3 hafta sonra ...

Post edilen sayfada ilk olarak kullanıcının o gün yaptığı post sayısını çek. Count 2 den fazla ise hiç formu gösterme bir alert göster. Post sayısını kontrol etmek için post etmene gerek yok zaten.

Link to comment
Share on other sites

  • 4 hafta sonra ...

Üstteki mantık hatalı (ya ofis ağındaysam?), en temizi session veya cookie aldırmak. Üyelik sistemi yoksa tabii...

Üyelik sistemi varsa da her postta ´cnt´ sütununu 1 arttırırsın, 2den büyükse uyarı mesajı :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...