0

さて、私はウェブサイト上にチャレンジシステムを作成しています。送信ボタンがどこにあるかを各ステップでリストアップします。これにより、理解しやすくなります。

Webサイトページの各ユーザーの横にチャレンジボタンが表示されます。

チャレンジボタンをクリックすると、モーダルウィンドウがポップアップし、そのユーザーの各キャラクターが表示されます。モーダルウィンドウにリストされている各キャラクターには、キャラクターの詳細の下に独自のチャレンジボタンがあり、各キャラクターの左側には、キャラクターをリストするドロップダウンメニューがあります。(ページを表示している現在ログインしているユーザー)

今私が欲しいのは、ログインしたユーザーが、チャレンジボタンがサーバー側のコード/機能/必要なものをアクティブにする前に、ドロップダウンからキャラクターの1つを選択する必要があることです。

ログインしたユーザーがドロップダウンメニューからキャラクターの1つを選択したら。彼らはチャレンジボタンをクリックすることができ、それはcustom_post_typeを作成する私がすでに作成した関数をアクティブにし、次に注目の画像がホームページのスライダーに表示される一般的な注目の画像をアップロードします。

その後、別のポップアップが画面に表示され、チャレンジが成功したかどうかが示されます。これはすでにモーダルウィンドウにあるので、いわばポップアップよりもポップアップになることに注意してください。

私は事実上javascriptについてzipを知っており、これが厳密にPHPで実行できることを望んでいます。issetを使用すると可能になることを読みましたが、それを正常に実行する方法はまだわかりません。

何かのようなもの....

if(isset($_POST['challenge']))
{

  all of the code that happens after successful click goes here.

}

ボタンの現在のコードはこれです...

<div class="challenge_button">                           
    <form action="<?php $_SERVER['PHP_SELF'];?>" method="post">                                         
        <input type="button" name="challenge" value="Challenge">        
    </form>                                                   
</div>

ドロップダウンのサンプルコード:

チャンピオンを選ぶ

<select name="contender">                                                            
   <option value="0"> ----- </option>                                                        
   <option value="1">1</option>                                                            
   <option value="2">2</option>         
   <option value="3">3</option>                                                      
   <option value="4">4</option>                                         
   <option value="5">5</option>                                             
   <option value="6">6</option>                                             
   <option value="7">7</option>                                             
   <option value="8">8</option>                                         
</select>

可能であれば、これらすべてをどのように結び付けるのでしょうか。

何かのようなもの..............

<div class="challenge_button">  
    <?php                        
        if (((((drop-down is set return true & grab which option was set and save as variable)))))
        {
            <form action="<?php $_SERVER['PHP_SELF'];?>" method="post">                                         
                <input type="button" name="challenge" value="Challenge">        
            </form>
        }
        else
        {
            echo 'You must setup a champion before you can challenge someone.';
            echo 'div class="setup">';
            echo 'You can setup your champion <a href="#">here<a>';
            echo '</div>';
        }
    ?>
</div>

それから................

コードが正常に実行された場合、モーダルウィンドウ上にポップアップが表示されます。ページを更新したり、別のページに移動したりしたくありません。特定の変数が満たされない場合は、チャレンジ成功または失敗を示すポップアップだけです。

それほどクールではない代替ソリューションを使用しました。この方法でも、カラーボックスは機能しません。

javascript:

<script language="JavaScript">
    function loadPage(list) 
    {
        location.href=list.options[list.selectedIndex].value  
    }
</script>

変数:

                                            $cuser  =   wp_get_current_user();
                                            $v1     =   get_cimyFieldValue($cuser->ID, 'character_name');
                                            $v2     =   get_cimyFieldValue($cuser->ID, 'character_name2');
                                            $v3     =   get_cimyFieldValue($cuser->ID, 'character_name3');
                                            $v4     =   get_cimyFieldValue($cuser->ID, 'character_name4');
                                            $v5     =   get_cimyFieldValue($cuser->ID, 'character_name5');
                                            $v6     =   get_cimyFieldValue($cuser->ID, 'character_name6');
                                            $v7     =   get_cimyFieldValue($cuser->ID, 'character_name7');
                                            $v8     =   get_cimyFieldValue($cuser->ID, 'character_name8');
                                            $add    =   'http://conspirators.websitedesignbyneo.com/wp-content/themes/conspirators/single-challenge.php?';
                                            $metak  =   'class="zoom cboxelement"';
$challenged =   $v['toon_name'];

フォーム:

                                                    <form>
                                                        Choose Your Champion:
                                                        <select name="contender"
                                                            size="1"
                                                            onchange="loadPage(this.form.elements[0])"
                                                            target="_parent._top"
                                                            onmouseclick="this.focus()">
                                                                <option value="0"></option>
                                                                <?php if ($v1){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v1.'"'.$metak.'>'.$v1.'</option>';}?>
                                                                <?php if ($v2){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v2.'"'.$metak.'>'.$v2.'</option>';}?>
                                                                <?php if ($v3){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v3.'"'.$metak.'>'.$v3.'</option>';}?>
                                                                <?php if ($v4){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v4.'"'.$metak.'>'.$v4.'</option>';}?>
                                                                <?php if ($v5){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v5.'"'.$metak.'>'.$v5.'</option>';}?>
                                                                <?php if ($v6){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v6.'"'.$metak.'>'.$v6.'</option>';}?>
                                                                <?php if ($v7){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v7.'"'.$metak.'>'.$v7.'</option>';}?>
                                                                <?php if ($v8){echo '<option value="'.$add.'challenged='.$challenged.'&challenger='.$v8.'"'.$metak.'>'.$v8.'</option>';}?>
                                                        </select>
                                                    </form>
