PHP中的未定义变量
我已经为自定义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 ...)。
我们发布的代码不会进行任何创建,因此该问题不会源于这段代码。
未定义的通知来自<?= $ 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
?)。