您可以使用下面的代码生成一个包含每行提交按钮的表
function GetPlayer($link){
if (isset($_SESSION['username'])) {
$x = 0;
$sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; ";
$result = mysqli_query($link,$sql);
while($row = mysqli_fetch_assoc($result)){
if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates
echo ("<tr>");
echo ("<th>".$row['username']." </th>");
echo ("<th>Level: ".$row['Level']." </th>");
echo ("<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>");
echo ("<th>Win Chance: ");
echo CalculateWinChance($link,$row['Defence']);
echo ("<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>");
echo ("</tr>");
}
}
}
}
现在我需要这个按钮来调用2个函数并将某些值传递给这些函数
以这种方式生成但使用相同功能的按钮示例位于
之下if(isset($_POST['Dummy_Btn'])){
$winChance = CalculateWinChance($link,5);
Train($link,1,1,$winChance);
}
调用传入5的两个函数来返回一个不同的值,然后传递给另一个函数
我如何获取$ row [&#39; Attack&#39;]等数据,并且与其他每个生成的提交按钮不同。
我一直在读关于ajax这可以用于这种情况吗?
答案 0 :(得分:2)
这样做的最佳方式就是利希什所说的。
在表单中创建隐藏字段。您还可以通过将回声分配给变量并回显该变量来减少使用的回声量。
function GetPlayer($link){
if (isset($_SESSION['username'])) {
$x = 0;
$sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; ";
$result = mysqli_query($link,$sql);
while($row = mysqli_fetch_assoc($result)){
if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates
$toEcho = "<tr>";
$toEcho .= "<th>".$row['username']." </th>";
$toEcho .= "<th>Level: ".$row['Level']." </th>";
$toEcho .= "<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>";
$toEcho .= "<th>Win Chance: ";
$toEcho .= CalculateWinChance($link,$row['Defence'];
$toEcho .= "<input type='hidden' name='Hiiden1' value='YOUR NUMBER' />";
$toEcho .= "<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>";
$toEcho .= "</tr>";
echo $$toEcho;
}
}
}
}
然后你可以通过..
获得隐藏变量的值if(isset($_POST['Dummy_Btn'])){
$hidden = $_POST["hidden1"];
$winChance = CalculateWinChance($link,5);
Train($link,1,1,$winChance);
}
现在你可以按照自己的意愿使用它。
答案 1 :(得分:0)
您可以将每一行设为自己的形式,并在每个表单上包含隐藏的输入值。您可以使用按钮类型提交,并使值不同于文本(我认为)攻击。只有在尝试加载/处理数据而不想重新加载整个页面时,Ajax才有用。 - Leeish 2分钟前
此。
您需要重新考虑您的方法。在您的示例中,您甚至不会使用&#34; Dummy_Btn&#34;的值。所以我不确定你想要完成什么......
如果您可以更详尽地说明您尝试通过表单传递的数据以及您希望对所述数据执行的处理,我们很乐意帮助您开始运行。
答案 2 :(得分:0)
解决方案是,
首先将提交输入元素封装在<form>
中,并将$row['Attack']
值附加到表单元素的action
属性,如下所示:
function GetPlayer($link){
if (isset($_SESSION['username'])) {
$x = 0;
$sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; ";
$result = mysqli_query($link,$sql);
while($row = mysqli_fetch_assoc($result)){
if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates
?>
<tr>
<th><?php echo $row['username']; ?></th>
<th>Level: <?php echo $row['Level']; ?></th>
<th>Player Stats:<?php echo $row['Attack'] . "/" . $row['Defence']; ?></th>
<th>Win Chance:</th>
<?php echo CalculateWinChance($link,$row['Defence']); ?>
<form method="post" action="your_page.php?attack=<?php echo $row['Attack']; ?>">
<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>
</form>
</tr>
<?php
}
}
}
}
注意:请勿忘记更改表单action
属性中的 your_page.php 。
然后按以下方式处理表单,
if(isset($_POST['Attack_Btn'])){
$attack = $_GET['attack'];
// call those two functions
$winChance = CalculateWinChance($link, $attack);
Train($link,1,1,$winChance);
}