使用表单方法的问题进入下一页,希望人们看不到初始页面,除非他们点击提交按钮

时间:2011-07-20 16:19:33

标签: php

我有两个PHP文件。

第一个名为“file1.php”:

<form action="file2.php" method="get">
<input type="hidden" name="price" value="50">
<input type="hidden" name="id" value="1">
<input type="submit" border="0" name="submit" value="Buy Now">
</form>

第二个叫做“file2.php”:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" id="id" name="id" value="<?php echo $_GET["id"]; ?>" alt="<?php echo $_GET["price"]; ?>" readonly="readonly" />
</form>

现在这是我的问题:

有些人可能会在file1.php上查看该页面的来源,并尝试访问file2.php。我希望它们能够自动重定向到file1.php或者无法看到file2.php,除非他们点击了file1.php中的提交按钮。

也有些人可能会尝试删除从上一页(file1.php)发出的GET方法的数据,以便能够查看file2.php,有没有办法阻止这种情况发生?我不希望它显示404错误,只是将该人重定向到file1.php页面,除非他们点击file1.php中的一个提交按钮,因为有很多表单。


我认为这可能与PHP有关,需要放在file2.php上,但不太确定如何让它正常工作。

有什么想法吗?


编辑(下)

感谢大家到目前为止所有的帮助和建议。

好吧,所以现在一切似乎都在使用表单方法POST。但是,要使其正常工作,我们必须列出每个模板的所有变量。每个模板有4个变量。 2个ID和2个价格。例如:

$T900_0001_R_ID = "#900-0001 - Regular"; 
$T900_0001_R = 75; 
$T900_0001_E_ID = "#900-0001 - Exclusive"; 
$T900_0001_E = 500; 

现在,我的下一个问题是:我们如何将此代码转换为用于MySQL数据库,因为在接下来的几周内将会有数百甚至数千个模板出售?


查看正在运行的更新文件(没有MySQL):

file1.php:

<?php
$T900_0001_R_ID = "#900-0001 - Regular"; 
$T900_0001_R = 75; 
$T900_0001_E_ID = "#900-0001 - Exclusive"; 
$T900_0001_E = 500; 

echo "<form action='test2.php' method='post'><input type='hidden' name='template_price' value='" . $T900_0001_R . "'><input type='hidden' name='template_id' value='" . $T900_0001_R_ID . "'><input type='submit' class='buynow' border='0' name='submit' value='Buy Regular'></form>";
?>

file2.php:

<?php
$T900_0001_R_ID = "#900-0001 - Regular"; 
$T900_0001_R = 75; 
$T900_0001_E_ID = "#900-0001 - Exclusive"; 
$T900_0001_E = 500; 

echo "<form><input type='text' id='template_id' name='template_id' value='" . $_POST["template_id"] . "' alt='" . $_POST["template_price"] . "' readonly='readonly' class='input-text sum' /></form>";
?>

4 个答案:

答案 0 :(得分:2)

人们可能会做很多事情。他们可能会从file1.php获取值并POST它们。或者发布一些东西试图打破你的程序。

您可以做的最好的事情是验证您的参数,以确保在执行各种命令之前它们具有您期望的值。

在您的示例中,您可以验证价格是否为数字:

if( isset($_POST['price'] ) && is_numeric($_POST['price'] ) ) {
     // process
}
else {
    //redirect to file1.php or show an error
}

然而,看起来您通过表单发布项目的价格。如果您担心某人查看来源,您为什么不担心有人会改变价格?这是一件微不足道的事情。我上面的代码不会阻止它。您必须检查以确保贴出的价格是商品的实际价格,但如果您这样做,为什么需要首先从表单中发布?

答案 1 :(得分:0)

请检查提交(我建议将file1.php上的方法切换为post

在file2.php中:

if(count($_POST)){ //0 is false, any other number true
   //do stuff
}
else {
   header('Location: file1.php');
}

答案 2 :(得分:0)

我会将第一页作为帖子,然后在第二个文件上查看帖子:

if(isset($_POST['id'] && $_POST['price']) {
    // Display second form
} else {
    header('Location: http://www.example.com/');
}

答案 3 :(得分:0)

file2.php

的顶部
<?php

if(!isset($_GET['id']) && !isset($_GET['price'])) {
    header('Location: file1.php');
    die();
}

?>

在编辑

除了我不想在其他方向编辑问题之外,您必须首先创建一个数据库表。它看起来像

ID type price
 1    e   500
 1    r    75
 2    e   250
 2    r    50