我正在使用while循环来列出我的游戏中的“角斗士”以及他们设置的训练类型。我希望用户能够使用下拉菜单设置培训。所以页面看起来像:
角斗士1 培训:未设置。 下拉菜单|提交按钮
角斗士2 训练:力量 下拉菜单|提交按钮
......依此类推,所有观众都注册了用户ludus。下拉菜单包含您可以为每个角斗士选择的不同类型的培训。
我使用的代码是这样的:
<?php
session_start();
include("header.php");
if(!isset($_SESSION['uid'])){
echo "You must be logged in to view this page!";
}
$uid=$_SESSION['uid'];
$husinfotemp=mysql_query("SELECT * from `hus` WHERE `id`='$uid'") or die (mysql_error());
$husinfo=mysql_fetch_assoc($husinfotemp) or die (mysql_error());
$nrofglads=$husinfo['nrofgladiators'];
$gladiatorsinfotemp=mysql_query("SELECT * FROM `gladiators`") or die (mysql_error());
$totalglads=mysql_num_rows($gladiatorsinfotemp);
$counter=1;
$countertotal=1;
while ($counter<=$nrofglads) {
while ($countertotal<=$totalglads) {
$gladiatorsinfotemp2=mysql_query("SELECT * FROM `gladiators` WHERE `gladiatorid`='$countertotal'") or die (mysql_error());
$gladiatorsinfo=mysql_fetch_assoc($gladiatorsinfotemp2) or die (mysql_error());
$ludusid=$gladiatorsinfo['ludusid'];
if ($ludusid==$uid) {
$name=$gladiatorsinfo['name'];
$traininginfotemp=mysql_query("SELECT * FROM `training` WHERE `gladiatorid`='$countertotal'") or die (mysql_error());
$traininginfo=mysql_fetch_assoc($traininginfotemp);
$trainingtype=$traininginfo['trainingtype'];
$trainingtypetext=trainingtotext($trainingtype);
?><font size="3"><?php
echo "<a href=gladiator.php?gladiatorid=$countertotal>$name</a>";?>
</font><br /><?php
echo "Training: ".$trainingtypetext.".";
?>
<form action="">
<select name="training">
<option value="1">Strength</option>
<option value="2">Agility</option>
<option value="3">Quickness</option>
<option value="4">Stamina</option>
<option value="5">Attacks</option>
<option value="6">Defence</option>
<option value="7">Sword</option>
<option value="8">Mace</option>
<option value="9">Pole</option>
<option value="10">Dagger</option>
<option value="11">Unarmed</option>
<option value="12">Net</option>
<option value="13">Shield</option>
<option value="14">Sparring</option>
</select>
<input type="submit" class="button" value="submit" name="one"/>
</form><?php
if(isset ($_POST['one'])) {
if ($_POST['training']=='1') {
$trainingtype=1;
$updtraining=mysql_query("UPDATE `training` SET `trainingtype`='$trainingtype' WHERE `gladiatorid`='$countertotal'") or die (mysql_error());
}else echo "2";
}
$counter++;
?><br /><?php
}
$countertotal++;
}
}
include ("footer.php");
?>
问题是,当我点击提交时,没有提交任何内容。我的问题是,是否可以使用while循环和这种下拉列表+提交按钮系统来设置我正在尝试使用的方式进行培训?
对那些经验丰富的编码员说:我很抱歉你必须阅读这些可怕的代码,每当我偶然发现问题时,我都是一个懒散的人。不是学习创建好代码的最好方法,我担心;)
答案 0 :(得分:1)
就表格而言;您要为所有表单添加相同名称的相同按钮,这样您就无法区分按下了哪个按钮。
更合理的解决方案是将您处理的已发送表单放在顶部,并使用gladiatorid
为每个表单添加一个隐藏字段,以便您确切知道发送值适用于哪个项目到。
除此之外,您应该切换到PDO或mysqli,因为mysql_*
函数已被弃用。
答案 1 :(得分:0)
嗯,首先,如果您打算提交表单,您必须提供一个正确的操作源来提交表单,其次,如果您打算使用POST方法,则应该以表格形式解决这个问题。属性也是:
<form action='myfile.php' method='post'>
还有一件重要的事情,你使用折旧函数来连接和查询Mysql,你应该使用Mysqli或PDO扩展并使用绑定来防止将来的SQL注入。
答案 2 :(得分:0)
感谢您的回复。你帮助我找到了解决方案。我删除了if(isset ...部分,并使用您的提示和google-&gt;指南进行了一些工作。现在表单部分看起来像这样:
<form action="settraining.php" method="post">
<select name="training">
<option value="1">Strength</option>
<option value="2">Agility</option>
<option value="3">Quickness</option>
<option value="4">Stamina</option>
<option value="5">Attacks</option>
<option value="6">Defence</option>
<option value="7">Sword</option>
<option value="8">Mace</option>
<option value="9">Pole</option>
<option value="10">Dagger</option>
<option value="11">Unarmed</option>
<option value="12">Net</option>
<option value="13">Shield</option>
<option value="14">Sparring</option>
<input type="hidden" name="gladiatorid" value="<?php echo "$countertotal" ?>">
</select>
<input type="submit" class="button" value="submit" name="one"/>
</form>
在settraining上,我使用以下方式获取信息:
$trainingtype = htmlspecialchars($_POST['training']);
$gladiatorid=htmlspecialchars($_POST['gladiatorid']);
似乎一切正常:)