php没有在html中按下提交按钮执行功能

时间:2014-10-25 14:55:16

标签: php html

所以我得到了这段代码,我还在学习,而且我不知道问题会是什么,问题是这样做是不安全的吗?

<?php
    print_form();
    if(isset($_POST['calculate'])){
        process_form();
    }
    function process_form(){
        switch($_POST){
            case "addition":
                print $_POST['operand1'] + $_POST['operand2'];
                break;
            case "subtraction":

                break;
            case "multiplication":

                break;
            case "division":

        }
    }
    function print_form(){
        print <<<HTML
            <html>
                <head><title>Learning Php</title></head>

                <body>
                    <form method="POST" action="">
                        Operand 1: <input type="text" name="operand1"><br>
                        Operand 2: <input type="text" name="operand2"><br>
                        <select name="operation">
                            <option value="addition"> Addition </option>
                            <option value="subtraction"> Subtraction </option>
                            <option value="multiplication"> Multiplication </option>
                            <option value="division"> Division </option>
                        </select>
                        <input type="submit" name="calculate" value="calculate">
                    </form> 
                </body>
            </html>
HTML;
    }
?>

是不是在执行process_form()还是在按下按钮时重置计算值?

3 个答案:

答案 0 :(得分:1)

您需要切换$_POST['operation']

网站上的大多数漏洞都是将数据保存到数据库,向用户展示其他用户数据。像这样的代码似乎没有任何安全问题,但echo似乎比print更受欢迎,用于输出数据。

答案 1 :(得分:0)

在您的switch语句中,您应该将switch($_POST)更改为switch($_POST['operation'])

我可以看到你将select标签与名称​​ operation 匹配,然后你做了数学运算。

因此,如果您想获得select标记的正确值,则必须使用$_POST['operation']

答案 2 :(得分:0)

在函数调用中,传递post数据并使用参数或参数定义函数,如下所示

if(isset($_POST['calculate'])){
        process_form($_POST['calculate']);
    } 
function process_form($arg){
    switch($arg){
        case "addition":
            print $_POST['operand1'] + $_POST['operand2'];
            break;
        case "subtraction":

            break;
        case "multiplication":

            break;
        case "division":

    }