在另一个脚本中无法读取函数中的变量

时间:2015-04-22 21:38:09

标签: php mysql

每当我将输入字段留空时,$error['commment']应设置并回显,但它不会回显,但如果我只是说echo "some text";,则回显它。 comments函数在我的functions.php文件中,$error[] = array()在我的comments()函数上方的text.php文件中给出,所以我不明白为什么它不起作用,请帮帮我们。

最后一点PHP代码在while循环中,必须显示我的SQL查询的所有结果。

我的HTML上面的代码在text.php中:

<?php

session_start();

include("connect.php");
include("functions.php");

$userId = "";

if(isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']){
    $userId = $_SESSION['id'];
}


$error[] = array();

comments();
?>

我的functions.php中的代码:

function comments(){
if (isset($_POST['submit'])) {
    $text = $_POST['text'];
    $filledIn = true;

    if (empty($text)) {
        $error['comment'] = "No text filled in";
        $filledIn = false;
    }

}

}

这是我text.php中的代码:

<?php
if(isset($error['comment'])) echo "<p class='error'>".$error['comment']."</p>";
?>

4 个答案:

答案 0 :(得分:0)

因为$error不在comments()函数的范围内。所以$error['comment']永远不会被设置。

理想情况下,您可能希望执行以下操作:

text.php

session_start();

include("connect.php");
include("functions.php");

$userId = "";

if(isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']){
    $userId = $_SESSION['id'];
}

$error['comment'] = comments();

的functions.php

function comments(){
    if (isset($_POST['submit'])) {
        $text = $_POST['text'];    
        if (empty($text)) {
            return "No text filled in";
        }
    }
    return null;
}

text.php

<?php
if(!empty($error['comment'])) echo "<p class='error'>".$error['comment']."</p>";
?>

不是直接设置数组键“comments”,而是使用comments()函数的返回值来设置它。这样可以避免使用全局变量。

修改:我从$filledIn删除了comments()变量,因为它未在提供的代码中使用。

答案 1 :(得分:0)

@ pu4cu

imo,因为你不会觉得非常先进,所以你不必对现有的代码进行许多代码更改,这可能会让你进行最小的编辑,最容易理解;

如果在你的评论函数中,你只是return来自这个函数的响应,就像一个好的小函数一样,那么当你调用函数时,当你将该函数设置为变量时,你的响应将可用。

// functions.php(注意这会将error设置为true以保证故障,但这取决于你如何使用它。将$response设置为第一行instgad中的空数组,即{{1}如果你不想让它失效保险。

array();

//的index.php     

<?php
function comments()
{
    $response = array(
            'error' => TRUE,
             'filledIn' => FALSE
    );

    if (isset($_POST['submit']))
    {
        $text = $_POST['text'];
        $response['filledIn'] = TRUE;

        if (empty($text)) 
        {
            $response['error']['comment'] = "No text filled in";
        } 
        else{
            $response['error'] = NULL;
        }
    }
    return $response;
}

// text.php

session_start();

include("connect.php");
include("functions.php");

$userId = "";

if(isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']){
    $userId = $_SESSION['id'];
}

$response = comments();

答案 2 :(得分:0)

我发现你的代码过于复杂,3个文件,2个包含和1个函数,当你真正需要的是这个:

$error = array();
$error['comment'] = empty($_POST['text']) ? "No text filled in" : $_POST['text'];
echo "<p class='error'>".$error['comment']."</p>";

答案 3 :(得分:0)

你的范围都混淆了。您的FDQuery2->SQL->Clear(); FDQuery2->SQL->Add(" SELECT C.patient_id, P.patient_name, C.check_id " " FROM Checkup C " " INNER JOIN Patient P ON (C.patient_id=P.patient_id) " " WHERE C.today = :today" + " ORDER BY C.check_id "); FDQuery2->ParamByName("today")->AsString = MaskEdit1.Text; FDQuery2->Active = true; 函数检查$ _POST,应该在调用函数之前检查它,然后尝试在其范围内设置变量,但是您尝试从外部访问相同的变量。

正确的方法是:

text.php:

comments()

的functions.php

<?php

     session_start();

     include("connect.php");
     include("functions.php");

     $userId = "";

     if(isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']){
         $userId = $_SESSION['id'];
     }


     $error[] = array();
     if (isset($_POST['submit']) {
        comments($_POST);
     }

?>

然后,您可以使用函数返回的值来处理结果。