从下拉列表中获取信息并在while循环中提交按钮?

时间:2014-03-31 22:01:35

标签: php loops while-loop submit

我正在使用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循环和这种下拉列表+提交按钮系统来设置我正在尝试使用的方式进行培训?

对那些经验丰富的编码员说:我很抱歉你必须阅读这些可怕的代码,每当我偶然发现问题时,我都是一个懒散的人。不是学习创建好代码的最好方法,我担心;)

3 个答案:

答案 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']);

似乎一切正常:)