我其实有很多问题。但它们是相关的。
首先,使用自己的帖子提交表单是不好的做法?它有什么不好的安全问题吗?我决定使用自己帖子的原因是因为我不想透露我正在使用的文件/文件夹结构和服务器端编程语言。
例如,这清楚地表明我正在使用php并且logout.php文件位于兄弟级别的logout文件夹中。
<form action="../logout/logout.php" method="post">
//form elements goes here
</form>
通过这个例子,我没有显示我正在使用的服务器端语言,但是程序员清楚地知道它是一个自我发布并且逻辑必须首先通过它自己:
<?php
if (isset($_POST['log_out']))
{
// do some stuff
}
?>
<form method="post">
//form elements goes here
</form>
我意识到自我发布的结果是,我必须在每个自我发布页面时都有一个复杂的逻辑。这些逻辑必须选择正确的执行代码,有时会重定向我并停止执行其余的代码。
例如,在这里,我有一个页面可以执行多项操作并自行发布。为了再次停止执行其余代码或html,我需要使用php函数&#34;退出&#34;。
<?php
if (isset($_POST['add_two_numbers']))
{
// code for adding two numbers
exit();
}
else if (isset($_POST['add_three_numbers']))
{
// code for adding three numbers
exit();
}
else if (isset($_POST['log_out']))
{
// destroy session and data before logging out
header("location: ./logout/logout.php");
exit();
}
// php code that should happen if there is no post logic and
// will be unapropiately executed if exit is not used
?>
<html>
<head>
<script>
function init()
{
// will do stuff if php did not exit properly
}
// more js code
window.onload = init;
所以,我必须使用php命令退出,我读了很多关于它如何导致问题,它是坏的,一些建议使用返回。但是,返回的问题是它并不总是阻止代码继续执行特别是html部分。那么有没有更好的方法呢?
感谢。
答案 0 :(得分:1)
PHP中的自我表单发布被称为#34;粘性表单&#34;,如果我能记住的话,这可能是好的,并且没有任何问题(根据我的经验)。我个人使用粘性表单进行表单字段验证和/或输出其他信息(状态,错误等)。 为了避免退出()你可能应该改变你的网页逻辑,但现在很难给你一个建议:)。
答案 1 :(得分:1)
如果您想尝试让您的页面每次都不加载所有代码,只需将每个主逻辑放在一个单独的文件中,如果要求每个元素都可以包含并运行。
即使保留包含所有其他包含内容的单文件包含选项,也可能更简洁,更容易实现。
你会得到你的代码页(但是你可以命名):
add.two.php
add.three.php
logout.php
default.php
<强>的index.php 强>
<?php
if(isset($_POST['add_two_numbers'])) {
require('/directory/hierarchy/add.two.php');
exit();
}
elseif(isset($_POST['add_three_numbers'])) {
require('/directory/hierarchy/add.three.php');
// code for adding three numbers
exit();
}
elseif(isset($_POST['log_out'])) {
// destroy session and data before logging out
header("location: ./logout/logout.php");
exit();
}
else
require('/directory/hierarchy/default.php'); ?>
<html>
<head>
<script>
function init()
{
// will do stuff if php did not exit properly
}
// more js code
window.onload = init;