将问题与php值进行比较

将问题与php值进行比较,php,if-statement,state,Php,If Statement,State,我在比较2个值并让1个值在if语句中更改时遇到问题。当然,当我重新加载页面时,它会再次拾取第一个值。我用这段代码来设置当机器打开或关闭时数据库中的一些信息 $urlMachineON = 'http://192.168.0.150/awp/Shredder/PLCfiles/IOmachineActive.html'; // get content $contentMachineON = file_get_contents($urlMachineON); //remove first 2 c

我在比较2个值并让1个值在if语句中更改时遇到问题。当然,当我重新加载页面时,它会再次拾取第一个值。我用这段代码来设置当机器打开或关闭时数据库中的一些信息

$urlMachineON = 'http://192.168.0.150/awp/Shredder/PLCfiles/IOmachineActive.html';

// get content
$contentMachineON = file_get_contents($urlMachineON);

//remove first 2 characters
$truncate = substr($contentMachineON, 2);

//remove last 5 characters
$MachineOn = substr($truncate, 0, -5);
//MachineON can only be 1 or 0

$currentState = 2;

if ($MachineOn != $currentState)
{
$stmt = $conn->prepare("INSERT INTO machineactiviteit (Time, MachineStatus) VALUES(NOW(), ?)");

$stmt->bind_param('s', $MachineOn);

    if ($stmt->execute() === TRUE) 
    {
        $currentState = $MachineOn;
        echo 'success'; 
    }
    else 
    {
        echo $conn->error;
    }

$stmt->close(); 
}
elseif($MachineOn == $currentState)
{
    echo 'do nothing';
}
因此,当我这样做时,他将始终使用if语句,因为
$currentState
$MachineOn
总是彼此不同。在C#中,您可以使用类似initalize component的方法将值一次性设置为特定值。但是我在php中没有找到任何关于这方面的内容。所以我的问题是,我可以只设置一次值吗?或者我应该用另一种方法解决这个问题

它应该是这样工作的:
第一次尝试之前:
currentState=2
MachineOn=0之后:
currentState=0
MachineOn=0
第二次尝试之前:
currentState=0
MachineOn=0之后:
currentState=0
MachineOn=0

之前的第三次尝试:
currentState=0
MachineOn=1之后:
currentState=1
MachineOn=1
(我可以通过按钮更改MachineOn值)。

只需将$currentState值保存在某个位置即可。例如,在文件或数据库中

    $currentState = file_get_contents('filepath'); // last saved state (check if is set!)
    if($currentState !== $MachineOn) {
        file_put_contents('filepath', $MachineOn); // Save current state
    } else {
        file_put_contents('filepath', 2); // Save other state
    }

这是pseoudocode。记得检查文件是否存在并且是否有值。

PHP是完全无状态的——每次执行代码时,它都会重置所有内容,除非您使用会话变量、cookie或某种数据库来持久化该值。目前来看,这段代码永远不会起任何作用。我想我必须处理我的数据库查询,并检查我使用数据库的机器的最后状态。获取我的最后状态