所以我对PHP很陌生,我已经完成并学习了很多基于控制台的经验,所以我不是一个完全的编程初学者。但是我决定学习如何数据库,因为它总是让我着迷,而且我已经学会了基本的HTML和CSS和JS,现在基本的PHP和SQL,但是在我身上变得非常奇怪。
我已经弄清楚如何通过PHP代码和类似的东西来操作和创建数据库,但它们都是简单的东西,在一个文件中,我想要一个更大的项目,我需要把所有的PHP和#39;在单独的文件中,这就是问题所在。
说我的' index.php'文件是这样的:
<!DOCTYPE html>
<html>
<head>
<?php include 'other.php' ?> //Problem 1
</head>
<body>
<FORM method="POST" action="other.php">
<INPUT type="text" name="textTest" value="<?php print $input; ?>">
<INPUT type="submit" name="subTest" value="TEST" >
</FORM>
</body>
</html>
和我的&#39; other.php&#39;是:
<?php
$input = "";
if (isset ($_POST['subTest']))
{
$input = $_POST['textTest'];
//header("Location : index.php");
}
header("Location: index.php"); //Problem 2
?>
所以我的问题:
问题1,如果我不包含&#39; other.php&#39;文件,当我尝试打印时出错:value =&#34; print $ input&#34;
问题2,如果我没有重新定位&#39;标题&#39;,它显然不会重定向并返回到&quot; index.php&#39;我想要发生。但是在那里,它会导致TOO_MANY_REDIRECT错误。我发现这是由于问题1原因而无法删除的问题引起的问题。
问题3,我发现我可以移动&#39;标题&#39;函数到它被注释掉的地方,但是值=&#34; ...&#34;并不会继续提交。
问题4,如果我完全摆脱了标题&#39;重定向,并将表单的操作更改为&#39; index.php&#39;,然后我获得“确认表单重新提交”#39;我想避免的事情。
所以我希望有一个人能够理解并且可以提供帮助,并且非常高兴。
答案 0 :(得分:2)
include
听起来像它,它将文件包含在父文件中,基本上与复制和粘贴内容相同。
为了解决您的问题,首先将表单操作更改为index.php
(以便将其发布到自己的位置),然后将所有重定向一起删除:
<?php include 'other.php' ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<FORM method="POST" action="index.php">
<INPUT type="text" name="textTest" value="<?php print $input; ?>">
<INPUT type="submit" name="subTest" value="TEST" >
</FORM>
</body>
</html>
other.php:
<?php
$input = "";
if (isset ($_POST['subTest'])){
$input = $_POST['textTest'];
}
请注意,在任何html输出之前,我还将include
移动到index.php
中的第1行。
在这种情况下,这不是严格要求的,但这是一个很好的做法,因为在将响应主体发送到输出流之后,您无法设置标头(例如,用于重定向)
EDIT 如果您想在刷新时避免重新提交表单,那么您需要提交到单独的端点并重定向是正确的。 为此,您需要将发布的数据传递回索引文件,因为重定向是一个新的(GET)请求,因此后期数据将丢失。
执行此操作的两种主要方法是使用SESSION或URL参数。 我将展示如何使用参数:
不要包含目标文件:
<?php
//get value from url parameter, or set to empty string if parameter not present
$input = isset($_GET['input'])? $_GET['input'] : '';
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<FORM method="POST" action="other.php">
<INPUT type="text" name="textTest" value="<?php print $input; ?>">
<INPUT type="submit" name="subTest" value="TEST" >
</FORM>
</body>
</html>
然后将所需数据作为参数附加到重定向网址 other.php:
<?php
$input = "";
if (isset ($_POST['subTest'])){
$input = $_POST['textTest'];
header("Location: index.php?" . http_build_query(['input'=>$input]));
die(); //always stop execution after redirect
}
//if post data not sent, something went wrong, so set $input parameter to error message
header("Location: index.php?" . http_build_query(['input'=>'No Data posted']));
die(); //always stop execution after redirect
答案 1 :(得分:0)
在最后一行的other.php中,尝试使用index.php而不是redirrecting。 同时删除index.php中包含other.php。
$input = "";
if (isset ($_POST['subTest']))
{
$input = $_POST['textTest'];
}
require_once 'index.php';
?>