0

Email、Company、Nameを含むテーブルを持つSQLデータベースがあります。そのデータベースでクエリを実行して電子メールアドレスを比較すると、trim($row['company'])&も取得trim($row['name'])されるため、その電子メールアドレスに関連付けられている会社と人の名前も表示されます。

私の問題はこれです:私は電子メールアドレスに関連付けられているtrim($row['company'])&に基づいてrequire_onceを使用しています。trim($row['name'])元。

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スクリプトを実行できるようにする方法はありますか?ありがとう!

4

3 に答える 3

0

これを行うには、データベースから複数の行を取得する必要があります。したがって、結果として配列の配列が得られます。例えば:

$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');
}

DBコードに依存するデータベースからすべての電子メールの複数の行を取得する方法に関しては、使用しているものを確認せずに実際に支援することはできません。

于 2011-05-04T13:41:17.303 に答える
0

これは安全ではないようです

ユーザーが任意の文字を入力してスクリプトに損害を与える可能性があるため、適切なエスケープを行わないと、これは安全ではないように見えます。(つまり、名前「../AnotherUser」を入力するときのように別のスクリプトにつながります)

答え

ただし、 globを使用して特定のディレクトリの下にあるすべてのディレクトリを列挙することにより、特定の会社のすべてのスクリプトを含めることができます。

foreach(glob("/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/*", GLOB_ONLYDIR) as $userDir) {
    require_once($userDir."/example.php");
}
于 2011-05-04T12:50:25.587 に答える
0

require_once は使用せず、require のみを使用してください (または、必要に応じて含めてください)。

于 2011-05-04T12:43:26.497 に答える