0

好的,我正在网站上创建一个挑战系统。我将在每个步骤中列出到达提交按钮所在的位置会发生什么,希望这有助于使其更容易理解..

网站页面的每个用户旁边都列出了一个挑战按钮。

当您单击挑战按钮时,会弹出一个模式窗口,显示每个用户角色。模式窗口中列出的每个角色在角色详细信息下方都有自己的挑战按钮,每个角色的左侧是一个列出您的角色的下拉菜单。(正在查看页面的当前登录用户)

现在我想要的是登录用户必须在挑战按钮激活服务器端代码/功能/它需要的任何内容之前从下拉列表中选择他们的一个字符。

一旦登录的用户从下拉菜单中选择了他们的角色之一。他们可以单击挑战按钮,它将激活我已经创建的一个函数,该函数将创建一个 custom_post_type,然后上传一个通用特色图像,该特色图像将显示在主页滑块上。

之后,屏幕上会出现另一个弹出窗口,显示挑战成功与否。请记住,这已经在 MODAL 窗口中,因此可以说它是弹出窗口之上的弹出窗口。

我几乎知道关于 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 的机制),

同时:页面定期检查服务器的质询请求(再次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 接收两个变量,如果contender(即选择)包含一个不同于 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 将对选择值做任何你想做的事情,并最终返回一个 OK 或一个错误。例如:

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

您可以将该输出定向到您的灯箱/弹出窗口以创建您的第二个模式窗口。

另外,我建议使用 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,如果你想做那样的事情,你必须使用 PHP Ajax。在这里,您可以找到帮助您了解 Ajax 的链接。

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

于 2012-04-16T12:32:12.553 回答