След рефреш на страницата

pacul88

Registered
Имам следния проблем,оравя една система за поздрави всичко си е ОК но има следния бъг.След като изпратя поздрава си се записва в БД и ми изкарва съпбщението че съм ограничрн за 10 минм,но вапреки това като дам рефреш да проверя дали крие формата след изпратен поздрав постоянно ми добавя поздрвави в БД. В смисал на фсеки рефреш добавя поздрав и незнам как да го оправя. Моля ако някои мойе да помогне. Еето ви всички файлове:

Index.php
Код:
<?php
include 'function.php';
include 'sqldefence.php';

$ip_address = $_SERVER["REMOTE_ADDR"];
if ($_POST['form_submit']==1) {
$from = addslashes($_POST['from']);
$send = addslashes($_POST['send']);
$song = addslashes($_POST['song']);
$greeting = addslashes($_POST['greeting']);
$ip_client = $_SERVER["REMOTE_ADDR"];
mysql_query("INSERT INTO `pozdravi`(`id`, `from`, `send`, `song`, `greeting`, `ip_client`) 
 VALUES ('NULL','$from','$send','$song','$greeting', '$ip_client')");
echo "Успешно добавен поздрав!";
}

$row = mysql_query("select * from pozdravi where ip_client = '$ip_address' 
AND pz_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)");
if (@mysql_num_rows($row) > 0) 
{
    echo '<table width="800" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><table width="650" height="450" border="0" align="center" cellpadding="0" cellspacing="0" class="fon">
        <tr>
          <td valign="top" class="sad"><form name="form1" method="post" action="index.php"><table width="450" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="35" height="191"> </td>
              <td colspan="2" valign="bottom"><div align="center"><strong>Поздрави се пишат веднъж на 10 минути (не по-малко).<br>
                Поздравите НЕ трябва да съдържат цинизми!<br>
                Поздравите трябва да бъдат кратки и ясни!</strong></div></td>
            </tr>
            <tr>
              <td> </td>
              <td> </td>
              <td> </td>
            </tr>
            <tr>
              <td> </td>
              <td colspan="2"><div align="center" class="style1"><span class="style2">Поздрава е изпратен успешно!</span></div></td>
              </tr>
            <tr>
              <td> </td>
              <td> </td>
              <td> </td>
            </tr>
            <tr>
              <td height="60"> </td>
              <td colspan="2"><div align="center" class="style1">Нов поздрав ще може да изпратите след 10 минути!<br />
			  </div></td>
              </tr>
            <tr>
              <td> </td>
              <td> </td>
              <td> </td>
            </tr>
            <tr>
              <td> </td>
              <td> </td>
              <td> </td>
            </tr>            <tr>
              <td height="30"> </td>
              <td colspan="2"> </td>
            </tr>
            <tr>
              <td> </td>
              <td colspan="2"></td>
            </tr>
          </table>
          </form>
          </td>
        </tr>
    </table><br>
    <div align="center"><a href="http://www.aleksandrina.net" title="Радио Александрина" target="_blank" style="text-decoration: none"><font color="#999999">Радио Александрина</font></a>
</div>
</td>
  </tr>
</table>';
}



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Радио Александрина - Пусни поздрав</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">

</style>
<script type="text/javascript">

var refreshCheck= Number(window.location.search.slice(1));
if (refreshCheck == 1 ) {
window.location.href = window.location.substring(0, window.location.length-2);
}
</script>
</head>

<body>
<table width="800" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><table width="650" height="450" border="0" align="center" cellpadding="0" cellspacing="0" class="fon">
<tr>
<td valign="top" class="sad"><form name="form1" method="post" action="index.php"><table width="450" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="35" height="191"> </td>
<td colspan="2" valign="bottom"><div align="center"><strong>Поздрави се пишат веднъж на 10 минути (не по-малко).<br>
Поздравите НЕ трябва да съдържат цинизми!<br>
Поздравите трябва да бъдат кратки и ясни!</strong></div></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td colspan="2"><div align="center" class="style1">Всички полета са задължителни!</div></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td width="120"><div align="right"><strong><span class="style1">*</span> От кого: </strong></div></td>
<td width="295"><label>
<input type="text" name="from" id="ot">
</label></td>
</tr>
<tr>
<td> </td>
<td width="120"><div align="right"><strong><span class="style1">*</span> За кого: </strong></div></td>
<td width="295"><label>
<input type="text" name="send" id="za">
</label></td>
</tr>
<tr>
<td> </td>
<td><div align="right"><strong><span class="style1">*</span> Избрана песен: </strong></div></td>
<td><label>
        <input type="text" name="song" class="style1">
</label></td>
</tr>
<tr>
<td> </td>
<td><div align="right"><strong><span class="style1">*</span> Поздрав за: </strong></div></td>
<td><label>
<textarea name="greeting" id="pozdrav"></textarea>
</label></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><label>
<input type="hidden" name="form_submit" value="1" />
<input name="Пусни поздрав" type="submit" id="button" onClick="MM_validateForm('ot','','R','za','','R','pozdrav','','R');return document.MM_returnValue" value="Изпрати поздрава">
</label></td>
</tr> 
<tr>
<td height="30"> </td>
<td colspan="2"> </td>
</tr>
<tr>
<td> </td>
<td colspan="2"></td>
</tr>
</table>
</form>
</td>
</tr>
</table><br>
<div align="center"><a href="http://www.aleksandrina.net" title="Радио Александрина" target="_blank" style="text-decoration: none"><font color="#999999">Радио Александрина</font></a>
</div>
<div align="center">
</div>
</td>
</tr>
</table>
</body>
</html>

function.php
Код:
<?php
include 'sqldefence.php';
$user = "root";
$pass = "asddd";
$db = "pz_alex";
$host = "localhost";
$connection = mysql_connect($host, $user, $pass) or die("Сайтът не може да се свърже към базата данни1");
$db = mysql_select_db($db, $connection) or die("Сайтът не може да се свърже към базата данни2");
$chars = "set character set utf8";
mysql_query($chars);
?>

sqldefence.php
Код:
<?php
$queryString = strtolower($_SERVER['QUERY_STRING']);
if (strstr($queryString,"<") OR strstr($queryString,">") OR strstr($queryString,"(") OR strstr($queryString,")") OR
strstr($queryString,"..") OR
strstr($queryString,"%") OR
strstr($queryString,"*") OR
strstr($queryString,"+") OR
strstr($queryString,"!") OR
strstr($queryString,"-1") OR
strstr($queryString,"--") OR
strstr($queryString,"UNION") OR
strstr($queryString,"DROP") OR
strstr($queryString,"@")) {
$loc = $_SERVER['PHP_SELF'];
$ip = $_SERVER['REMOTE_ADDR'];
$date = date ("d-m-Y @ h:i:s");
$lfh = "./loged.txt";
$log = fopen ( $lfh,"a+" );
fputs ($log, "Attack Date: $date | Attacker IP: $ip | QueryString: $loc?=$queryString\n");
fclose($log);

//htaccess banned
//$htacc = ".htaccess";
//$ban_htaccess = fopen ($htacc, "a+");
//fputs ($ban_htaccess, "deny from $ip\n");
//fclose ($ban_htaccess);
//close

echo "<center>Вашата атака е деактивирана и записана успешно!<br />
<h1>$ip</h1><center>";
$moeto_ip = $_SERVER['REMOTE_ADDR'];
$reason = "Опит за хакване";
$time = time();//timestamp
$izticha = $time+(3*604800);//изчисляваме до кога ще е валиден бан-а
$vid = 1;
mysql_query("INSERT INTO `bans` (ip, reason, slojen, izticha, vid) VALUES('$moeto_ip','$reason', '$time','$izticha','$vid')");
die();
}
?>

emptytable.php
Код:
<?php

include 'function.php';

$temptable = $_POST['temptable'];
$query = "truncate table $temptable";
if (mysql_query($query)) {
    echo "table empty";
} 
else {
    echo "fail";
}
    header('Location: index.php');
    exit;

?>
 
Това не е бъг а e очакван резултат. При рефреш, формуляра се изпраща отново, защото си на същата страница.

За да не се добавя нов запис, или трябва да пренасочиш към друга страница, която казва, че поздрава е добавен успешно, или можеш да пренасочиш към същата страница, като сложиш някакъв флаг за успешно добавен запис.

Промени:
PHP:
echo "Успешно добавен поздрав!";

на:
PHP:
header('location: index.php?success=1');
exit();

Така потребителя отново ще отиде на началната страница, но този пък имаш една променлива, която на теб ти указва, че поздрава е добавен успешно. Трябва само да направиш проверка и да покажеш съобщението, например:

PHP:
<?php 
include 'function.php'; 
include 'sqldefence.php'; 

if($_GET['success'] == 1){
   echo "Поздрава е добавен успешно!";
}

Сега при рефреш, единствено ще се появава съобщението, че поздрава е добавен, но той няма да бъде добавян към базата данни.

Ако не искаш потребителя да вижда нищо в address bar, и не искаш съобщението да се показва при рефреш, направи го със сесии, но се забравяй след като покажеш съобщението, да изтриеш стойността от сесията:

PHP:
session_start();

//след добавяне на поздрав в базата данни:
$_SESSION['success'] = 1;
header('location: index.php');
exit();

//след като се е презаредила страницата отново:
if(isset($_SESSION['success']) && $_SESSION['success'] == 1){
   $_SESSION['success'] = 0;
   echo "Поздрава е добавен успешно!";
}
 

Back
Горе