0

入力フィールドとDBテーブルからの電子メールの配列があります。

入力フィールドと配列の類似性を比較しています。

しかし、どういうわけか、私はループで立ち往生しています。

そのループチェックは、各電子メールを入力フィールドと比較しますか?

私が同じように入力したかどうかに関係なく、それは常に私をgoogle.comに連れて行きます

コントローラからのコードは次のとおりです。

if (isset($_POST['btn_free_download']))
                {
                    // Get current input email from input field
                    $email = $this->getRequest()->getParam('email');
                    // Get all emails from the user
                    $referred_users = $this->_helper->user()->getReferredUsers()->toArray();
                    // Check the similarity which it with a loop
                    foreach ($referred_users as $referred_user)
                    {
                       similar_text($email, $referred_user['email'], $similar);
                    }
                    // If yes, Pop up message or redirect to some page
                    if ($similar < 97)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }
 }
4

1 に答える 1

1

マニュアルを確認する必要があると思います。Foreach関数は、zend、その他のフレームワーク、またはrawphpでのみ使用する場合と同じです。

$referred_users = $this->_helper->user()->getReferredUsers()->toArray();

$ referred_usersは、おそらくテーブルユーザーからの一連の電子メールを保持します。

$referred_users = array("one@email.com", "two@email.com", "three@email.com")

次に、foreachループを使用すると、配列内の各電子メールを繰り返し処理します

foreach ($referred_users as $referred_user)
{
   // for the first loop $referred_user = one@email.com, for second time $referred_user = two@email.com and goes on
    similar_text($email, $referred_user['email'], $similar);
}

ここであなたの論理について議論しましょう:

                   // If yes, Pop up message or redirect to some page
                    if ($similar < 97)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }

配列$referred_usersの最後の要素が$emailと完全に等しくなるまで、およびそれ以外の場合

i.e. $email = "three@email.com"

あなたは常に97%未満の$similarの結果を与えられます。これはあなたがグーグルにリダイレクトされることを意味します。

これは、あなたがやろうとしておらず、おそらくforeach関数に精通していないと思います。そのため、期待した結果が得られません。

次のようなことをしようとしていると仮定して、配列内の電子メールのいずれかが一致するかどうかを配列内で確認します(配列がテーブルからのものである場合は、paramから入力された電子メールがテーブル内のいずれかの電子メールと等しいかどうかを確認します)。どこかにリダイレクトするか、メッセージを表示してください。以下の解決策が役立つかもしれません。

   $similarText = false;
   foreach ($referred_users as $referred_user)
   {
       // for the first loop $referred_user = one@email.com, for second time $referred_user = two@email.com and goes on
        similar_text($email, $referred_user['email'], $similar);
        if ($similar > 97) {
            $similarText = true;
            break;
        }
    }


                   // If yes, Pop up message or redirect to some page
                    if ($similarText)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }

あなたがアイデアを得たことを願っています。ただし、今後質問を投稿する前に、マニュアルを確認してください。

于 2013-02-01T03:54:01.850 に答える