0

我今天正在尝试学习 php,我正在尝试。我在使用下拉列表、if 和 else 以及函数时遇到了问题。

似乎它不起作用。我不知道如何调试它。我想要做的是,当用户选择“受雇”时,它会简单地返回一个“做这个!” 文本。但如果用户选择 3 个中的任何一个(自雇、自愿成员和 OFW),它将显示“DO THAT!”。

这真的很简单,但我无法让它工作,我刚刚在 6 小时前开始使用 php。:)

请帮忙!

<form method="POST">

Salary: <input id="salarytext" type="text" name="salary" onkeypress="return isNumberKey(event)"><br>

Membership Type:
<select name="membershiptype">
        <option value="employed">Employed</option>
        <option value="SE">Self Employed</option>
        <option value="VM">Voluntary Member</option>
        <option value="OFW">OFW</option>
</select>

<br/>

<input type="submit" />


</form>


<?php
$a = (isset($_POST['salary'])) ? $_POST['salary'] : '';
$b = (isset($_POST['membershiptype'])) ? $_POST['membershiptype'] : '';

function employed () {
        if (empty ($a)) {echo "";}
        elseif ($a<10000) {$a * 2.0}
        elseif ($a<20000) {$a * 2.3}
        elseif ($a<30000) {$a * 2.7}
        elseif ($a>30000) {$a * 3.0}
}


function sevmofw() {
        if (empty ($a)) {echo "";}
        elseif ($a<10000) { $a * 1.3}
        elseif ($a<20000) { $a * 1.5}
        elseif ($a<30000) { $a * 1.8}
        elseif ($a>30000) { $a * 2.0}
}



if ( $_POST['membershiptype'] == 'employed' ){employed();
} elseif ( $_POST['membershiptype'] == 'SE' ){sevmofw();
} elseif ( $_POST['membershiptype'] == 'VM' ){sevmofw();
} elseif ( $_POST['membershiptype'] == 'OFW' ){sevmofw();
}

?>

这是我正在尝试做的流程图。

在此处输入图像描述

4

3 回答 3

1
<select name="membershiptype" method="POST">
        <option value="Employed" name="employed">Employed</option>
        <option value="SE" name="sevmofw">Self Employed</option>
        <option value="VM" name="sevmofw">Voluntary Member</option>
        <option value="OFW" name="sevmofw">OFW</option>
</select>

应该

<select name="membershiptype">
        <option value="employed">Employed</option>
        <option value="SE">Self Employed</option>
        <option value="VM">Voluntary Member</option>
        <option value="OFW">OFW</option>
</select>

你的代码应该是

if (isset($_POST['membershiptype'])) {
    if ( $_POST['membershiptype'] == 'employed' ){
            employed();
    } elseif ( $_POST['membershiptype'] == 'SE' ){
            sevmofv();
    }
}

...

于 2013-07-07T12:51:15.773 回答
0

这是问题编辑后您的帮助请求的答案:

首先,我也喜欢流程图!这是规划项目或功能的一种简洁方式。

我看到你使用了三元运算符。那太棒了 :-)

好的,所以您对要实现的目标有一个很好的了解(流程图)。我将尝试通过一个示例为您指明正确的方向。

根据您的流程图,“开始”是指“表格”。此示例显示了 php 部分,并期望表单已提交所需的数据

<?php

// START - Check if all required data was submitted
if ( isset($_POST['salary'], $_POST['membershiptype']))
{
    // Get the form data
    $salary      = $_POST['salary'];
    $member_type = $_POST['membershiptype'];

    // USER SELECTS EMPLOYED?
    $user_employed = ($member_type == 'employed') ? true : false;

    // Create the multiplication table 
    // for the salary calculations
    $multiBy = array(
        '10000' => 1.3,
        '20000' => 1.5,
        '30000' => 1.8,
        '30001' => 2.0,

        'employed' => array(
            '10000' => 2,
            '20000' => 2.3,
            '30000' => 2.7,
            '30001' => 3.0,
        ),
    );

    // Create the calculation function
    function calcSalary($s = 0, $employed = false)
    {
        // Use global here so you can access the 
        // $multiBy array from inside this function 
        // without the need to pass it separately 
        // like $s and $employed
        global $multiBy;

        // Check if $s is specified
        if (empty($s)) return false;

        // Round the $s value to be able to use 
            // it as key for the $multiBy array
        // PHP Documentation: http://php.net/manual/en/function.round.php
        $value = round($s, -4);

        // Set the multiplication values
        $multi = $multiBy;
        if ($employed) $multi = $multiBy['employed'];
        if ($value > 30000) $value = 30001;
        if ($value < 10000) $value = 10000;

        // Calculate the salary and return the result
        return $s * $multi[$value];
    }

    // GET SALARY INPUT
    // Putting the result in a var so you can process however you like
    $calculated_salary = calcSalary($salary, $user_employed);

    // END - Print the calculated salary
    echo $calculated_salary;
}
else
{
    // I guess this is self-explanatory :P
    echo 'Please enter all required data and try again.';
}

