PHP中的未定义变量

时间:2020-03-06 14:58:06  来源:igfitidea点击:

我已经为自定义CMS继承了一些代码,这超出了我的常规,并一直绊在相同的错误上,注意:未定义的变量:/Applications/MAMP/htdocs/Chapman/Chapman_cms/admin/team-2.php中的媒体在第48行。这应该创建新用户并编辑旧用户。但是,当我尝试添加新用户时,它不起作用。

以下是相关代码:

$db = new database("mysql",$dbHost,$dbName,$dbUser,$dbPass);
$target = 'add';
if ($_GET['task'] == 'edit') {
$media = $db->get_row(edit_media_item($db, $_GET['team_id']));
$target = 'update';

<p><label for="copy">Full Name:</label>
    <input type="text" name="title" value="<?=$media['title']?>" />
    <textarea name="media" id="media" cols="30" rows="5" style="width: 100%"><?=$media['copy']?></textarea></p>
    <input type="hidden" name="process" value="<?=$target.",copy,4,team-1,".$media['id'].""?>">
    <p><input type="submit" name="save" value="Submit" />
    <input type="reset" name="reset" value="Reset" /></p>
    </form>

任何帮助将非常感激。

解决方案

该通知无关紧要,但是此代码不会创建任何内容。这会在其提交到的页面上发生。查看前几行的if语句。我想我们需要使用URL中的task = edit来调用它。

可能很难帮到我们,但是,我会看到此$ db-> get_row()调用的去向及其返回的内容(使用var_dump()或者其他方法)。

作为一般性提示,我建议在系统中设置调试器,以便我们可以跟踪调用。在Windows平台上,当我不确定调用层次结构时,我将xdebug与WinCacheGrind配合使用来跟踪调用。在Linux上,设置类似(xdebug,kcachegrind ...)。

我们发布的代码不会进行任何创建,因此该问题不会源于这段代码。

未定义的通知来自&lt;?= $ media ['copy']?>位。从未定义$ media。如果这不是问题,请忽略它,并告诉PHP不要输出通知。这并不是一个很好的做法,但是如果我们没有获得报酬来修复所有小事情,我会说这是一个可行的选择。

要禁止发布通知,请在发布通知之前的任何位置添加此代码,或者最好将其添加到全局包含中:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

有关更多信息:http://www.php.net/error_reporting

以正确的方式删除通知是通过代码执行此操作

<?php if(isset($media['copy'])){ echo $media['copy']; } ?>

我们还可以使用at符号,如下所示:

if($_GET['undefined_key']) {
    // blah...
}

if(@$_GET['undefined_key']) {
    // blah...
}

它抑制了警告,但是有人会认为使用at符号的最佳时间是避免出现其他情况无法避免的警告。

该错误消息不是来自此代码。

在我们提供的代码的第6行中分配了$ media($ media = $ db-> get_row(..))。我猜想我们或者已经剥离了相关代码(在第48行上,给出/获取),或者文件是错误的文件(是来自/ Applications / MAMP / htdocs / Chapman / Chapman_cms / admin / team-2的文件) .php?)。