激活 PHP 函数的提交按钮
Submit Button that activates a PHP function
好的,我正在网站上创建一个挑战系统。我将在每个步骤中列出到达提交按钮的位置会发生什么,希望这有助于使其更容易理解。
网站页面的每个用户旁边都列出了一个挑战按钮。
当您单击挑战按钮时,会弹出一个模态窗口,显示每个用户角色。模态窗口中列出的每个角色在角色详细信息下方都有自己的挑战按钮,每个角色的左侧都有一个下拉菜单,列出了您的角色。(正在查看页面的当前登录用户)
现在我想要的是登录用户必须在挑战按钮激活服务器端代码/功能/需要的任何内容之前从下拉列表中选择他们的一个角色。
登录用户从下拉菜单中选择其中一个字符后。他们可以单击挑战按钮,它将激活我已经制作的功能,该功能将创建一个custom_post_type,然后上传一个通用的特色图像,该图像将显示在主页滑块上。
之后,屏幕上会发生另一个弹出窗口,上面写着挑战成功与否。 请记住,这已经在模态窗口中,因此可以说它是弹出窗口上的弹出窗口。
我几乎知道javascript,我希望这可以严格用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>
如果你希望它只是没有Javascript的PHP,你将不得不牺牲"不得刷新"约束,因为提交表单的唯一方法是按下按钮并提交内容。
但是,通过一点Javascript,您可以使用类似AJAX的东西使挑战按钮工作。工作流可能如下所示:
页面加载,MODAL(?)弹出窗口打开,用户点击"挑战",表单提交到服务器(使用 XMLHTTPRequest 或其他类似 AJAX 的机制),
同时:页面会定期检查服务器的质询请求(再次使用 AJAX),并相应地显示消息。
希望这有帮助
首先,您的代码中存在一个错误,如下所示: <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)">
它所做的是获取选择和输入的当前值(这是为了彻底起见,您可以删除它),并将它们传递给 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的东西,它使它更容易。
我想你想要这样的东西
<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>
你不能那样使用PHP,如果你想做这样的事情,你必须使用PHP Ajax。在这里,您可以找到帮助您了解Ajax的链接。
http://www.w3schools.com/php/php_ajax_database.asp
- 带有验证和隐藏字段值的提交按钮
- 如何在 API 调用后和 if 语句中启用提交按钮
- 提交按钮,该按钮位于使用 Excel VBA 的 Javascript 中
- 如何使用提交按钮搜索表中的记录
- 在单击按钮前后禁用提交按钮
- 在表单完成并确认密码之前,请禁用提交按钮
- 如何使用Java脚本创建提交按钮's的拖放功能
- 如何在单击“提交”按钮时为“新建”窗口编写JavaScript,用“确定”和“取消”显示注册信息
- 提交按钮通过JQuery和JavaScript函数所做的更改不会持续
- 从输入时提交到jQuery,无需提交按钮,无需表单操作
- onclick提交按钮JSP
- 通过提交按钮传递值
- 如果ng单击附加到提交按钮,则表单未验证
- 如何在Razor MVC 5.2.3 Ajax中使用多个提交按钮
- 使用提交按钮隐藏未选中的单选按钮
- Ruby/JS如何在提交按钮后重新加载页面
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 使用javascript后,提交按钮不起作用
- 如何使用jQuery/Ajax响应特定的提交按钮
- 表单中的提交按钮在 PHP 打印中不起作用