Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序计算器使用PHP进行计算和HTML输入表单_Php_Html_Variables - Fatal编程技术网

程序计算器使用PHP进行计算和HTML输入表单

程序计算器使用PHP进行计算和HTML输入表单,php,html,variables,Php,Html,Variables,我是一个PHP新手,我试着用PHP HTML设置一个计算器 问题: 我想用php脚本调用自己来处理输入值。 我的目标是避免php会话缓存这些值。具体来说,我有两个不同的字段-一个输出字段(只读)和一个输入字段(可以输入数值)。除此之外,还有5个不同的按钮用于计算输入字段中的加法、减法、乘法、除法和赋值。 我只能用会话变量解决这个问题,如下面的示例所示。我使用一个自己定义的会话,我尝试用普通的PHP变量替换它,并且每次按下一个操作按钮时都要更新它们。此外,应保存输入值和输出,以便能够再次使用相同的

我是一个PHP新手,我试着用PHP HTML设置一个计算器

问题:

我想用php脚本调用自己来处理输入值。 我的目标是避免php会话缓存这些值。具体来说,我有两个不同的字段-一个输出字段(只读)和一个输入字段(可以输入数值)。除此之外,还有5个不同的按钮用于计算输入字段中的加法、减法、乘法、除法和赋值。 我只能用会话变量解决这个问题,如下面的示例所示。我使用一个自己定义的会话,我尝试用普通的PHP变量替换它,并且每次按下一个操作按钮时都要更新它们。此外,应保存输入值和输出,以便能够再次使用相同的值,而无需将其重新输入表单

基本上,我想用php变量(如$output)替换所有会话变量(如$_session['output'))。我已经尝试过的所有方法都不起作用,因为每次我调用脚本或调用自身时,这些值都会被覆盖

<?php session_start(); 

// Session Timeout:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 60)) {
    // last request was more than 1 minute ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Calculator</title>
<style type="text/css">
#add {
    color:black;
    background-color:#F55;
}
#subtract {
    color:black;
    background-color:#55f;
}
#multiply {
    color:black;
    background-color:#5f5;
}
#divide {
    color:black;
    background-color:#ff5;
}
#exp {
    color:black;
    background-color:#fa2;
}
#equal {
    color: black;
    background-color:#ccc;
}
.res {
    color: black;
    font-style: italic;
    background-color:#eee;
    border: none;
}
</style>
</head>

<body>

<?php 
    if (is_null($_SESSION['output'])){
        $_SESSION['output'] = "0.0"; 
    }

// Operations to execute via form.
$_SESSION['input'] = $_POST['input'];

if(isset($_REQUEST['add'])){
    $_SESSION['output'] += $_POST['input']; 
} else if (isset($_REQUEST['subtract'])) {
    $_SESSION['output'] -= $_POST['input']; 
} else if (isset($_REQUEST['multiply'])) {
    $_SESSION['output'] *= $_POST['input']; 
} else if (isset($_REQUEST['divide'])) {
    if($_POST['input'] == 0) {
        $_SESSION['output'] = $_POST['input'];  
    } else {
        $_SESSION['output'] /= $_POST['input']; 
    }
} else if (isset($_REQUEST['exp'])) {
    $_SESSION['output'] = pow($_SESSION['output'], $_POST['input']);    
} else if (isset($_REQUEST['equal'])) {
    $_SESSION['output'] = $_POST['input'];  
} else {
    $_SESSION['input'] = 0.0;
}
?>

<form name="calculator" action="index.php" method="post">
<input class="res" type="text" readonly="readonly" size="23px" value="Result:" />
<input class="res" type="text" readonly="readonly" size="20px" value="Input:" />
<input class="res" type="text" readonly="readonly" size="10px" value="Operations:" /><br>
<input name="output" type="text" readonly="readonly"  value="<?php print ($_SESSION['output'])?    >"/>
<input name="input" type="text" onfocus="this.value=''" value="<?php print ($_SESSION['input'])?    >" />
<input id="add" name="add" type="submit" value="+" />
<input id="subtract" name="subtract" type="submit" value="-" />
<input id="multiply" name="multiply" type="submit" value="*" />
<input id="divide" name="divide" type="submit" value="/" />
<input id="exp" name="exp" type="submit" value="^" />
<input id="equal" name="equal" type="submit" value="=" />
</form>
</center>
</body>
</html>

最简单的解决方法是什么?

一个简单的解决方法是使用$\u POST变量:

替换

if (is_null($_SESSION['output'])){
    $_SESSION['output'] = "0.0"; 
}


然后用$output变量替换代码中的$_SESSION['output'.

这里是没有SESSION的相同脚本,只要不关闭/刷新页面,就可以保持会话超时

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Calculator</title>
<style type="text/css">
#add {
    color:black;
    background-color:#F55;
}
#subtract {
    color:black;
    background-color:#55f;
}
#multiply {
    color:black;
    background-color:#5f5;
}
#divide {
    color:black;
    background-color:#ff5;
}
#exp {
    color:black;
    background-color:#fa2;
}
#equal {
    color: black;
    background-color:#ccc;
}
.res {
    color: black;
    font-style: italic;
    background-color:#eee;
    border: none;
}
</style>
</head>

