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

Passing a PHP Function (With parameters) through an HTML Button

本文关键字:一个 PHP 函数 参数 按钮 HTML 通过      更新时间:2023-09-26

基本上,我正在尝试创建一个登录系统,并且我正在使用我所谓的"动态",这意味着它包含在我的其他文件中,如果我想使用不同的数据库,我只需将该数据库传递给登录函数。在默认情况下我知道如何做到这一点,但一旦使用按钮,我就有点困惑了。

这是我最基本的形式。

<?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脚本死亡。(没有错误)

您错误地使用了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>";
    }
}

你不想传递你的SQL配置参数回JavaScript,因为任何人都可以看到你的JavaScript代码,当他们浏览你的页面,然后他们将有他们需要的一切连接和玩在你的数据库。

你必须传递某种标志到你的表单,让你的PHP代码知道(当它接收到表单的数据后)什么样的SQL设置应该使用。

的例子:

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

同样,不要在那里传递任何敏感数据,只需在$loginMode或其他选项中使用一些独特的值,例如"mySql"。

然后,当你在PHP中处理HTTP POST时:
if ($_POST['loginMode'] == 'mySql') 
{ 
    // ... create connection based on $SQLConnection, $SQLConfig
}
else if ($_POST['loginMode'] == 'otherMethod') ...

您的JavaScript可能因为$SQLConnection$SQLConfig的内容而失败。如果其中有双引号,则会失败。

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