如果在表单的操作中执行内联

时间:2016-08-26 12:27:59

标签: php

我需要将用户重定向到获取" Short_proj_name"的网站。信息。所以我这样做了:

<form action="Main.php?short_proj_name=<?=$_REQUEST['short_proj_name']?>" method="post" name="formProjName" target="_blank" id='frmProjName'>

然而,在搜索时,我发现有几个原因不使用$ _REQUEST,其中一个是安全性等等。但是,简单地执行$ _POST [&#39; short_proj_name&#39;]或$ _GET [&#39; short_proj_name&#39;]永远不会返回我需要的信息。

基本上,我将如何进行if语句来检查$ _GET是否为空,并执行$ _POST?我可以在表单的动作方法中执行此操作吗?

编辑: 另外,是否可能使用$ _POST和$ _GET返回null,但使用$ _REQUEST不是吗?据我所知,$ _REQUEST既是get又是post,但没有一个返回任何信息

如果我这样做,它会起作用:

                if(!empty($_POST['short_proj_name']))
            {
                $projName = $_POST['short_proj_name'];
            }
            elseif (!empty($_GET['short_proj_name']))
            {
                $projName = $_GET['short_proj_name'];
            }
            else
            {
                $projName = $_REQUEST['short_proj_name'];
            }

但我不确定这是否能解决所有的安全问题

3 个答案:

答案 0 :(得分:1)

我认为这里的答案是始终使用_GET。 表单实际上可以根据您在表单的“action”属性中使用的内容发送_GET和_POST数据。操作部分不关心您将“方法”属性设置为。

从上面显示的内容来看,params都在表单的“action”部分,所以无论如何这些都总是传递给_GET。如果输入在表单内,那么将通过_POST

接收

这是一个例子。 在PHP中我会收到$ _GET ['monkey'] ='1'和$ _POST ['lion'] = 1

<form method='post' action='receive.php?monkey=1'>
<input type='text' name='lion' value='1' />
<input type='submit' />
</form>

实际上不应该有一个实例,您需要检查答案是否在_GET或_POST中,并且如评论中所述,使用$ _REQUEST或检查它是否在_GET或_POST中存在相当大的安全风险。

大多数情况下,您只需将页面请求URL推回到“操作”表单中,即可确保_POST表单中包含所有相同的_GET参数。

大多数人所犯的最大错误就是尝试将它们从_GET转移到表单中的隐藏输入字段中,这些字段认为他们需要这样做才能传输所有数据。

但是,这种类型的函数调用可能对您有所帮助,但我不赞成。

function getRequestParam($param){
   if(isset($_GET[$param])){return $_GET[$param];}
   if(isset($_POST[$param])){return $_POST[$param];}
   return "";
}

答案 1 :(得分:1)

你可以喜欢

<?php 
if(!empty($_POST))
{
    $projName = $_POST['short_proj_name'];
}
else
{
    $projName = $_GET['short_proj_name'];
}

?>
<form action="Main.php?short_proj_name=<?=$projName ?>" method="post" name="formProjName" target="_blank" id='frmProjName'>

但我认为这很难看

答案 2 :(得分:0)

这是一个简单的代码:

<?php
    if (isset($_GET) && $_GET['short_proj_name'] != '')
        echo $_GET['short_proj_name'];
    else if (isset($_POST) && $_POST['short_proj_name'] != '')
        echo $_GET['short_proj_name'];
    else
        echo $_REQUEST['short_proj_name'];
?>

但是如果你从帖子中获得价值或得到它,那么可以是任何事情都要小心...... 如果“short_proj_name”是一个文件名,一个讨厌的人可以通过猜测他们的名字来访问其他文件......