首页 > 解决方案 > 无法从 PHP 函数回显或打印

问题描述

我在从我的 PHP 回显或打印到我的 HTML 时遇到问题。我确信我缺少一些关于 PHP 工作原理的基本知识,但是我无法在 Internet 或此处找到有关此问题的任何信息。我很困惑,因为我根本没有收到错误或任何有关问题的上下文。我的其余代码工作正常,除了 echo。

我通常使用 echo() 进行测试以确保东西存在,但是在这个应用程序的整个开发过程中这个问题一直困扰着我。它现在才让我感到困扰,因为我需要回显一个脚本来加载数据(我将在使用 Vue 加载后隐藏它)。

奇怪的是,这个问题只发生在我使用 if 做事的区域内,尤其是当它有 array_key_exists 时。

如果有人可以提供帮助,我将不胜感激(或者如果有人可以为我提供一个更好的主意,让我将 json 数据从 PHP 传输到 JavaScript,而不是必须回显它,因为这会在我的代码中打开一个弱点,让用户欺骗我的点击器游戏)。

我试图在我的代码的其他部分对此进行测试,结果相同。我不能在任何 if 语句中使用 echo() 或 print()。不过,我可以在其他地方使用它。

通过使用 require,我所有的 PHP 文件最终都在我的 index.php 中

<?php
    if (array_key_exists("saveData", $_POST)) {
        $saveData = $_POST['saveData'];
        $token = $_COOKIE['validToken'];
        $token = mysqli_real_escape_string($link, $token);
        $query = "UPDATE userData SET saveData = '$saveData' WHERE token = '$token' LIMIT 1";
        mysqli_query($link, $query);
    }
    if (array_key_exists("logSubmit", $_POST)) {
        $email = $_POST["logEmail"];
        $email = filter_var($email, FILTER_SANITIZE_EMAIL); // Clean Email
        $email = filter_var($email, FILTER_VALIDATE_EMAIL); // Confirm Valid Email
        $query = "SELECT saveData FROM userData WHERE email = '$email' LIMIT 1";
        $loadData = mysqli_query($link, $query);
        echo("SALO Ready!");
    }
?>

我希望这会呼应“SALO Ready”,但我什么也没得到。

编辑: PHP 的白屏死机不起作用或不适用。我的应用程序中的其他所有内容都按预期工作

更新#1:我按照建议进行了一些测试,发现当我从 if 语句中回显时,会发生以下两种情况之一

1) echo() 触发,在 Chrome 上的 Network 下的预览中,您可以看到它,但它不会显示在 DOM 中。任何不满足以下情况的 if 语句都是这种情况。

2) 如果 echo() 从用于注册或登录的块中触发,它也不会显示在预览中。我将重组我的代码,让那些在提交时由表单调用的函数,而不是它们只是条件块。虽然此代码不包含在此问题中,但初始登录也会运行以下代码以加载用户数据。

更新#2:我已经整合了我的代码并遵循了一些建议。我的代码现在位于函数内部,由一些 if isset 条件触发。这实际上部分解决了我的问题。我可以从我的所有功能(注册、登录、保存、加载)中回显。现在我的问题似乎是下面与输出缓冲有关的评论。虽然我最初的问题(大部分)已解决,但有人能帮助解释如何解决这个问题吗?我现在只有 ob_start(),然后是我的函数,if isset 条件,然后是我的应用程序中的所有其他内容。我怎样才能让回声转到他们的 DOM?我将在下面包含我的代码块,这些代码绝对需要在路上回显。

编辑:我已经改变了在我的代码中设置 ob_start() 的方式。我在需要它的函数中调用它,然后再刷新它。今晚晚些时候我将使用我的加载脚本进行测试,以尝试强制 echo() 退出函数。甚至在此编辑之前,对于为什么它在函数中不起作用但在函数之外起作用的原因确实感到困惑

function load() {
    $link = // Link Excluded for Security ;
    if (mysqli_connect_error()) {
        die ("DB Connection Error");
    }
    $email = $_POST["logEmail"];
    $email = filter_var($email, FILTER_SANITIZE_EMAIL); // Clean Email
    $email = filter_var($email, FILTER_VALIDATE_EMAIL); // Confirm Valid Email
    $query = "SELECT saveData FROM userData WHERE email = '$email' LIMIT 1";
    $loadData = mysqli_query($link, $query);
    mysqli_close($link);
    echo("Loading Triggered!");
}
if(isset($_POST['logSubmit'])) {
    login();
    load();
}

如前所述,当我单击 primary.php 并单击预览时,这显示了网络选项卡内的 echo(),它只是不会进入 DOM

标签: php

解决方案


只需使用将代码保留在函数中并在发布输入时调用函数名称

前任:

function yourFunctionName(){
    if (array_key_exists("saveData", $_POST)) {
        $saveData = $_POST['saveData'];
        $token = $_COOKIE['validToken'];
        $token = mysqli_real_escape_string($link, $token);
        $query = "UPDATE userData SET saveData = '$saveData' WHERE token = '$token' LIMIT 1";
        mysqli_query($link, $query);
    }
    if (array_key_exists("logSubmit", $_POST)) {
        $email = $_POST["logEmail"];
        $email = filter_var($email, FILTER_SANITIZE_EMAIL); // Clean Email
        $email = filter_var($email, FILTER_VALIDATE_EMAIL); // Confirm Valid Email
        $query = "SELECT saveData FROM userData WHERE email = '$email' LIMIT 1";
        $loadData = mysqli_query($link, $query);
        echo("SALO Ready!");
    }
}

推荐阅读