[英]PHP If array value is present then echo text
我有以下 PHP 脚本,以及一个将 POST 值发送到 php 页面的 HTML 表单。 我的问题是,当我选择“覆盖计划消息”并提交表单时,它显示了正确的消息,但是当我直接转到 url.php 时,它每次都显示相同的消息,无论在表单上提交了什么形式。
缩进的行为是当提交表单并选择“覆盖计划消息”时,url.php 将显示“覆盖已开启,并将显示 rss 提要”
如果选择了“显示计划消息” ,则应显示“覆盖未打开,将显示基于时间的消息数组 ([0] => ) ”。
代码:
<?php
if ($_POST['override'] == 'value2' ) {
$myArray=array("");
array_push($myArray,"override");
}
else{
$myArray=array("");
}
?>
<?php
if (in_array("override", $myArray)) {
echo "Override is on, and would display rss feed";
echo "<br>";
print_r($myArray);
}
else{
echo "overide is not on, and would display time based message";
echo "<br>";
print_r($myArray);
}
?>
HTML 表单
<form style="margin: auto; width: 95%; padding:10px;" action="https://example.com/url.php" method="post" >
<div class="radio">
<input type="radio" name="override" value="value1">
<label class="radio-label">Display message for schedule</label>
</div>
<div class="radio">
<input type="radio" name="override" value="value2">
<label class="radio-label">Override schedule message</label>
</div>
<input class="ppw_submit_btn" type="submit" value="Submit">
</form>
这就是 HTTP 协议的工作原理。 该协议是无状态的,这意味着 - 如果两个请求具有相同的内容,服务器应该返回相同的响应。 让我们看看您的要求。
当您提交表单时,您正在向服务器发送POST
HTTP 请求。 请求参数取自提交的表单。
同样,当您直接访问 URL 时,您发送的是一个不带参数的GET
HTTP 请求。 HTTP 的无状态特性不允许服务器“记住”提交的表单,因为它是在另一个请求中提交的。
如果您希望服务器记住正在发送的表单,您基本上有两种选择。 其中之一是使用cookies,这意味着服务器告诉客户端记住一些东西并将其与所有后续请求一起发送到服务器。 cookie 基本上是无状态协议的状态实现。
第二种选择是在服务器上实现某种持久性。 这通常意味着数据库或文件存储,具体取决于您要实现的目标。
服务器不会记住上次请求期间$myArray
变量中的内容,但如果将其保存到磁盘或数据库,则可以在下一次请求期间检索之前的值。
看着你的代码,我不明白为什么它没有按照你的意图去做。 我把它复制到一个 LAMP 盒子上,它的工作方式完全符合你的预期。 您复制并粘贴了错误的文件,或者您的操作码缓存配置为不检查文件时间戳。
也许我误解了你今天要尝试的东西。
但是,当我直接转到 url.php 时,它每次都显示相同的消息
我想你的意思是不通过表单访问页面? 哪个相同的消息? $_POST['override']
不会是“value2”,所以如果你没有发布override=value2,那么页面将总是输出“overide is not on,并且会显示基于时间的消息”。
$_POST 和 $_GET 中的值仅在 php 执行和生成页面所需的时间内持续存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.