isset检查,空检查和初始化后的变量未定义

时间:2018-04-03 02:35:01

标签: php

我有一个控制结构,根据请求uri生成一个页脚,但我收到的错误是:

Notice: Undefined variable: modalResponse in C:\xampp\htdocs\SoftwareAPIs\tribeca-app\foot.php on line 25

Notice: Undefined variable: modalResponse in C:\xampp\htdocs\SoftwareAPIs\tribeca-app\foot.php on line 26

但这就是foot.php的样子:

<?php 
    if ($_SERVER["REQUEST_URI"] === "/tribeca-app/home/") {
        echo "<footer id='homeFooter'>

        <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

        </footer>

        <script src='/tribeca-app/js/bundle.js'></script>
        <script src='index.js'></script>
        if (isset($modalResponse)) {
            echo $modalResponse;
        }
        </body>
        </html>";
    } else {
        echo "<footer>

        <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

        </footer>

        <script src='/tribeca-app/js/bundle.js'></script>
        <script src='index.js'></script>
        if (isset($modalResponse)) {
            echo $modalResponse;
        }
        </body>
        </html>";
    }

?>

包含foot.php的视图由我的index.php控件提供,这是定义变量的地方。我只是不明白为什么我的isset()不起作用。这是index.php控件:

<?php

// Dependencies
session_start();
require_once "../db.php";
require_once "model.php";

// Serve the view if it is navigated to
if (empty($_POST) && empty($_GET) && empty(file_get_contents("php://input"))) {
    $pageTitle = "Register";
    include "../view/register.php";
    exit;
}

// Receive and filter input
$name = strval(filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING));
$username = filter_input(INPUT_POST, "username", FILTER_SANITIZE_EMAIL);
$password = filter_input(INPUT_POST, "password", FILTER_SANITIZE_STRING);

// Server side validation
if ($name === "") {
    $modalResponse = "<script>showModal(`You must fill out your name.`)</script>";
    exit;
} if ($username === "") {
        $modalResponse = "<script>showModal(`You must fill out your email.`)</script>";
        exit;
} if ($password === "") {
        $modalResponse = "<script>showModal(`You must provide a password.`)</script>";
        exit;
} if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
        $modalResponse = "<script>showModal(`You must provide a valid email.`)</script>";
        exit;
}

// Check if user already exists
if (checkUser($username)) {
    // username already exists
}

// Hash password and insert into database
$password = password_hash($password, PASS_ALGO);
$result = registerUser($name, $username, $password);

if ($result === 1) {
    $_SESSION["modalResponse"];
} else {
    $modalResponse;
}

为什么我的设置不会阻止我的php错误?

4 个答案:

答案 0 :(得分:3)

您的isset未被评估为php,仅modalResponse。这是因为双引号中不是php变量名的所有内容都被视为字符串。

要将语句评估为PHP,请尝试以下方法:

 <script src='index.js'></script>
 ". if (isset($modalResponse)) {
        echo $modalResponse;
 } . "
 </body>

答案 1 :(得分:1)

简单明了,你走了。 你只需要切掉你的回声来恢复PHP逻辑。

<?php 
    if ($_SERVER["REQUEST_URI"] === "/tribeca-app/home/") {
        echo "<footer id='homeFooter'>

        <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

        </footer>

        <script src='/tribeca-app/js/bundle.js'></script>
        <script src='index.js'></script>";
        if (isset($modalResponse)) {
            echo $modalResponse;
        }
        echo "</body>
        </html>";
    } else {
        echo "<footer>

        <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

        </footer>

        <script src='/tribeca-app/js/bundle.js'></script>
        <script src='index.js'></script>";
        if (isset($modalResponse)) {
            echo $modalResponse;
        }
        echo"</body>
        </html>";
    }

?>

答案 2 :(得分:0)

您正在将if语句键入为字符串。你可以尝试类似的东西:

if ($_SERVER["REQUEST_URI"] === "/tribeca-app/home/") {
    $modalResponse = isset($modalResponse) ? $modalResponse : "" ;
    echo "<footer id='homeFooter'>

    <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

    </footer>

    <script src='/tribeca-app/js/bundle.js'></script>
    <script src='index.js'></script>
    $modalResponse
    </body>
    </html>";
} else {
    echo "<footer>

    <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

    </footer>

    <script src='/tribeca-app/js/bundle.js'></script>
    <script src='index.js'></script>
    $modalResponse
    </body>
    </html>";
}

答案 3 :(得分:0)

你的foot.php有问题。你已经在""内写了你的整个php,因为它被认为是一个字符串。将您的代码更改为。

    if ($_SERVER["REQUEST_URI"] === "/tribeca-app/home/") {
    ?> <footer id='homeFooter'>

    <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

    </footer>

    <script src='/tribeca-app/js/bundle.js'></script>
    <script src='index.js'></script><?php
    if (isset($modalResponse)) {
        echo $modalResponse;
    } ?>
    </body>
    </html> <?php
} else { ?>
    <footer>

    <p>Created by <a href='https://mcgurkconsulting.com' title='McGurk Consulting'>Adam McGurk</a> &copy; <span id='currentYear'></span> </p>

    </footer>

    <script src='/tribeca-app/js/bundle.js'></script>
    <script src='index.js'></script> <?php
    if (isset($modalResponse)) {
        echo $modalResponse;
    } ?>
    </body>
    </html>
}

用此

替换您的代码