php - 部分 PHP 仅在表单提交两次时运行
问题描述
在一个非常基本的登录页面中,我设置了一个错误状态,以显示表单是使用空 pin 提交还是输入了无效 pin,但它仅在我两次提交相同错误的表单时才起作用。
我在哪里错了?否则有什么更好的方法来实现这一目标?
<?php
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
?>
<html>
<head>
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
</head>
<body>
<h1>Page Title</h1>
<div class="smallcontainer">
<form method="post" action="">
<div class="row">
<div class="col-20">
<label for="id">Driver Pin</label>
</div>
<div class="col-80">
<input type="text" name="id" >
</div>
</div>
<div class="row">
<div class="col-100 error">
<?= @$_SESSION['status'] ?>
</div>
<div class="col-100">
<input type="submit" value="Submit" name="submit">
</div>
</div>
</form>
</div>
</body>
</html>
<?php
if (isset($_POST['submit'])) {
$id = trim($_POST['id']);
if (empty($_POST['id'])){
$_SESSION['status'] = 'Enter a Driver Pin';
}
// if (!strlen($id)) {
// $_SESSION['status'] = 'Enter a Driver Pin';
// //die('Please enter Driver Pin');
// }
$success = false;
$handle = fopen("users.csv", "r");
while (($data = fgetcsv($handle)) !== FALSE) {
if ($data[0] == $id) {
$success = true;
$_SESSION['displayname'] = $data[1];
break;
}
}
fclose($handle);
if ($success) {
$_SESSION['allow'] = '';
header('Location: ./');
} else {
$_SESSION['status'] = 'Invalid Driver Pin - Try again';
}
}
?>
解决方案
您检查和设置状态的 php 位于 HTML 之后,这意味着页面提交返回的 HTML 直到下次提交时才会更新状态。
因此,将您的 PHP 代码移到 HTML 之上。
header()
另外,打印完之后就不能使用了。
推荐阅读
- http - cURL - 如何使用 GET 发送 HTTP 请求消息正文?
- python - 将 Python 列表上传到 Google Cloud Storage 并覆盖文件
- php - 将 Laravel 代码从本地服务器部署到实时服务器管理子文件夹仪表板后未重定向
- angular-cli - Angular 7:xlsx_styles__WEBPACK_IMPORTED_MODULE_2__.utils.json_to_sheet 不是函数
- excel - 插入行 - 循环宏功能 - 基于单元格中的数字
- javascript - 存在多个按钮。如何使每个按钮的唯一文本在单击后出现
- react-native - 隐藏/显示组件而不是使用导航库有什么问题?
- python - 如何使用 python zeep 进行重试处理?我正在使用请求重试会话,但未处理异常
- tsql - 仅当单个列不存在多次时才获取结果
- c - “ans += n << count”是什么意思?