基本上,我正在尝试创建一个登录系统,而我正在使用我所说的“动态”#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脚本死掉。 (没有错误?)
答案 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可能会失败。如果你的双引号会失败。
另外,设计和实现安全可靠的登录系统实际上非常困难,您应该选择使用经过长期测试的框架。