PHP摆脱“如果”条件,继续下一部分 - php

我现在正在实现Ajax,服务器端编程语言是PHP。
我需要为我的Web应用程序创建一个Ajax表单验证和输入系统。

$redirectPage = $redirectTime = '';

if($a == 'register') {
    $data = array('name', 'username', 'password', 'gender', 'emailaddress');
    $required = array('name', 'username', 'password');

    foreach($data as $field) {
        if(in_array($field, $required) && (!isset($_POST[$field]) || $_POST[$field] == '')) {
            $type = 'danger';
            $message = 'Please enter all required fields.';
            // *1
        } else {
            $$field = $_POST[$field];
        }
    }

    // Continue with register process
    // Set the redirectPage and redirectTime for JavaScript setTimeout here
} else {
    $type = 'warning';
    $message = 'You usually won\'t be able to see this. But if you did, that means you are trying to hack my website!';
    return;
}

$retval = json_encode(
    array(
        'Type' => $type,
        'Message' => alert($type, $message), // my own function, not important here
        'RedirectPage' => $redirectPage,
        'RedirectTime' => $redirectTime,
    )
);

echo $retval; // The value here will send back to my Ajax

如您所见,即使post字段不在必需的数组中,我也没有停止处理过程。最后,它将继续其余的过程。

对于* 1:
这是我尝试在此处放置一些保留字的地方。

继续:对于有经验的程序员,应该注意,只有在满足条件的情况下,它才会退出,并继续下一个foreach循环。

退出:剩下的代码将不会处理,在超时之前,绝不返回我的Ajax。

休息:我以为它会退出

if($a == 'register')

,但是没有发生。

goto:除了它的唯一方法,我不想被恐龙吃掉。

对于其余的代码,添加if条件,检查$type是否已设置为'danger':我不想这样做...(但是,这是唯一的方法...)

谢谢。

参考方案

我并不完全确定我理解这个问题,但是我相信可以通过添加一些范围来解决您遇到的问题。我重构了您的代码,希望它能为您指明正确的方向。

function sendResponse ($type, $message, $redirectPage, $redirectTime) {

    $retval = json_encode(
        array(
            'Type' => $type,
            'Message' => alert($type, $message), // my own function, not important here
            'RedirectPage' => $redirectPage,
            'RedirectTime' => $redirectTime,
        )
    );

    echo $retval; // The value here will send back to my Ajax
}

function sendRequiredResponse ($redirectPage, $redirectTime) {

    $type = 'danger';
    $message = 'Please enter all required fields.';

    sendResponse($type, $message, $redirectPage, $redirectTime);
}

function sendHackResponse ($redirectPage, $redirectTime) {

    $type = 'warning';
    $message = 'You usually won\'t be able to see this. But if you did, that means you are trying to hack my website!';

    sendResponse($type, $message, $redirectPage, $redirectTime);
}

function sendRegisteredResponse ($redirectPage, $redirectTime) {

    $type = 'success';
    $message = 'Registration successfull';

    sendResponse($type, $message, $redirectPage, $redirectTime);
}

function register($redirectPage, $redirectTime) {

    $data = array('name', 'username', 'password', 'gender', 'emailaddress');
    $required = array('name', 'username', 'password');

    foreach($data as $field) {

        if(in_array($field, $required) && (!isset($_POST[$field]) || $_POST[$field] == '')) {

            /**** registration stops *****/
            return sendRequiredResponse($redirectPage, $redirectTime);
        }

        $$field = $_POST[$field];
    }

    // Continue with register process
    // Set the redirectPage and redirectTime for JavaScript setTimeout here

    sendRegisteredResponse($redirectPage, $redirectTime);
}

$redirectPage = $redirectTime = '';

if($a === 'register') {
    register($redirectPage, $redirectTime);
} else {
    sendHackResponse($redirectPage, $redirectTime);
}

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP-从最后一个循环中删除逗号 - php

我在循环时有一个PHP,如果是最后一个循环,我想从,中删除​​最后一个逗号echo '],'; while($ltr = mysql_fetch_array($lt)){ echo '['; echo $ltr['days']. ' ,'. $ltr['name…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…