php include () не работает - PullRequest
       43

php include () не работает

0 голосов
/ 23 сентября 2011

Я делаю простую программу для взаимодействия с базой данных.Я взял переменную username от пользователя в файле с именем «connect_database.php» и назвал ее $ un.Затем я пытаюсь получить доступ к этой переменной в другом файле, где я должен отправить имя пользователя в базу данных с запросом.Каждая переменная в запросе прошла, кроме имени пользователя, поэтому я пришел к выводу, что это произошло из-за моего использования include ().Любая помощь?

include ("connect_database.php");

mysql_query("INSERT INTO `my_proj`. `inci` (
    `type`, `date`, `time`, `reporter`, `ID`, `desc`)
    VALUES ('$typeinc', CURDATE(), CURTIME(), '$un' ,NULL, '$text');"
) or die(mysql_error());

Ответы [ 5 ]

2 голосов
/ 23 сентября 2011

Я бы изменил include() на require(), так как ваша программа не работает без него. Они одинаковы, однако require завершит выполнение, если файл не может быть включен.

Затем, как только вы убедитесь, что файл действительно включен, дважды проверьте правильность установки значения:

require("connect_database.php");
var_dump($un);

Если это не сработает, вернитесь к файлу connect_database.php и проверьте правильность написания.

1 голос
/ 23 сентября 2011

Где объявлено $un? Глобально или в функции? Используется ли используемый вами запрос там, где его нет в функции? Если это так, переменная не доступна оттуда. См. переменная область действия .

Может быть, вам нужно где-то global $un; или назначить $ un для $GLOBALS['un'] и ссылаться на него таким образом.

1 голос
/ 23 сентября 2011

замените include() на require_once(), посмотрите журнал ошибок apache, он покажет вам проблему.

1 голос
/ 23 сентября 2011
require_once("connect_database.php");

Следует исправить вашу проблему.

0 голосов
/ 23 сентября 2011

Возможно, вы захотите перечитать документацию по include и его братьям. Они ведут себя не так, как вы ожидаете; вместо разрешения пути включения относительно текущего файла (того, который вы просматриваете) они используют текущий рабочий каталог и путь включения, который может быть любым, в зависимости от ОС, веб-сервера, файлов конфигурации PHP и все, что было выполнено до включения. Использование require вместо include, как предлагали другие, не решит вашу проблему, но сообщит вам, не удалось ли включить заражение.

Вы можете решить проблему включения двумя способами: либо управлять текущим рабочим каталогом и путем включения, либо применять дисциплину кода, чтобы убедиться, что они не изменились; или используйте абсолютные включения - константу __FILE__ в сочетании с dirname можно использовать для эмуляции поведения, которое должно было быть по умолчанию.

Кстати, способ объединения строк в запросы - это атака SQL-инъекцией, ожидающая своего исполнения. Вам лучше отойти от mysql_XXXX () API сейчас и использовать что-то, что поддерживает параметризованные запросы (PDO отлично, mysqli также работает).

...