4

4 に答える 4

2

フォームを送信する唯一の方法はボタンを押してコンテンツを送信することであるため、Javascriptを使用せずにPHPのみにしたい場合は、「更新してはならない」という制約を犠牲にする必要があります。

ただし、少しのJavascriptを使用すると、AJAXのようなものを使用してチャレンジボタンを機能させることができます。ワークフローは次のようになります。

ページの読み込み、MODAL(?)ポップアップが開き、ユーザーが[チャレンジ]をクリックし、フォームがサーバーに送信されます(XMLHTTPRequestまたはその他のAJAXのようなメカニズムを使用)。

一方、Pageは定期的にサーバーでチャレンジリクエストをチェックし(再度AJAX)、それに応じてメッセージを表示します。

お役に立てれば

于 2012-04-16T12:34:43.763 に答える
1

まず、コードに次のようなエラーがあります。エコーする必要のある配列と同様に、<form action="<?php $_SERVER['PHP_SELF'];?>" method="post">常にを返します。これを使用してください<form action="" method="post">$_SERVER<?php echo $_SERVER['PHP_SELF'];?>

次に、phpのコードとして、これはうまく機能します。POSTから2つの変数を受け取り、contender(selectである)に0とは異なる値が含まれている場合、それを$contender変数内に配置します。この時点で、この変数を関数で使用できます。

<?php if(!isset($_GET['challenge'])): ?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Choose Your Champion:

<select name="contender">                                                            
   <option value="0"> ----- </option>                                                        
   <option value="1">1</option>                                                            
   <option value="2">2</option>         
   <option value="3">3</option>                                                      
   <option value="4">4</option>                                         
   <option value="5">5</option>                                             
   <option value="6">6</option>                                             
   <option value="7">7</option>                                             
   <option value="8">8</option>                                         
</select>
<div class="challenge_button">                           
        <input type="submit" name="challenge" value="Challenge">                                                  
</div>
    </form>
<div id="result">
</div><?php endif; ?>
<?php

if ($_POST['contender']!=="0" &&        // So, the select has to be selected
    isset($_POST['challenge'])) {       // And so does the button (however you can drop this condition)
    // |    This variable contains the user's choice (from 1 to 8)
    // v
    $contender = $_POST['contender'];
    // Here goes your code or function...
}

ここで、ページをリロードせずにこれでOKまたはエラーを返す場合は、 AJAXを使用する必要があります。たとえば、次のようなJS関数を使用できます。

<script type="text/javascript">
function loadXMLDoc(btn, contender) {
var ajax;

// Code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest) {
    ajax=new XMLHttpRequest();
} else { // code for IE6, IE5
    ajax=new ActiveXObject("Microsoft.XMLHTTP");
}

ajax.onreadystatechange=function() {
if (ajax.readyState==4 && ajax.status==200) {
    document.getElementById("result").innerHTML=ajax.responseText;
}
}
ajax.open("GET","<?php echo $_SERVER['PHP_SELF'];?>?challenge=" + btn + "&contender=" + contender, true);
ajax.send();

}
</script>

このボタンと一緒に:

<input type="button" id="challenge" name="challenge" value="Challenge" onclick="loadXMLDoc(document.getElementById('challenge').value, document.getElementById('contender').options[document.getElementById('contender').selectedIndex].value)">

これは、selectとinputの現在の値を取得し(これは完全を期すためのものであり、削除できます)、関数に渡します。loadXMLDoc()関数は、GETメソッドを使用してPHPに直接転送します(理由はありません)。 POSTを使用する)。PHPは、select値を使用して必要な処理を実行し、最終的にOKまたはエラーを返します。例えば:

<?php    
if ($_GET['contender']!=="0" && isset($_GET['challenge'])) {
    $contender = $_GET['contender'];
    // Here goes your code...
    echo "All done.";
} else
    echo "Something went wrong.";

その出力をライトボックス/ポップアップに送信して、2番目のモーダルウィンドウを作成することができます。

また、jQueryを使用してすべてのAJAXを作成することをお勧めします。これにより、作業がはるかに簡単になります。

于 2012-04-16T14:59:12.440 に答える
0

私はあなたがこのようなものが欲しいと思います

<script>
$("#challenge").click(function(){
$.post("page",{"name":"value"},function(response){})
});
</script>
<div class="challenge_button">                                                       
        <input type="button" id="challenge" name="challenge" value="Challenge">                                                         
</div>
于 2012-04-16T12:30:05.713 に答える
0

そのようなPHPを使用することはできません。そのようなことをしたい場合は、PHPAjaxを使用する必要があります。ここでは、Ajaxについて理解するのに役立つリンクに移動します。

http://www.w3schools.com/php/php_ajax_database.asp

于 2012-04-16T12:32:12.553 に答える