проблема с флэш AS3 if / else заявления - PullRequest
0 голосов
/ 19 сентября 2011

Я пытаюсь использовать оператор if во флэш-памяти, чтобы проверить, равна ли переменная (полученная из PHP) чему-то, но что-то идет не так.

Код:

function completeHandler(event:Event):void{
    // Load the response from the PHP file
    var data:URLVariables = new URLVariables(event.target.data);
    var return_stat = data.return_stat_verify;



    if (return_stat == "FAILED"){
    status_txt.text = "dsfdsfg";
        }
        else if (return_stat == "PASSED"){

        var first_nme = data.return_first;
        var second_nme = data.return_second;
    var email_addr = data.return_email;
    var user_domain = data.return_domain;
    var user_name = data.return_username;

    gotoAndPlay("finish");

    first_txt.text = first_nme;
    second_txt.text = second_nme;
    email_txt.text =  email_addr;
    username_txt.text = user_name;
    domain_txt.text = user_domain;


    }

Теперь, когда я проверяю это, ничего не происходит. Затем я предпринимаю попытку поместить туда простой оператор else, чтобы проверить, не сработают ли оба оператора if и else if.

код:

function completeHandler(event:Event):void{
    // Load the response from the PHP file
    var data:URLVariables = new URLVariables(event.target.data);
    var return_stat = data.return_stat_verify;

    if (return_stat == "FAILED"){
    status_txt.text = "dsfdsfg";
    }
    else if (return_stat == "PASSED"){

    var first_nme = data.return_first;
    var second_nme = data.return_second;
    var email_addr = data.return_email;
    var user_domain = data.return_domain;
    var user_name = data.return_username;

    gotoAndPlay("finish");

    first_txt.text = first_nme;
    second_txt.text = second_nme;
    email_txt.text =  email_addr;
    username_txt.text = user_name;
    domain_txt.text = user_domain;


    }
    else {
        status_txt.text = "I hate flash";

    }

Теперь, когда я проверяю это, вспышка печатает «Я ненавижу вспышку» в поле status_txt. Затем я заменяю значение status_txt, чтобы распечатать переменную, которую я использую, с помощью операторов if (return_stat):

else {
            status_txt.text = return_stat;

        }

Затем, когда я проверяю его, он показывает либо ПРОЙДЕН, либо НЕ УДАЛЕН. Это означает, что проблема не в PHP, так как он возвращает правильные данные, и проблема заключается в операторах If.

Я полностью потерян здесь. Я не вижу ничего, что я сделал неправильно, есть идеи?

Спасибо, ребята.

EDIT

Мой PHP-код:

<?php

require ('installation_5_functions.php');
require ('cust_ver_i.php');


$username=$_POST['userName'];

$ident_encrypt=$_POST['userPsswrd'];


verify($reference_id, $username, $ident_encrypt);


if ($ref_id_stat == "FAILED"){

$retrn_stat = "FAILED";

print "return_value=$error_ref_id&return_stat_verify=$retrn_stat";  

exit();

}
if($ref_id_stat == "PASSED"){

if ($user_verify_status == "FAILED"){

$retrn_stat = "FAILED";


print "return_value=$user_verify_error&return_stat_verify=$retrn_stat";

}

elseif ($user_verify_status == "PASSED"){

if ($cust_status == "DEACT"){

$retrn_stat = "FAILED";

print "return_value=$display_error_stat&return_stat_verify=$retrn_stat";    

}
elseif ($cust_status == "ACTIVE"){

$retrn_stat = "PASSED"; 

print "return_first=$cust_first&return_second=$cust_last&return_email=$cust_email&return_username=$cust_username&return_domain=$cust_domain&return_stat_verify=$retrn_stat";

}

}
}



?>

Ответы [ 4 ]

2 голосов
/ 19 сентября 2011

Часто возникают проблемы с пробелами.Например, если

data.return_stat_verify == 'FAILED  '

Когда вы поместите его в TextField, разница не появится.Чтобы проверить, так ли это, вы можете попробовать:

// place a character on both sides. That will show whether there is whitespace
status_txt.text = "|"+return_stat+"|";

РЕДАКТИРОВАТЬ

Похоже, это случай ниже.Это означает, что вам нужно обрезать ввод.Во-первых, убедитесь, что в файле PHP нет лишних пробелов (у вас последняя строка как ?> или пустая строка в конце? Пустая строка за пределами ?> вызовет описанную вами проблему.

Затем, ради безопасности, также проверьте ввод. Лично я бы использовал StringUtil.trim, потому что это наиболее явно, и потому что большинство языков имеют какой-то способ сделать что-тов противном случае, я бы использовал регулярное выражение, чтобы исправить это:

// using two to be explicit
// /^\s+/m this removes all occurrences of one or more spaces at the beginning
return_stat = return_stat.replace(/^\s+/m, "");
// /\s+$/m this removes all occurrences of one or more spaces at the end
return_stat = return_stat.replace(/\s+$/m, "");

Конечно, вы могли бы просто вставить его в строку:

// use the global flag if you are doing this all at once.
return_stat = return_stat.replace(/^\s+|\s+$/mg, "");
0 голосов
/ 19 сентября 2011

Проблема может быть вызвана закрывающим тегом php: ?> Смотри: Зачем опускать закрывающий тег?

Любой пробел после этого тега будет добавлен к любому выводу на печать / эхо. Хотя дополнительные пробелы на html-странице не вызовут проблем, в вашем случае это проблема. Это легко пропустить, поэтому лучше избегать использования закрывающего тега в этих случаях или действительно удостовериться, что после тега нет никаких символов.

0 голосов
/ 19 сентября 2011

Хорошо, мне удалось решить проблему. Я поместил exit(); внизу каждого оператора if / else в скрипте php, и теперь он работает. Не имеет смысла, что так когда-либо, но это добилось цели.

Спасибо за вашу помощь.

0 голосов
/ 19 сентября 2011

Может быть, вы не получаете String в качестве возврата с сервера? Попробуйте проверить тип возврата.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6#typeof

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