大佬教程收集整理的这篇文章主要介绍了为什么我的$_SESSION或’if’语句拆分为两页时不会触发?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试制作一封电子邮件表格,当发生错误时它会显示一条Flash错误消息.我将流程分为两页,第一页是表单的contact.PHP页,第二页是验证和电子邮件’mail()’函数所在的validation.PHP页.我通过’require_once(“ validation.PHP”);’链接页面.在contact.PHP页面顶部.
当我将它们拆分为这两页时,将不会显示Flash消息,但是当我仅将所有代码都放在contact.PHP页面上时,它就可以工作.但是,即使发生此问题,填写表单时也确实会发送电子邮件,因此我知道页面的链接正在工作并且某些代码正在执行.
知道为什么会这样吗?
这是我的代码的简化版本:
contact.PHP:
<?PHP
require_once("validation.PHP");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>...</title>
</head>
<body>
<main class="container">
<div class="form-container">
<?PHP
echo '<pre>'.print_r($_POST).'</pre>';
echo '<pre>'.print_r($_SESSION['error']).'</pre>';
if ( isset($_SESSION['error']) ) {
echo('<p style="color: red;">'.$_SESSION['error']."
</p>\n");
unset($_SESSION['error']);
}
?>
<form action="contact.PHP" method="POST">
<label for="name">Enter your name: </label><br>
<input type="text" name="name"><br>
<label for="email">Enter your email: </label><br>
<input type="email" name="email"><br>
<label for="subject">Subject line: </label><br>
<input type="text" name="subject">
<br>
<label for="message">message: </label><br>
<textarea name="message" cols="75" rows="10">
</textarea><br>
<input type="submit" value="Submit">
</form>
</div><!-- .form-container -->
</main>
</body>
</html>
validation.PHP:
<?PHP
session_start();
if ($_SERVER["requEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$subject = test_input($_POST["subject"]);
$message = test_input($_POST["message"]);
if ( strlen($Name) < 1 || strlen($email) < 1 || strlen($subject) < 1 ||
strlen($messagE) < 1) {
$_SESSION['error'] = "All fields are required";
header("LOCATIOn: contact.PHP");
return;
} else {
$to = "example@example.com";
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: $name <$email>";
mail($to, $subject, $message, $headers);
}
}
function test_input($data) {
$data = trim($data);
$data = Strip_tags($data);
$data = Stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
解决方法:
问题是由使用退货引起的;而不是退出;
由于包含文件未终止,因此将处理脚本的其余部分.
您的代码应按以下方式进行编辑:
if (!session_id()) {
session_start();
}
if ($_SERVER["requEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$subject = test_input($_POST["subject"]);
$message = test_input($_POST["message"]);
if (strlen($Name) < 1 || strlen($email) < 1 || strlen($subject) < 1 ||
strlen($messagE) < 1) {
$_SESSION['error'] = "All fields are required";
header("LOCATIOn: contact.PHP");
exit;
}
//no need for else since when the if condition is true, it is terminated
$to = "example@example.com";
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: $name <$email>";
mail($to, $subject, $message, $headers);
}
//...
编辑回答评论问题:
就像函数一样,允许包含文件返回诸如数组之类的值.因此,当您使用return时,它并没有阻止脚本的其余部分在那一点上执行.但是,它确实“保留”了包含文件.
因此,您的脚本添加了标头,然后返回void,然后在包含之后继续显示HTML内容.
例如:
<?PHP
//index.PHP
$value = include 'my_file.PHP';
var_dump($value);
<?PHP
//my_file.PHP
return ['foo' => 'bar'];
以上是大佬教程为你收集整理的为什么我的$_SESSION或’if’语句拆分为两页时不会触发?全部内容,希望文章能够帮你解决为什么我的$_SESSION或’if’语句拆分为两页时不会触发?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。