#php #sql #variables #require-once
#php #sql #переменные #требовать-один раз
Вопрос:
У меня есть база данных Sql, в которой есть таблица, содержащая: Адрес электронной почты, компания, название. Когда я делаю запрос к этой базе данных и сравниваю адреса электронной почты, я также получаю trim($row['company'])
amp; trim($row['name'])
, так что компания и имя человека, связанные с этим адресом электронной почты, также выводятся.
Моя проблема заключается в следующем: я использую require_once на основе trim($row['company'])
amp; trim($row['name'])
, который связан с адресом электронной почты. Например.
require_once "/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/" . trim($row['name']) . "/example.php";
Итак, используя приведенный выше пример, скрипт затем указывает на example.php скрипт расположен в каталоге, используя переменные company и name, которые он получил из базы данных, на основе электронного письма.
Если у меня есть 2 электронных письма, в которых говорится, что каждое из них от одной и той же компании, поэтому trim ($ row [‘company’]) останется прежним, но 2 электронных письма назначены разным пользователям, поэтому trim ($ row [‘name’]) будет другим. Есть ли способ, чтобы при использовании require_once я мог иметь оба example.php скрипты в обоих каталогах выполнены? Спасибо!
Ответ №1:
Не используйте require_once, а только require (или включите, если вам так удобнее).
Комментарии:
1. Вы должны обосновать это предложение, потому что оно не добавляет никакого значения, если просто сказать: do X
Ответ №2:
Это выглядит небезопасно
Это выглядит небезопасно, если вы не выполняете надлежащий экранирование, поскольку пользователь может ввести произвольные символы и нанести вред вашему скрипту. (т. Е. привести к другому скрипту, например, при вводе имени «.. /AnotherUser»)
Ответ
Но да, вы можете включить все скрипты для конкретной компании, используя glob для перечисления всех каталогов в определенном каталоге:
foreach(glob("/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/*", GLOB_ONLYDIR) as $userDir) {
require_once($userDir."/example.php");
}
Комментарии:
1. Пользователь не может ввести другое имя пользователя. Эти данные сохраняются в базе данных при регистрации пользователей, поэтому, как только они регистрируются со своим email, именем и компанией, они не могут попасть в другой пользовательский каталог.
2. Что у меня есть, так это. У меня есть скрипт, который проверяет мой почтовый ящик на наличие непрочитанных электронных писем. Если есть непрочитанные электронные письма, он посмотрит на адрес электронной почты, с которого оно пришло (придет от разных людей, разных компаний и т.д. и т.п.), А затем возьмет вложение из этого электронного письма и поместит его в свой каталог на основе названия компании и имени пользователя, связанного с этим адресом электронной почты в базе данных. Если у меня есть 2 непрочитанных электронных письма от 2 разных «пользователей» в одной компании, как мне выполнить оба из них example.php скрипты?
3. Если вы не проверяете значение, которое хранится в базе данных, то возникает проблема безопасности. И почему вы не можете выполнить свой скрипт один раз для каждого непрочитанного электронного письма?
Ответ №3:
Для того, чтобы сделать это, вам нужно извлечь более 1 строки из вашей базы данных. Таким образом, в результате вы получите массив массивов. Например:
$result = array(
0 => array('email' => 'alex@abc.com', 'name' => 'Alex', 'company' => 'ABC'),
1 => array('email' => 'beth@xyz.com', 'name' => 'Beth', 'company' => 'XYZ')
);
Как только вы извлекаете подобные данные, вы должны использовать следующий код для запуска скрипта для каждого из них:
foreach ($result as $row)
{
require('/var/www/vhosts/default/htdocs/' . trim($row['company']) . '/Users/' . trim($row['name']) . '/example.php');
}
Что касается того, как извлечь несколько строк для всех электронных писем из вашей базы данных, это зависит от вашего кода БД, поэтому я не могу реально помочь, не видя, что вы используете.