如果您要进行任何复杂的计算,最好在其中进行计算,PHP
原因如下:
- 支持PHP中的大多数数学类型,而MySQL中没有那么多。
- 在 PHP 中,您可以处理带有响应的失败方程式,如果您在数据库服务器上执行它们,则必须提取错误,分析并确定发生了什么。
- 数据库是为存储数据而设计的,PHP 是一种用于运行程序(和方程式)的编程语言。
- 您可以将方程式存储在安全的数据库表中,然后随意通过 PHP 运行它们。
名称中的任何内容MySQL
仅适用于数据库。你正在做一些额外的事情。我假设因为您正在提取一个查询(尽管您没有显示查询),所以您将方程式存储在数据库中。
当您使用时,mysqli_fetch_array()
您已经将结果从数据库中提取到一个数组中,因此无需调用它两次。while()
除非将其加载到现有的 var 或数组中,否则在语句中提取的任何内容都将一直存在。
将查询存储在数据库中是一个棘手的问题,因为您可以$
使用单引号存储一个字符,并将其作为一个文字字符,以便稍后用于评估。
<?php
//If the vars are set then we're ready for processing
if(!empty($_POST['var1'])&&!empty($_POST['var2'])){
$query = 'select * from equations';
$result = mysqli_query($query) or die(mysqli_error());
//Create the array for storing the equations
$equations = array();
while($row = mysqli_fetch_array($result)){
$id = $row['id'];
$equation = $row['id'];
//store the equations into the array
$equations[$id]=$equation;
}
//Do some sort of check here... I'm expecting a number
if(is_numeric($_POST['var1'])){
$var1 = $_POST['var1'];
} else {
//set a default (not 0)
$var1 = 1;
}
//Do some sort of check here... I'm expecting another number
if(is_numeric($_POST['var2'])){
$var2 = $_POST['var2'];
} else {
//set a default (not 0)
$var2 = 1;
}
//Cool little function for doing equations with 2 vars being passed.
function doEquation($eq,$var1,$var2){
//eg. $eq = '$var1+$var2';
eval("\$answer=\"$eq\";");
return $answer;
}
$code = "<!doctype html>\n<html>\n<body>\n";
$code .= "<table style='padding:4px;border:none;'><tr><th>Table Header</th></tr>";
foreach($equations as $id=>$eq){
$answer = doEquation($eq,$var1,$var2);
$code .= "<tr><td>Answer $id = $answer</td></tr>\n";
}
$code .= "</table>";
$code .= "</body></html>";
} else {
//No vars set we can show them the form for the calculations.
$code = "<!doctype html>\n<html>\n<body>\n";
$code .= "<form method='post'>";
$code .= "Enter Var1<br>";
$code .= "<input type='number' name='var1' value='1' />";
$code .= "Enter Var2<br>";
$code .= "<input type='number' name='var2' value='1' />";
$code .= "<input type='submit' name='submit' value='Calculate' />";
$code .= "</form>";
$code .= "</body></html>";
}
print $code;
?>
您需要小心一些计算。您必须键入并检查所有传入的变量。例如,您不能除以 0,因为它会引发错误。也可以加载一个非常复杂的方程式,其中包含足够的信息来使服务器崩溃。请记住,将要解析的任何进入服务器的内容都需要过滤并检查您的预期。您不想使用echo
命令并让某人开始将$_SERVER
vars 扔到屏幕上。
还因为在我的示例中,我们使用eval()
您希望确保这不能执行用户提交的任何其他方程或函数。strip_tags()
依此类推。由于我的示例需要一个数字,因此我正在检查它是否为is_numeric
.