<body>

<?php
$lastActivity = (int)(isset($_REQUEST['last_activity']))?$_REQUEST['last_activity']:time();
$output = (float)(isset($_REQUEST['output']))?$_REQUEST['output']:0;
$input = (float)(isset($_REQUEST['input']))?$_REQUEST['input']:0;


// "Session" timeout
if(time() - $lastActivity > 60){
    $output = 0;
}

if(isset($_REQUEST['add'])){
    $output += $input; 
} else if (isset($_REQUEST['subtract'])) {
    $output -= $input; 
} else if (isset($_REQUEST['multiply'])) {
    $output *= $input; 
} else if (isset($_REQUEST['divide'])) {
    if($input == 0) {
        $output = $input;  
    } else {
        $output /= $input; 
    }
} else if (isset($_REQUEST['exp'])) {
    $output = pow($output, $input);    
} else if (isset($_REQUEST['equal'])) {
    $output = $input;  
} else {
    $input = 0.0;
}

?>
<form name="calculator" action="index.php" method="post">
    <input type="hidden" name="last_activity" value="<?php echo $lastActivity?>" />
    <input class="res" type="text" readonly="readonly" size="23px" value="Result:" />
    <input class="res" type="text" readonly="readonly" size="20px" value="Input:" />
    <input class="res" type="text" readonly="readonly" size="10px" value="Operations:" /><br>
    <input name="output" type="text" readonly="readonly"  value="<?php echo $output?>"/>
    <input name="input" type="text" onfocus="this.value=''" value="<?php echo $input?>" />
    <input id="add" name="add" type="submit" value="+" />
    <input id="subtract" name="subtract" type="submit" value="-" />
    <input id="multiply" name="multiply" type="submit" value="*" />
    <input id="divide" name="divide" type="submit" value="/" />
    <input id="exp" name="exp" type="submit" value="^" />
    <input id="equal" name="equal" type="submit" value="=" />
</form>
</body>
</html>

如果可以在解决方案中使用javascriptJQuery,我将避免使用php收集用户输入。它更适合服务器端处理。下面是重新构造的代码,以使用javascript

我从您的输入文本元素大小属性中删除了px,它不是必需的,也不会正确验证

我希望有帮助

-拉里

                  <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Calculator</title>
 <style type="text/css">
#add {
color:black;
background-color:#F55;
}
#subtract {
color:black;
background-color:#55f;
}
#multiply {
color:black;
background-color:#5f5;
}
#divide {
color:black;
background-color:#ff5;
}
#exp {
color:black;
background-color:#fa2;
}
#equal {
color: black;
background-color:#ccc;
}
.res {
color: black;
font-style: italic;
background-color:#eee;
border: none;
}


每次都是什么。使用F5键重新加载页面?为什么不使用$\u POST变量从表单中获取值,处理它们,然后输出结果?另一个问题。。有没有办法使输出字段中的0.0实际上是0.0逗号而不是0?我可以用%f强制它,但是当我这样做的时候,如果我使用除法运算,我就无法获得更高的精度。实际上,我确实尝试在没有javascript的情况下使用它:-但是谢谢
                  <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Calculator</title>
 <style type="text/css">
#add {
color:black;
background-color:#F55;
}
#subtract {
color:black;
background-color:#55f;
}
#multiply {
color:black;
background-color:#5f5;
}
#divide {
color:black;
background-color:#ff5;
}
#exp {
color:black;
background-color:#fa2;
}
#equal {
color: black;
background-color:#ccc;
}
.res {
color: black;
font-style: italic;
background-color:#eee;
border: none;
}
  <form id="calculator" name="calculator" action="index.php" method= "GET">
  <input class="res" type="text" readonly="readonly" size="23" value="Result:" />
  <input class="res" type="text" readonly="readonly" size="20" value="Input:" />
  <input class="res" type="text" readonly="readonly" size="10" value="Operations:" /><br/>
  <input id="output" name="output" type="text" readonly="readonly"  value=""/>
  <input id="input" name="input" type="text" value="" />
  <input id="add" name="add" type="button" value="+" />
  <input id="subtract" name="subtract" type="button" value="-" />
  <input id="multiply" name="multiply" type="button" value="*" />
  <input id="divide" name="divide" type="button" value="/" />
  <input id="exp" name="exp" type="button" value="^" />
  <input id="equal" name="equal" type="submit" value="=" />
  </form>

 <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <script>
 $("input").on("click",function(){//begin on click function

  //if the input elements value is not equal to "="
  if($(this).attr("value") !== "="){//begin if then

  //set the #input element to its current value plus the new value
  $("#input").val($("#input").val() + $(this).attr("value"));

  }//end if then

 });//end on click function

 $("#equal").on("click",function(e){//begin on click function

  //prevent form from submitting
  e.preventDefault();

  //evaluate the expression and store the result
  //todo:escape input if it could cause a security threat
  var expression = eval($("#input").val());

  //display the result in the #output input element
  $("#output").val(expression);

  });//end on click function

  </script>

 </body>
 </html>