0

私はこの構造を持つ何百もの変数を持っています:

$bsdatA = $_POST['bsdat_a'];
$bsdatB = $_POST['bsdat_b'];

..。

問題は、次のように、すべてにisset()関数を追加する必要があることです。

$bsdatA = isset($_POST['bsdat_a']) ? $_POST['bsdat_a'] : '';
$bsdatB = isset($_POST['bsdat_b']) ? $_POST['bsdat_b'] : '';

..。

これは、すべての行に手動でコピーして貼り付けることです...正規表現で実行できますか?はいの場合、誰かが私に正確な式を書き留めることができますか?それは私に多くの時間を節約するでしょう。

どうもありがとうございます。

4

4 に答える 4

2

まあ、それがどのように役立つかわからないので、正規表現ではありませんが、コーディングを大幅に簡素化できる関数を次に示します。

<?php
function postvar($index){
   return isset($_POST[$index]) ? $_POST[$index] : '';
}

$bsdatA = postvar('bsdat_a');

ちなみに、結果を変数に入れるのではなく、直接使用postvar('bsdat_a')します。これは、一度だけ使用する変数がたくさんあるリスクがあるためです。ローカル変数として使用したいことが絶対に確実な場合は、ループを使用することをお勧めし$bsdatAます。$bsdatB

<?php
foreach( range('A', 'Z') as $current ) {
   ${'bsdat'.$current} = postvar('bsdat_'.strtolower($current));
}

しかし、それはただ怖いです:)

編集:ああ、あなたは既存のスクリプトについて話していて、それを変更して多くのisset()呼び出しを含めたいですか?申し訳ありませんが、私はそれを拾いませんでした。

$ _POSTを、ArrayAccessを実装するオブジェクトに置き換えることができます。このようにして、呼び出されたが使用されていないPOST変数をログに記録することもできます。

<?php
class PostVars implements ArrayAccess {
    protected $vars;
    public $log;

    public function __construct($vars) {
        $this->vars = $vars;
    }

    public function offsetGet($offset) {
        if(!isset($this->vars[$offset])) {
            $this->log[] = $offset;
        }
        return $this->vars[$offset];

    }

    public function offsetExists($offset) {
        return isset($this->vars[$offset]);
    }

    public function offsetSet($offset, $value) {
        // readonly.
    }

    public function offsetUnset($offset) {
        // readonly.
    }
}

$_POST = array('bsdat_a' => 'bar', 'bsdat_b' => null);

$_POST = new PostVars($_POST);

echo $_POST['bsdat_a'];
echo $_POST['bsdat_b'];
于 2012-09-21T11:49:49.210 に答える
1

RegexReplacesをサポートするIDEを使用してコードを変更しようとしていると仮定します。

Eclipseの正規表現は次のとおりです。

探す:

\$(\w+) = \$_POST\['(\w+)'\]

交換:

$1 = isset(\$_POST['$2']) ? \$_POST['$2'] : '';

于 2012-09-21T11:53:27.297 に答える
0
$result = preg_replace('/\$(\w+)\s+=\s+\$_POST\[\'([^\']+)\'\];/', 
            '$\1 = isset($_POST[\'\2\']) ? $_POST[\'\1\'] : \'\';', $subject);
于 2012-09-21T11:47:44.480 に答える
0

POST変数については、次のことを試してください。import_request_variables('p'); 安全のために、2番目の引数にプレフィックスを追加することをお勧めします。

于 2012-09-21T11:48:10.830 に答える