Проблем с рефрешването и изпращане на форма

leghorn

Registered
Здравейте ,
имам следния проблем при презареждане на форма (sec.php) която изпраща инфото до БД тя се записва повторно след всеки рефреш на sec.php. Ще съм благодарен ако ми помогните и обясните (от тия дни започнах с php) от къде идва проблема. Благодаря

index.php
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="../../style.css" rel="stylesheet" type="text/css" />

<body>

<form action="sec.php" name="fform" onsubmit="return validate();" method="post">
Име: <input type="text" name="fname" maxlength="30" /><br>
Фамилия: <input type="text" name="lname" maxlength="30" /><br>
Години: <input type="text" name="age" maxlength="2" /><br>
Вашата кола е марка:<br>
<input type="radio" name="car" value="Seat" />Сеат<br>
<input type="radio" name="car" value="Fiat" />Фиат<br>
Стил музика: <select name="music">
<option name="music" value="Rock">Рок</option>
<option name="music" value="Retro">Ретро</option>
<option name="music" value="Techno">Техно</option>
</select><br>
Любим отбор:<br>
<input type="radio" name="team" value="CSKA" />ЦСКА<br>
<input type="radio" name="team" value="Levski" />Левски<br>
<p>Коментар:</p> <textarea type="text" rows="5" maxlength="50" cols="20" name="comment" ></textarea><br><br>

<input class="submit" border="0" type="submit" value="Добавяне!" />
</form>



<?php

// Импортиране на таблицата от ДБ
include("data.php");

	echo "<br>";

?>
</body>
</html>


sec.php

Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="../../style.css" rel="stylesheet" type="text/css" />
</head>
<body>

<?php
include("db.php");

// Инпортиране на информацията в БД
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$music = $_POST['music'];
$team = $_POST['team'];

mysql_query("INSERT INTO info 
(fname, lname, age, car, music, team, comment) VALUES ('".$fname."', '".$lname."', '".$age."', '".$car."', '".$music."', '".$team."', '".$comment."') ") 
or die(mysql_error()); 

// Импортиране на таблицата от ДБ
include("data.php");


echo "Добавено!<br><br>";

?>

</body>
</html>
 
Здравей,
проблем няма, това което си описъл е съвсем нормално. Натискайки бутона "Добавяне", твоя браузър изпраща информацията от формуляра към sec.php чрез POST метод, което казано по друг начин означава, че потребителя е поискал да види sec.php след като изпрати някаква информация чрез POST.

Сървъра си се свършил работата и е показал съобщението.

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

Ако не искаш това да се случи, в sec.php, след като сървъра си е свършил работата, трябва да пренасочиш потребителя към друга страница, примерно обратно към index.php - тогава и да направиш рефреш, последната заявка на браузъра е била към index.php и ще се рефрешне index.php, а не sec.php

sec.php - вместо

echo "Добавено!<br><br>";

сложи

header("location: index.php");

но махни всичкия HTML код от sec.php - той не ти е нужен и ще създаде проблем - няма да е възможно да се изпълни пренасочването към index.php

Ако трябва да покажеш някакво съобщение, например, че записа е добавен успешно, можеш да сложиш един GET параметър при пренасочването, или пък в сесията, и да проверяваш после в index.php

sec.php:
header("location: index.php?success=1");

index.php:
if($_GET['success'] == 1){
echo "Добавено успешно";
}


Необходимо ли е да имаш два отделни файла? Можеш да събмитваш към същия файл, да си записваш информацията и после да пренасочваш към себе си. Би могло доста да се пипне по целия процес, но след като само от няколко дни се занимаваш с РНР - продължавай, на прав път си!
 

Back
Горе