我生命中最艰难的时刻是不理解提交给自己的表格中的POST REDIRECT GET模式的基础知识。 主要问题是当用户返回或刷新页面时,我在数据库中获得重复的条目 所以基本上我有一个包含两个表单的页面,每个表单都提交给自己。 我有一些关于PRG模式的代码,但似乎没有用。 我将发布一个简短的例子,我将尝试解释我在做什么。
<?php
function saveUser1($UserName_1)
{
include 'db_conn.php';
//MySQL code etc...
if($result) return 1; //registro correcto
else return -2; //error
header('Location: samepage.php' , true, 303);
exit();
}
function saveUser2($UserName_2)
{
include 'db_conn.php';
//MySQL code etc...
if($result) return 1; //registro correcto
else return -2; //error
header('Location: samepage.php' , true, 303);
exit();
}
$error1 = 0;
$error2 = 0;
if(isset($_POST['userForm1']))
{
$error1 = saveUser1(clean_form($_POST['txtUserName_1']);
}
if(isset($_POST['userForm2']))
{
$error2 = saveUser2(clean_form($_POST['txtUserName_2']);
}
?>
现在是HTML
<form action="" name="userForm1" method="POST">
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="txtUserName_1" id="txtUserName_1" /><br />
<input type="submit" name="userForm1" id="userForm1"/>
</form>
<form action="" name="userForm2" method="POST">
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="txtUserName_2" id="txtUserName_2" /><br />
<input type="submit" name="userForm2" id="userForm2"/>
</form>
我刚刚在我想要完成的例子中创建了这段代码,但我对PGR模式没有任何好运。 你能告诉我错误在哪里吗?或者重定向我(不开玩笑)关于这个主题的一些好的教程? 我一直在寻找很多问题/答案,博客,但我找不到任何真正可靠的东西(从我的角度来看)。 提前谢谢。
答案 0 :(得分:0)
不检查表单名称本身,而是检查表单中的唯一字段。例如。如果(isset($ _ POST [txtUserName_1 '']))
表单名称本身不会存在于帖子中。
要查看发布内容,请尝试:
的print_r($ _ POST); 出口;
答案 1 :(得分:0)
也许您必须将发布操作设置为同一页面 并且您的表单不应与提交按钮具有相同的名称(不确定)。
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="data" id="data" /><br />
<input type="submit" name="submit1" id="userForm1"/>
</form>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="form2" method="POST">
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="data" id="data" /><br />
<input type="submit" name="submit2" id="userForm2"/>
</form>
对于php:
if(isset($_POST['submit1']))
{
$error1 = saveUser1(clean_form($_POST['txtUserName_1']);
}
if(isset($_POST['submit2']))
{
$error1 = saveUser1(clean_form($_POST['txtUserName_2']);
}
您可以添加隐藏字段以检查其是否已执行:
<input type="hidden" name="executed" value="0"/>
然后可以在执行mysql查询时将其设置为0
function saveUser1($UserName_1)
{
if($_POST['executed'] == 0)
{
include 'db_conn.php';
//MySQL code etc...
if($result) $_POST['executed'] = 1; //registro correcto
header('Location: samepage.php' , true, 303);
exit();
}
}
答案 2 :(得分:0)
如果你想尝试,下面是示例代码。
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name: <input type="text" name="name">
Email: <input type="text" name="email">
Password: <input type="password" name="password">
<input type="submit" value="submit" name="send">
</form>
PHP代码和common.php是数据库连接文件
<?php
require_once "common.php";
if(isset($_REQUEST['send']))
{
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$check = "SELECT * FROM user WHERE name = '".$name."' AND email = '".$email."' AND password = '".$password."'";
$check_result = mysql_query($check) or die(mysql_error());
if(mysql_num_rows($check_result) > 0)
{
header('Location : post.php');
}
else
{
$sql = "INSERT INTO user (name,email,password) VALUES ('$name','$email','$password')";
$result = mysql_query($sql) or die(mysql_error());
}
}
?>