【问题标题】:PHP Variable undefined for eval functioneval 函数的 PHP 变量未定义
【发布时间】:2021-02-02 07:16:08
【问题描述】:

我是 PHP 和一般编码的新手。 目前我正在尝试制作一个简单的计算器。 为此,我有两个脚本calculator.php 和array.php 我的想法是将用户提供的所有输入存储在一个数组中,以便我可以使用 eval() 函数计算它们。因为我需要一个字符串,所以我使用 foreach 循环转换了数组。 但是当我尝试在 foreach 循环之外使用变量时,出现以下错误:

注意:第 17 行的数组到字符串的转换 大批 解析错误:语法错误,意外的 ';',在 /Applications/XAMPP/xamppfiles/htdocs/dashboard/array.php(22) 中需要 '(' : eval()'d code on line 1

我可以做些什么来解决这个问题?

array.php

<?php

session_start();

if (!is_array($_SESSION)) {
    $_SESSION['persistentValues'] = array();
}

if (isset($_POST['button'])) {
    $_SESSION['persistentValues'][] = $_POST['button'];
}



foreach ($_SESSION as $value) {
    echo $value;
}


if (isset($_POST["result"])) {
  $p = eval($value.";");
  echo $p;
}

?>

calculator.php

<?php

include ('./array.php');

?>


<div style="padding-left:40px">
        <h2> PHP Calculator</h2>
        <form method="post" action="">

            Enter value: <input type="text" name="value"> <br> <br>
            <div style="padding-left: 105px">
                <input type="submit" value="9" name="button">
                <input type="submit" value="8" name="button">
                <input type="submit" value="7" name="button">
                <input type="submit" value="+" name="button">
                <br>
                <input type="submit" value="6" name="button">
                <input type="submit" value="5" name="button">
                <input type="submit" value="4" name="button">
                <input type="submit" value="-" name="button" style="padding-left: 9px">
                <br>
                <input type="submit" value="3" name="button">
                <input type="submit" value="2" name="button">
                <input type="submit" value="1" name="button">
                <input type="submit" value="/" name="button" style="padding-left: 9px">
                <br>
                <input type="submit" value="0" name="button" style="padding-left:33px">
                <input type="submit" value="." name="button" style="padding-right:9px">
                <input type="submit" value="x" name="button" style="padding-left: 7px">
                <br>
            </div>
            <br>
                <input type="submit" value="Calculate" name="result">
        </form>
    </div>

【问题讨论】:

  • 我想你想要foreach ($_SESSION['persistentValues'] as $value)
  • if (!is_array($_SESSION))也应该是if (!is_array($_SESSION['persistentValues']))
  • @Barmar 当我使用它时,数组会显示,但我收到错误通知:未定义的索引:persistentValues 警告:为 foreach() 提供的参数无效注意:未定义的变量:值
  • @Barmar 这修复了错误。当我现在加载页面时,我可以输入我的数字,但是当我点击计算时,eval 函数仍然没有输出。

标签: php arrays foreach eval


【解决方案1】:

您反复将整个 $_SESSION 变量与 $_SESSION['persistentValues'] 混淆。后者是您在提交按钮时按住按钮的位置。

$value 的值是一个数组,因为您正在循环 $_SESSION 来设置它,而会话变量的值是一个数组。 eval() 的参数是一个字符串,当你将数组转换为字符串时,它就变成了字符串Array,这不是一个可以计算的表达式。

您可以使用implode() 将数组的所有元素连接成一个字符串。因此,如果会话数组包含['9', '3', '+', '8'],它会将$value 设置为'93+8',然后您可以将其传递给eval()

eval() 的参数需要是一个语句。所以你应该把echo 命令放在参数中。

<?php
session_start();

if (!is_array($_SESSION['persistentValues'])) {
    $_SESSION['persistentValues'] = array();
}

if (isset($_POST['button'])) {
    $_SESSION['persistentValues'][] = $_POST['button'];
}

$value = implode('', $_SESSION['persistentValues']);
echo $value;

if (isset($_POST["result"])) {
  eval("echo $value;");
}
?>

【讨论】:

  • 在输入计算并按下结果按钮后,我收到以下错误:注意:未定义的索引:第 13 行 /Applications/XAMPP/xamppfiles/htdocs/dashboard/array.php 中的持久值警告: implode():在第 13 行的 /Applications/XAMPP/xamppfiles/htdocs/dashboard/array.php 中传递的参数无效解析错误:语法错误,意外的 ';'在 /Applications/XAMPP/xamppfiles/htdocs/dashboard/array.php(17) 中:第 1 行的 eval() 代码
  • 错字:persistenValues 应该是persistentValues
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 2015-12-03
  • 2011-08-28
  • 2011-06-21
  • 2016-04-21
  • 2011-05-24
  • 1970-01-01
相关资源
最近更新 更多