1

$_POST["username"] 入力に基づいて、特定の Web サイトに $page 変数を設定するためのハードコーディングされた if/else ステートメントがあります (後でヘッダーで使用する場合: ".page")。

コード:

if ($_POST["username"] == "username1@domain1.com") {
$page = "http://www.google.com";
}
 else if ($_POST["username"] == "username2@domain1.com"){
$page = "http://www.yahoo.com";
}
 else if ($_POST["username"] == "username1@domain2.com"){
$page = "http://www.stackoverflow.com";
}
 else if ($_POST["username"] == "username2@domain2.com"){
$page = "http://www.serverfault.com";
}
 else if ($_POST["username"] == "username@domain3.com"){
$page = "http://www.superuser.com";
}
 else if (!preg_match($domain2.com, $_POST["username"]))  { //THIS IS VERY WRONG
$page = "http://www.backblaze.com";
}
else{
$page = "DefaultBackupPage.php";
}

ユーザー名の末尾に「@domain.com」が含まれている場合、$page をこの場合は backblaze.com に設定しますが、何でもかまいません。

私はそれが面倒であることを認識していますが、実際にはこの実装は好きではありません。このスキーマに収まる必要があり、迅速な修正が必要です!

現在受け取っているエラーは、正規表現が空であるというものです。PHP を知っている人にとって、これが簡単なことであることを願っています。

4

2 に答える 2

1
if (preg_match('/@domain2\.com$/i',$_POST['username']))

で終わるユーザー名をキャッチしますdomain2.com。ドットのエスケープ バックスラッシュに注意してください。逆にテストしたい場合 (aka. がで終わらないdomain2.com場合) は、関数の前に感嘆符を使用しpreg_match()ます。

これはあなたが求めていたものですか?

EDIT 1:パターンにフラグを追加しiて、大文字と小文字を区別しない一致を探すようにしました。

EDIT 2:読みやすさと制御のために、代わりにこれを関数でラップしますが、それは私自身の好みであるため、推奨されるアプローチなどではありません。コードが長くて複雑な場合…</p>

function get_page($username) {
    $username = strtolower($username);
    switch ($username) {
        case "username1@domain1.com"    : return "http://www.google.com";
        case "username2@domain1.com"    : return "http://www.yahoo.com";
        case "username1@domain2.com"    : return "http://www.stackoverflow.com";
        case "username2@domain2.com"    : return "http://www.serverfault.com";
        case "username@domain3.com"     : return "http://www.superuser.com";
    }
    return preg_match('/@domain2\.com$/',$username) ?
    "http://www.backblaze.com" : "DefaultBackupPage.php";
}

$page = get_page($_POST['username']);
于 2012-10-29T02:21:16.990 に答える
0

この線:

 else if(!preg_match($domain2.com, $_POST["username"]))

である必要があります:

 else if(!preg_match("/domain2\.com/", $_POST["username"])) 
于 2012-10-29T02:21:32.950 に答える