Выполнение 2 скриптов на основе разных переменных - PullRequest
0 голосов
/ 04 мая 2011

У меня есть база данных Sql, в которой есть таблица, содержащая: Email, Company, Name. Когда я делаю запрос к этой базе данных и сравниваю адреса электронной почты, я также получаю trim($row['company']) & trim($row['name']), так что компания и имя лица, связанного с этим адресом электронной почты, также отключаются.

Моя проблема заключается в следующем: я использую require_once на основе trim($row['company']) & trim($row['name']), который связан с адресом электронной почты. Ex.

require_once "/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/" . trim($row['name']) . "/example.php";

Таким образом, используя приведенный выше пример, сценарий затем указывает на сценарий example.php, расположенный в каталоге, используя переменные компании и имени, полученные из базы данных на основе электронной почты.

Если у меня есть 2 электронных письма, в которых говорится, что каждое из них относится к одной и той же компании, поэтому trim ($ row ['company']) останется прежним, но 2 электронных письма назначаются разным пользователям, поэтому trim ($ row ['name') ]) было бы по другому. Есть ли способ, когда я использую require_once, чтобы я мог выполнять оба сценария example.php в обоих каталогах? Спасибо!

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Это выглядит небезопасно

Это выглядит небезопасно, если вы не выполняете правильное экранирование, поскольку пользователь может ввести произвольные символы и нанести вред вашему сценарию. (то есть привести к другому сценарию, как при вводе имени "../AnotherUser")

Ответ

Но да, вы можете включить все сценарии для конкретной компании, используя glob для перечисления всех каталогов в определенном каталоге:

foreach(glob("/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/*", GLOB_ONLYDIR) as $userDir) {
    require_once($userDir."/example.php");
}
0 голосов
/ 04 мая 2011

Для этого вам нужно извлечь более 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');
}

Что касается получения несколькихстроки для всех электронных писем из вашей базы данных, которые зависят от кода вашей БД, поэтому я не могу помочь, не видя, что вы используете.

0 голосов
/ 04 мая 2011

Не используйте require_once, а только require (или включайте, если вам лучше).

...