Создайте переменную с именем из строки ИЛИ создайте строку из имени переменной - PullRequest
0 голосов
/ 29 марта 2012

Итак, все это произошло из-за нежелания проверять каждый POST в огромном операторе If с множеством AND, например:

if(isset($_POST[$question], $_POST[$choice1], $_POST[$choice2], $_POST[$choice3], $_POST[$choice4], $_POST[$choice5], $_POST[$password]) && 
    strlen(question > 0) &&
    strlen(choice1 > 0) &&
    strlen(choice2 > 0) &&
    strlen(choice3 > 0) &&
    strlen(choice4 > 0) &&
    strlen(choice5 > 0) &&
    strlen(password > 0)) 
{
    $cat=$_POST['cat'];
    $question=$_POST['question'];
    $choice1=$_POST['choice1'];
    $choice2=$_POST['choice2'];
    $choice3=$_POST['choice3'];
    $choice4=$_POST['choice4'];
    $choice5=$_POST['choice5'];
    $password=$_POST['password'];
}
else{
    //Incorrect password or missing data
}

Вместо этого я создал массив со строкой для каждой переменной, которую я хотел проверить, и цикл foreach для запуска моих тестов

//create array with all wanted variables
$variables = array('cat', 'question', 'choice1', 'choice2', 'choice3', 'choice4', 'choice5', 'password');
$returnError = FALSE;
//run through array to check that all have been posted and meet requirements
foreach($variables as $var) {
    if(!isset($_POST[$var]) || !strlen($_POST[$var]) > 0) {
        $returnError = TRUE;
        break;
    }
}

Теперь я хочу взять имена строк и создать переменные с тем же именем

//create array with all wanted variables
$variables = array('cat', 'question', 'choice1', 'choice2', 'choice3', 'choice4', 'choice5', 'password');
$returnError = FALSE;
//run through array to check that all have been posted and meet requirements
foreach($variables as $var) {
    if(!isset($_POST[$var]) || !strlen($_POST[$var]) > 0) {
        $returnError = TRUE;
        break;
    }
    else{
        global $*/variable named $var*/ = $_POST[$var];
    }
}

Это возможно? Если нет, то как бы я сделал нечто подобное с массивом переменных, например так:

$variables = array($cat,$question,$choice1,$choice2,$choice3,$choice4,$choice5,$password);

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Вы можете использовать Переменные , хотя это не рекомендуется.

global $$var = $_POST[$var];
0 голосов
/ 29 марта 2012

Используйте eval ();http://www.php.net/eval

Имейте в виду, что создание переменной с помощью eval () из данных публикации может представлять угрозу безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...