代码之家  ›  专栏  ›  技术社区  ›  David Thomas

如何从PHP访问表单的“name”变量

  •  22
  • David Thomas  · 技术社区  · 15 年前

    我正在尝试创建一个体重指数计算器。这应该允许人们使用公制或英制测量。

    我意识到我可以使用隐藏标签来解决我的问题,但这之前一直困扰着我,所以我想我会问:我可以使用 $_POST['variableName'] 查找提交的variableName字段值;但是…我不知道,也不知道如何验证哪张表格是正确的 习惯于 提交变量。

    <?php
        $bmiSubmitted     = $_POST['bmiSubmitted'];
    
        if (isset($bmiSubmitted)) {
            $height        = $_POST['height'];
            $weight        = $_POST['weight'];
            $bmi        = floor($weight/($height*$height));
    
            ?>
                <ul id="bmi">
                <li>Weight (in kilograms) is: <span><?php echo "$weight"; ?></span></li>
    
                <li>Height (in metres) is: <span><?php echo "$height"; ?></span></li>
    
                <li>Body mass index (BMI) is: <span><?php echo "$bmi"; ?></span></li>
    
                </ul>
            <?php
        }
    
        else {
        ?>
    
        <div id="formSelector">
    
        <ul>
            <li><a href="#metric">Metric</a></li>
            <li><a href="#imperial">Imperial</a></li>
        </ul>
    
            <form name="met" id="metric" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart">
    
                <fieldset>
                    <label for="weight">Weight (<abbr title="Kilograms">kg</abbr>):</label>
                        <input type="text" name="weight" id="weight" />
    
                    <label for="height">Height (<abbr title="metres">m</abbr>):</label>
                        <input type="text" name="height" id="height" />
    
                    <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" />
                </fieldset>
    
                <fieldset>
                    <input type="reset" id="reset" value="Clear" />
    
                    <input type="submit" id="submit" value="Submit" />
                </fieldset>
            </form>
    
            <form name="imp" id="imperial" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart">
    
                <fieldset>
    
                <label for="weight">Weight (<abbr title="Pounds">lbs</abbr>):</label>
                    <input type="text" name="weight" id="weight" />
    
                <label for="height">Height (Inches):</label>
                    <input type="text" name="height" id="height" /
                <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" />
                </fieldset>
    
                <fieldset>
                    <input type="reset" id="reset" value="Clear" />
                    <input type="submit" id="submit" value="Submit" />
                </fieldset>
            </form>
    
        <?php
        }
    ?>
    

    我用metric验证了它的有效性(尽管目前没有验证——我不想把我的问题挤得太多);我已经添加了表单,但还没有为imperial添加处理。

    11 回复  |  直到 8 年前
        1
  •  91
  •   Peter Mortensen Sumit Kumar    3 年前

    要识别提交的表单,您可以使用:

    • “提交”按钮的名称或值。

    表单的名称不会作为表单的一部分发送到服务器 POST 数据

    您可以按如下方式使用代码:

    <form name="myform" method="post" action="" enctype="multipart/form-data">
        <input type="hidden" name="frmname" value=""/>
    </form>
    
        2
  •  16
  •   Peter Mortensen Sumit Kumar    3 年前

    您可以这样做:

    <input type="text" name="myform[login]">
    <input type="password" name="myform[password]">
    

    检查发布的值

    if (isset($_POST['myform'])) {
        $values = $_POST['myform'];
    
        // $login = $values['login'];
        // ...
    }
    
        3
  •  13
  •   Paolo Bergantino    15 年前

    未提交表单名称。您只需在每个表单中添加一个隐藏字段,然后结束。

        4
  •  9
  •   Peter Mortensen Sumit Kumar    8 年前

    post ):

    <input type="submit" value="save" name="commentData">
    

    在PHP文件中:

    if (isset($_POST['commentData'])){
        // Code
    }
    
        5
  •  5
  •   Peter Mortensen Sumit Kumar    3 年前

    $_POST 使用Ajax/jQuery提交时。

        6
  •  2
  •   Community prosti    7 年前

    petervandijck.com 需要指出的是,如果您在某种登录系统后面或在其他代码中嵌入该代码,则该代码可能容易受到XSS攻击。

    <?php echo "$weight"; ?>
    

    你应该写:

    <?php echo htmlentities($weight); ?>
    

    甚至可以更好地写为:

    <?=htmlentities($weight); ?>
    
        7
  •  2
  •   Peter Mortensen Sumit Kumar    3 年前

    您可以在表单的action参数中使用GET,我在创建登录/注册组合页面时都会使用该参数。

    例如: action="loginregister.php?whichform=loginform"

        8
  •  2
  •   Peter Mortensen Sumit Kumar    3 年前

    对于每个表单,请在“提交”按钮上使用唯一值,如下所示

    文件

    <form method="post" action="bat/email.php">
        <input type="text" name="firstName" placeholder="First name" required>
        <input type="text" name="lastName" placeholder="Last name" required>
        <button name="submit" type="submit" value="contact">Send Message</button>
    </form>
    
    <form method="post" action="bat/email.php">
        <input type="text" name="firstName" placeholder="First name" required>
        <input type="text" name="lastName" placeholder="Last name" required>
        <button name="submit" type="submit" value="support">Send Message</button>
    </form>
    

    email.php

    <?php
        if (isset($_POST["submit"])) {
            switch ($_POST["submit"]) {
                case "contact":
                    break;
                case "support":
                    break;
                default:
                    break;
            }
        }
    ?>
    
        9
  •  1
  •   Peter Mortensen Sumit Kumar    3 年前

    我有一个类似的问题,这就引出了这个问题。我回顾了前面的所有答案,但最终我找到了自己的解决方案:

    <form name="ctc_form" id="ctc_form" action='' method='get'>
    
        <input type="hidden" name="form_nm" id="form_nm">
    
        <button type="submit" name="submit" id="submit" onclick="document.getElementById('form_nm').value=this.closest('form').name;">Submit</button>
    
    </form>
    

    它无缝、高效地完成以下任务:

    • 通过表格 名称 通过 隐藏输入 字段,而不使用易出错的 价值 属性 按钮
    • GET POST 方法。
        10
  •  0
  •   Peter Mortensen Sumit Kumar    8 年前

        11
  •  0
  •   Peter Mortensen Sumit Kumar    3 年前

    仅提交表单字段的名称,但不提交表单本身的名称。但您可以设置一个隐藏字段,其中包含名称。