php - 如何在我的类 test.php 中使 $_POST['count'] 成为它的属性?
问题描述
我需要优化我的代码,创建一个输入属性,它会得到$_POST['count']但我不知道该怎么做......并使用不同的函数来最小化代码。因此,这样做的目标是在您分别键入的位置进行输入:3(单击按钮)、2(单击按钮)、... 0 使用会话变量(此处为 $_SESSION['count'])。
我试图创建一个构造函数并使用属性将帖子放入其中。但我认为这不是一个好方法。所以我问你:')。
索引.php
<?php
session_start();
include_once 'test.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>Countdown</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<p>
<label for="count">Chiffre : </label>
<input type="text" id="count" for="count" name="count" required />
<input type="submit" value="Envoyer" />
</p>
</form>
<?php
$test = new Test();
if(isset($_POST['count'])) {
$test->validateInput($_POST);
echo $test->getMessage();
} else if(!isset($_SESSION['count'])) {
echo "Veuiller saisir 3 afin de commencer le compte à rebours.";
}
?>
</body>
</html>
测试.php
<?php
class Test {
private $input;
private $message;
private $regex = '/^[0-3]{1}$/';
public function getInput()
{
return $this->input;
}
public function setInput($message)
{
$this->input = $input;
}
public function getMessage()
{
return $this->message;
}
public function setMessage($message)
{
$this->message = $message;
}
public function getRegex()
{
return $this->regex;
}
public function setRegex($regex)
{
$this->regex = $regex;
}
public function validateInput($input) {
//Vérification variable de session créée
if(!isset($_SESSION['count'])) {
//Vérification chiffre compris entre 0 et 3 et si saisie = 3
if(preg_match($this->getRegex(), $input['count'])) {
if($input['count'] == 3) {
$this->setMessage("Le chiffre suivant est ".($input['count']-1));
$_SESSION['count'] = $input['count'];
return true;
} else {
$this->setMessage("Vous devez commencer par le chiffre 3");
return false;
}
} else {
$this->setMessage("Saisie incorrecte, vous avez saisi '".$input['count']."' alors que le chiffre : ".($_SESSION['count']-1)." est attendu.");
return false;
}
} else {
if (preg_match($this->getRegex(), $input['count'])) {
//Vérification ancienne valeur-1 = valeur actuelle saisie
if (($_SESSION['count'] - 1) == $input['count'] && $input['count'] > 0) {
$this->setMessage("Le chiffre suivant est " . ($input['count'] - 1));
$_SESSION['count'] = $input['count'];
return true;
//Vérification si valeur saisie = 0
} else if (($_SESSION['count'] - 1) == $input['count'] && $input['count'] == 0) {
$this->setMessage("Fini ! - Pour recommencer, saisissez 3.");
session_destroy();
unset($_SESSION['count']);
return true;
} else {
$this->setMessage("La valeur saisie ne correspond pas à l'ordre du compte à rebours (3 2 1 0)<br>"
. "La valeur attendue est : " . ($_SESSION['count'] - 1));
return false;
}
} else {
$this->setMessage("Saisie incorrecte, vous avez saisi '" . $input['count'] . "' alors que le chiffre : " . ($_SESSION['count']-1) . " est attendu.");
return false;
}
}
}
}
?>
最后,表单倒计时应该可以正常工作。提前感谢您的帮助,祝您有美好的一天!
解决方案
@艺术凤凰
嗯,现在似乎没有任何工作..我做对了吗?
索引.php
<?php
session_start();
include_once 'test.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>Countdown</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<p>
<label for="count">Chiffre : </label>
<input type="text" id="count" for="count" name="count" required />
<input type="submit" value="Envoyer" />
</p>
</form>
<?php
if($test = new Test($_POST['count'])) {
$test->validateInput($count);
echo $test->getMessage();
} else if(!isset($_SESSION['count'])) {
echo "Veuillez saisir 3 afin de commencer le compte à rebours.";
}
?>
</body>
</html>
测试.php
<?php
class Test {
protected $count;
private $message;
private $regex = '/^[0-3]{1}$/';
public function __construct($count) {
$this->count = $count;
}
public function getCount()
{
return $this->count;
}
public function setCount($count)
{
$this->count = $count;
}
public function getMessage()
{
return $this->message;
}
public function setMessage($message)
{
$this->message = $message;
}
public function getRegex()
{
return $this->regex;
}
public function setRegex($regex)
{
$this->regex = $regex;
}
public function validateInput($count) {
//Vérification variable de session créée
if(!($this->getCount() !== null)) {
$this->setMessage("Saisie vide, chiffre attendu : " . ($_SESSION['count']-1));
return false;
} else {
if(!isset($_SESSION['count'])) {
//Vérification chiffre compris entre 0 et 3 et si saisie = 3
if(preg_match($this->getRegex(), $this->getCount())) {
if($this->getCount() == 3) {
$this->setMessage("Chiffre suivant : " . ($this->getCount()-1));
$_SESSION['count'] = $this->getCount();
return true;
} else {
$this->setMessage("Chiffre attendu : 3");
return false;
}
} else {
if($_SESSION['count'] == 0) {
$this->setMessage("Saisie : '" . $this->getCount() . "' - Chiffre attendu : " . ($_SESSION['count']+3));
return false;
} else {
$this->setMessage("Saisie : '" . $this->getCount() . "' - Chiffre attendu : ".($_SESSION['count']-1));
return false;
}
}
} else {
if (preg_match($this->getRegex(), $this->getCount())) {
//Vérification ancienne valeur-1 = valeur actuelle saisie
if (($_SESSION['count'] - 1) == $this->getCount() && $this->getCount() > 0) {
$this->setMessage("Chiffre suivant : " . ($this->getCount() - 1));
$_SESSION['count'] = $this->getCount();
return true;
//Vérification si valeur saisie = 0
} else if (($_SESSION['count'] - 1) == $this->getCount() && $this->getCount() == 0) {
$this->setMessage("Fini ! - Pour recommencer, saisissez 3.");
session_destroy();
unset($_SESSION['count']);
return true;
} else {
$this->setMessage("Chiffre saisi != de l'ordre (3 2 1 0)<br>"
. "Chiffre attendu : " . ($_SESSION['count'] - 1));
return false;
}
} else {
$this->setMessage("Saisie : '" . $this->getCount() . "' - Chiffre attendu : " . ($_SESSION['count']-1));
return false;
}
}
}
}
}
?>
感谢您的时间和对我的关注!如果您对我如何最小化 if 部分有任何想法,我将不胜感激!
推荐阅读
- android - 无法 HEAD 'https://jcenter.bintray.com/com/android/support/appcompat-v7/27.0.1/appcompat-v7-27.0.1.jar'。从服务器收到状态码 500
- mysql - MySQL 服务器:如何在没有“Workbench”的情况下安装?
- c# - 如何从 MVVM 中的选定项访问模型?
- javascript - 将文件添加到 Dropzone 会冻结 Firefox (v61)
- parsing - HANA:使用小数秒将字符串解析为时间戳
- jquery - DataTable 实例获取 HTML 元素 ID
- mysql - MySQL:4 表迁移到 1 表
- solr - 在 Spring Boot 中使用 solrj 以 xlsx 形式获得响应
- sql - 基于另一个表更新一个表
- swift - textViewDidChange 函数没有响应