【问题标题】:Undefined Variable - PHP未定义变量 - PHP
【发布时间】:2017-08-06 22:36:33
【问题描述】:

我有一个变量在我的项目中无法识别,但它已正确删除。这是我的文件的规格。我有一个这样的 index.php 控制器:

            try {
                $sql = 'SELECT costi.id, costo, descrizione, categoria FROM costi INNER JOIN categorie ON id_categoria = categorie.id';
                $result = $pdo->query($sql);
            } catch (PDOException $e) {
                $error = 'errore nel recupero del dato '. $e->getMessage();
                include 'error.html.php';
                exit();
            }   

            //FOREACH
            foreach ($result as $row) {
                $costi[] = array(
                    "id"=>$row['id'],
                    "costo"=>$row['costo'],
                    "descrizione"=>$row['descrizione'],
                    "categoria"=>$row['categoria']
                );
            }

            include 'review.html.php';

这里是 review.html.php:

                <?php foreach($costi AS $costo): ?>
                    <table style="width:40%">
                    <form action="?cancella_costo" method="POST" >
                    <tr>
                        <th class="a"><p class="inline"><?php echo htmlspecialchars($costo['descrizione'], ENT_QUOTES, 'UTF-8'); ?></p></th>
                        <th class="a"><p class="inline"><?php echo htmlspecialchars($costo['costo'], ENT_QUOTES, 'UTF-8'); ?> </p></th>
                        <th class="a"><p class="inline"><?php echo htmlspecialchars($costo['id_categoria'], ENT_QUOTES, 'UTF-8'); ?> </p></th>
                        <th class="none"><input type="hidden" value="<?php echo $costo['id'] ?>" name="id"></th>
                        <th><input type="submit" value="cancella"></th>
                        <!-- <th><button name="action" value="update">Modifica</button></th> -->
                    </tr>

                    </form>
                    </table>
                <?php endforeach ?>

我还有一个带有两个表的数据库:“costi”和“categorie”,它们的结构如下:

成本:https://imgur.com/a/56utE 分类:http://imgur.com/9iMHfYm

我的问题是在我的 index.php 中声明并在我的 review.html.php 中使用的 $costi 变量。在最后一个文件中,我得到了这个错误:

Notice: Undefined variable: costi in /Applications/MAMP/htdocs/provePhp/myWallet 2/app/review.html.php on line 24

Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/provePhp/myWallet 2/app/review.html.php on line 24

有人知道为什么吗? 变量声明了,为什么不识别?

【问题讨论】:

  • 在哪里声明的?你做了$costi = array();吗?
  • 在 PHP 中,从技术上讲,您不需要在尝试向其添加数组元素之前声明变量。但这通常会导致问题。我怀疑您的问题是该变量从未在您的 foreach 循环中动态声明,因为 $result 为空。尝试var_dumping 看看它是否包含您所期望的内容。
  • 你能给我举个例子吗?我没有得到我必须做的事情。

标签: php variables undeclared-identifier


【解决方案1】:

从您在此处粘贴的这段代码中,变量 $costi 没有被声明。

尝试如下更改:

        $costi = [];
        // check whether the $result is array before looping
        if (is_array($result) {
        foreach ($result as $row) {
            $costi[] = array(
                "id"=>$row['id'],
                "costo"=>$row['costo'],
                "descrizione"=>$row['descrizione'],
                "categoria"=>$row['categoria']
            );
        }
        }

同样,您也可以在循环之前签入视图文件。

【讨论】:

  • 只是补充一点:$costi 变量可能没有被定义,因为查询失败,或者返回一个空的结果集。
  • 我试过像你说的“Prasanth Pillai”。我不再收到错误消息,但我也没有使用像这样声明 costi 变量从 costi 和 categorie 表中获取任何数据。
  • 这可能是因为您的 SQL 没有返回任何数据。复制sql直接在mysql中执行,先看看有没有结果。
  • 我没有从查询中得到任何信息。很奇怪,因为我在数据库中有数据。可能是什么问题?
  • 伙计,没有看到我们无法评论的数据。请检查两个表中是否有类别id的匹配记录
【解决方案2】:

好的,我终于找到了答案。 在我的问题中,我确实忘记了您还显示“aggiungi_costo.php”文件。它允许用户向数据库添加成本。这是文件:

<form action="?" method="post">
    <div>
        <label for="descrizione">Aggiunti la descrizione della spesa</label>
        <input type="text" id="descrizione" name="descrizione"> 
        <br>
        <label for="costo">Aggiungi l'importo della tua spesa</label>
        <input type="text" name="costo" id="costo">
        <br>
        <label for="id_categoria">A quale categoria apprtiene questa spesa:</label>
        <select multiple name="idcategoria" id="idcategoria">
        <?php foreach($categorie as $categoria): ?>
            <option><?php echo htmlspecialchars($categoria['categoria'], ENT_QUOTES, 'UTF-8'); ?></option>
        <?php endforeach ?>
        </select>       
        </div>
    <div><input type="submit" value="Aggiungi"></div>
</form>

我确实忘记将 value 属性添加到选项标签(此字符串):

value="<?php echo htmlspecialchars($categoria['id'], ENT_QUOTES, 'UTF-8'); ?>"

没有它,我的选择查询将无法工作,因为“id.categoria”列没有从“aggiungi_costo.php”表单发送的正确值。

将 value 属性添加到表单中,将数据添加到 DB 的查询开始正常工作,检索数据的 SELECT 查询也开始工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2020-10-22
    • 2019-09-18
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2017-11-18
    相关资源
    最近更新 更多