Неопределенная переменная в php - PullRequest
0 голосов
/ 01 октября 2008

Я унаследовал некоторый код для пользовательской CMS, который немного выходит за рамки моей лиги, и постоянно спотыкаюсь о тех же самых ошибках. Примечание: неопределенная переменная: media в / 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>

Любая помощь будет высоко ценится.

Ответы [ 6 ]

6 голосов
/ 01 октября 2008

Правильно удалить уведомление - это сделать с кодом

<?php if(isset($media['copy'])){ echo $media['copy']; } ?>
2 голосов
/ 01 октября 2008

Может быть трудно помочь вам в этом, но я бы посмотрел, куда идет этот вызов $ db-> get_row () и что он возвращает (используя var_dump () или что-то ...)

Как общий совет, я бы рекомендовал настроить отладчик в вашей системе, чтобы вы могли отслеживать вызовы. На платформе Windows я использую xdebug с WinCacheGrind для отслеживания вызовов, когда я не уверен в иерархии вызовов. В Linux настройка аналогична (xdebug, kcachegrind ...).

1 голос
/ 01 октября 2008

Вы также можете использовать символ at следующим образом:

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

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

он подавляет предупреждения, однако некоторые утверждают, что лучшее время для использования символа at - избегать предупреждений, которые вы не могли бы сделать иначе.

1 голос
/ 01 октября 2008

Уведомление не имеет значения, но этот код ничего не создает. Это происходит на странице, на которую оно отправлено. Посмотрите на утверждение if в первых нескольких строках. Я думаю, вам нужно вызвать его с помощью task = edit в URL.

0 голосов
/ 02 октября 2008

Это сообщение об ошибке не из этого кода.

$media присваивается в строке 6 предоставленного вами кода ($media = $db->get_row(..)). Я предполагаю, что вы либо удалили соответствующий код (который является строкой 48, дать / взять), либо это неправильный файл (это из /Applications/MAMP/htdocs/Chapman/Chapman_cms/admin/team-2.php?).

0 голосов
/ 01 октября 2008

Код, который вы разместили, не создает, поэтому проблема не связана с этим битом кода.

Неопределенное уведомление от бита <?=$media['copy']?>. $ media никогда не определялся. Если это не проблема, игнорируйте ее и скажите PHP не выводить уведомления. Это не совсем хорошая практика, но если вам не платят за исправление каждой мелочи, я бы сказал, что это реальная альтернатива.

Для подавления уведомлений добавьте этот код в любом месте до того, как уведомления появятся, или, что еще лучше, в глобальное включение:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

Для получения дополнительной информации: http://www.php.net/error_reporting

...