这是一个基本的例子。如果您要接受用户输入(公共表单),请记住保护输入。“安全”是指 htmlentities、CSRF(跨站点请求伪造)、XSS(跨站点脚本)、代码注入(如果要使用数据库,也可以是 SQL 注入)。

也不要忘记错误 处理,例如缺少表单输入(如 if( ! isset($_POST['field'])) echo 'ERROR: Missing input'; else ...)。

以下是一些与 php 安全相关的资源,您可能会觉得有用:

PHP 函数...

带有代码示例的文章…

和一些 StackOverflow 问题:

祝阅读愉快,编码愉快!

于 2013-07-08T13:40:48.707 回答
0

我想添加这个答案,因为这个主题有更多的潜力,而且你正在学习 PHP,所以所有的东西都加起来了。

让我们从 PHP 标记开始。在您的 .php 文件中,您只需要<?php在顶部添加一次,最后不需要添加关闭标签?>。为什么?请参阅此 SO 答案https://stackoverflow.com/a/4499749/2493918

然后通过脚本中的 select 将您想要执行的所有功能放入:

<?php
/**
 * functions.php
 */

function employed()
{
    return 'Employed function called.';
}

function sevmofw()
{
    return 'Sevmofw function called.';
}

请注意,我用单引号替换了 " 引号。为什么?在此处查看此答案: https ://stackoverflow.com/a/3446286/2493918 。

然后创建另一个包含表单的 .php 文件(我们称之为 form.php):

<?php include 'functions.php'; // include the functions ?>
<!DOCTYPE html>
<html>
<head>
    <title>Form Function Test</title>
</head>
<body>

<?php
    // Check if the form was submitted
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset('membershiptype'))
    {
        // If the requested function exists, call it
        if (function_exists($_POST['membershiptype']))
        {
            $func = $_POST['membershiptype'];
            echo $func();
        }
    }
?>

    <form action="" method="POST">
        <div>
            <label>
                Salary: <input id="salarytext" type="text" name="salary" onkeypress="return isNumberKey(event);">
            </label>
        </div>

        <div>
            <label>
                Membership Type:
                <select name="membershiptype">
                        <option value="employed">Employed</option>
                        <option value="SE">Self Employed</option>
                        <option value="VM">Voluntary Member</option>
                        <option value="OFW">OFW</option>
                </select>
            </label>
        </div>

        <div>
            <input type="submit" name="submit_btn" value="Submit form">
        </div>
    </form>

</body>
</html>

您会看到我们将这些功能包含在此表单页面中。通过这种方式,您可以将功能与所谓的视图分开。现在您也可以在其他页面上包含相同的功能。

然后,如果您在 HTML 中使用 PHP,则需要使用两个 php 标签<?php and ?>将 php 部分与 html 分开。

如果您提交表单,php 部分将检查表单是否已提交以及是否设置了成员资格类型。然后它继续检查请求的函数是否存在。如果是,它调用函数并返回输出。

请记住:最好在函数内返回值并将它们回显到您想要的位置(参见上面的示例)。

了解 PHP 的一个很好的资源是可以在此处找到的文档:例如 function_exists() 文档页面http://www.php.net/manual/en/function.function-exists.php

尝试尽快切换到 PHP 框架。对你的帮助很大。我推荐Codeigniter,因为它有完整的文档和较低的学习曲线。稍后你可以切换到 Laravel 之类的东西,但我告诉你,现在还为时过早。

祝你学习 PHP 好运 :-)

于 2013-07-07T14:10:55.087 回答