通过HTML按钮传递PHP函数(带参数)

时间:2014-05-29 04:54:30

标签: javascript php jquery html

基本上,我正在尝试创建一个登录系统,而我正在使用我所说的“动态”#34;这意味着它包含在我的其他文件中,如果我想使用不同的数据库,我只需将该数据库传递给登录功能。我知道默认情况下该怎么做,但只要使用按钮进来我就有点困惑。

这里有我最基本的形式。

<?php
    createLogin('test', 'test2');

    function createLogin($SQLConnection, $SQLConfig) { 
        echo "<h1> You are currently not logged in!</h1>";
        echo "<form action='handleLogin(".$SQLConnection.",".$SQLConfig.") method='post'>";
        echo "<div align='center'>";
        echo "<table style='width: 475px'>";
        echo "<thead>";
        echo "<th>";
        echo "<tr>Enter your e-mail and password.</tr>";
        echo "</th>";
        echo "</thead>";
        echo "</table>";
        echo "<input type='submit' value='Login' />";
        echo "</form>";
    }

    function handleLogin($foo, $bar) {
        echo $foo . " || " . $bar;
    }
?>

当我点击提交按钮时,它只是把我带到这里......

http://localhost/handleLogin%28test,test2%29%20method=

现在,我读到了使用Javascript来执行此操作,以及执行类似

的操作
<script>
    function processLoginRequest($SQLConnection, $SQLConfig) {
        alert("<?php handleLogin($SQLConnection, $SQLConfig) ?>");
    }
</script>

然后我可以使用

echo "<form action='processLoginRequest(".$SQLConnection.",".$SQLConfig.") method='post'>";

但是,代码会导致整个php脚本死掉。 (没有错误?)

3 个答案:

答案 0 :(得分:1)

您不希望将SQL配置参数传递回JavaScript,因为任何人在浏览您的页面时都可以查看您的JavaScript代码,然后他们将拥有在数据库中连接和玩耍所需的一切

您必须将某种标志传递给您的表单,以便让您的PHP代码知道(当它接收表单的数据时)应该使用哪种SQL设置。

示例:

<form method="POST" ...>
    <type input="hidden" name="loginMode" value="<?php echo $loginMode; ?>" />
</form>

再一次,不要传递任何敏感数据,只要有某种独特的价值,例如&#34; mySql&#34;对于$ loginMode或其他选项。

然后,当您在PHP中处理HTTP POST时

if ($_POST['loginMode'] == 'mySql') 
{ 
    // ... create connection based on $SQLConnection, $SQLConfig
}
else if ($_POST['loginMode'] == 'otherMethod') ...

答案 1 :(得分:1)

您错误地使用action,结果与预期一致。 action存储将提交表单的页面。所以,是的,当你点击提交时,它会尝试将你带到一个名为handleLogin%28test,test2%29%20method=的页面,因为这就是你的行动所要做的。

您可以做的只是将操作留空,这会将表单提交到当前页面。然后,在该页面上,检查表单是否已提交,如果已提交,请调用您的函数。

在创建表单的函数内部进行以下更改:

function createLogin() { 
    ...
    echo "<form action='' method='post'>";
    ....
    echo "<input type='submit' value='Login' name='login'/>";
}

然后,在呈现表单的页面顶部添加如下内容:

// Check if login form has been submitted - if so, handle
if (isset($_POST['login'])) {
    handleLogin($SQLConnection, $SQLConfig);
}

// Render login form. No need to pass config parameters here.
createLogin();

如果你真的想把所有东西都放在一个函数中,我想你也可以这样做:

function createLogin($SQLConnection, $SQLConfig) { 
    if (isset($_POST['login'])) {
        handleLogin($SQLConnection, $SQLConfig);
    }
    else {
        echo "<h1> You are currently not logged in!</h1>";
        echo "<form action='' method='post'>";
        echo "<div align='center'>";
        echo "<table style='width: 475px'>";
        echo "<thead>";
        echo "<th>";
        echo "<tr>Enter your e-mail and password.</tr>";
        echo "</th>";
        echo "</thead>";
        echo "</table>";
        echo "<input type='submit' value='Login' name='login'/>";
        echo "</form>";
    }
}

答案 2 :(得分:0)

由于$SQLConnection$SQLConfig的内容,您的JavaScript可能会失败。如果你的双引号会失败。

另外,设计和实现安全可靠的登录系统实际上非常困难,您应该选择使用经过长期测试的框架。