我需要一些帮助,因为我对if语句的get pass遇到了问题。当我在同一页面上时,我正在使用干净的URL创建类似create_newsletter.php?template=new
的函数。
当我尝试这样做时:
if(isset($_POST['submit']))
{
sleep(2)
header("Location: http://example.com/newsletters/create_newsletter.php?template=new");
if(isset($_GET['template'])
{
echo "hello robert now you are working on the template";
}
}
它不会通过此行:
if(isset($_GET['template'])
这是完整的代码:
<?php
$template = "";
if(isset($_GET['template']))
{
$template = $_GET['template'];
}
if(isset($_POST['submit']))
{
sleep(2)
$messagename = $_POST['messagename'];
$subject = $_POST['subject'];
header("Location: http://example.com/newsletters/create_newsletter.php?template=new");
if(isset($_GET['template'])
{
echo "hello robert now you are working on the template";
}
}
?>
<form method="post">
<input type="text" name="messagename" value="">
<input type="text" name="subject" value="">
<input type="submit" name="submit" name="submit" class="btn btn-primary" value="Next Step">
</form>
我不知道在使用header("Location:)
时如何传递if语句。我也尝试过if ($template)
,但没有通过。
我想做的是连接到我的php页面create_newsletter.php
。我想输入我的全名文本框messagename
,然后在subject
文本框中输入主题,然后单击一个按钮。当我单击按钮时,由于要在两个文本框控件create_newsletter.php?template=new
和messagename
上禁用,我想重定向到subject
,然后添加iframe以允许我访问另一个PHP页面,这样我就可以在屏幕中间写新闻稿。
您能给我一个例子吗,当我单击一个提交按钮将我重定向到create_newsletter.php?template=new
以便可以禁用这些控件和添加iframe?
谢谢。
答案 0 :(得分:1)
您正在if(isset($_GET['template'])
条件内检查if(isset($_POST['submit']))
,但是重定向不会发送发布请求。
这应该有效:
if(isset($_POST['submit']))
{
sleep(2)
$messagename = $_POST['messagename'];
$subject = $_POST['subject'];
header("Location: http://example.com/newsletters/create_newsletter.php?template=new");
}
if(isset($_GET['template'])
{
echo "hello robert now you are working on the template";
}
但是,如果您需要在重定向中发出POST请求,则需要打印<form>
并在客户端提交,或者在下面的示例中使用$ _SESSION:
session_start();
if(isset($_POST['submit']))
{
sleep(2)
$_SESSION['messagename'] = $_POST['messagename'];
$_SESSION['subject'] = $_POST['subject'];
header("Location: http://example.com/newsletters/create_newsletter.php?template=new");
}
if(isset($_GET['template'])
{
// $_SESSION['messagename'] and $_SESSION['subject'] are available here
echo "hello robert now you are working on the template";
}
答案 1 :(得分:0)
在检查if(isset($_POST['submit']))
时,您正在重定向,然后才能到达if(isset($_GET['template'])
。
但是我假设您希望它能够运行,因为将设置$_GET['template']
。尽管您的代码存在问题,但当您重定向时,将未设置$_POST['submit']
,因此不会在if(isset($_POST['submit']))
块中执行任何操作,包括{{1} }。
这是因为POST请求不是持久性的,并且如果您重新加载或重定向该请求将不会保留
您应该考虑以下内容:
if(isset($_GET['template'])
if(isset($_POST['submit']))
{
sleep(2)
$messagename = $_POST['messagename'];
$subject = $_POST['subject'];
header("Location: http://example.com/newsletters/create_newsletter.php?template=new");
}
if(isset($_GET['template'])
{
echo "hello robert now you are working on the template";
}
?>
中的$messagename
和$subject
,则可以在URL中传递它们。因为当您重定向时,将不会设置if(isset($_GET['template'])
变量,因此它们将消失。您可以这样做:
$_POST
答案 2 :(得分:0)
OP的代码中有两个错误,不幸的是,官方接受的答案也反映了这一错误。需要在使用sleep()的语句后附加分号,并在用于测试$ _GET ['template']的语句中附加括号。
实际上,不需要为了使$ _GET ['template']的值延迟而提交代码而将sleep()提供的信号处理复杂化。可以省略sleep()并稍微更改代码,如下所示:
<?php
if( isset($_POST['submit']) )
{
$mess = htmlentities($_POST['mess']);
$subject = htmlentities($_POST['subject']);
header("Location: http://localhost/exp/create_newsletter.php?template=new");
exit;
}
else
if( isset( $_GET['template']))
{
echo "hello robert now you are working on the template";
exit;
}
另外,除了使用$ _GET之外,还可以使用$ _SERVER ['QUERY_STRING'],如下所示:
<?php
$qs = parse_url($_SERVER['PHP_SELF'], PHP_URL_QUERY);
if( $qs == 'template=new' ){
$template = split("=",$qs)[1];
echo "hello robert now you are working on the template";
exit;
}
else
if(isset($_POST['submit']))
{
sleep(2);
$mess = htmlentities($_POST['mess']);
$subject = htmlentities($_POST['subject']);
header("Location: http://localhost/exp/create_newsletter.php?template=new");
exit;
}
?>
<html>
<head><title>test</title></head>
<body>
<form method="post" action="">
<input type="text" name="mess" value="">
<input type="text" name="subject" value="">
<input type="submit" name="submit" class="btn btn-primary" value="Next Step">
</form>
</body>
</html>
parse_url()的component参数启用此函数以返回查询字符串。也可以选择雇用parse_str(),如下所示:
<?php
$queries = "";
parse_str($_SERVER['QUERY_STRING'], $queries);
if( isset($queries['template']) && ($queries['template'] == 'new'))
{
$template = $queries;
echo "hello robert now you are working on the template";
exit;
}
else
if(isset($_POST['submit']))
{
sleep(2);
$mess = htmlentities($_POST['mess']);
$subject = htmlentities($_POST['subject']);
header("Location: http://localhost/exp/create_newsletter.php?template=new");
exit;
}
?>
注意:始终将POST或GET中的数据视为已污染,而不是直接将数据分配给变量并使用该变量,这一点非常重要。使用htmlentities()是尝试防止可能的安全问题的一种方法。