PHP-代码在2个文件中工作,但不';不能在一个文件中工作
终于让我的代码开始工作了。如果不执行if/else语句中的else,我不确定如何定义变量$username/$password。当页面加载时,它会显示消息“哎呀,有什么地方出错了,再试一次!”我意识到它这样做是因为我将$username/$password声明为NULL。我从代码中删除了这一部分,但随后我收到了错误消息“Undefined variable:username”,现在我不确定如何避免这两个错误。有人有什么想法吗?提前谢谢PHP-代码在2个文件中工作,但不';不能在一个文件中工作,php,Php,终于让我的代码开始工作了。如果不执行if/else语句中的else,我不确定如何定义变量$username/$password。当页面加载时,它会显示消息“哎呀,有什么地方出错了,再试一次!”我意识到它这样做是因为我将$username/$password声明为NULL。我从代码中删除了这一部分,但随后我收到了错误消息“Undefined variable:username”,现在我不确定如何避免这两个错误。有人有什么想法吗?提前谢谢 <html> <body> <
<html>
<body>
<?php
echo "<form action='oneFile.php' method='post'>";
echo "<table border='0'>";
echo "<tr bgcolor='#cccccc'>";
echo "<td width='150'>Username: </td>";
echo "<td width='20'><input type='text' name='username' size='15'
maxlength='15'></td>";
echo "</tr><tr><tr bgcolor='#cccccc'>";
echo "<td width='150'>Password: </td>";
echo "<td width='20'><input type='password' name='password' size='15'
maxlength='15'></td>";
echo "</tr></tr><tr><td colspan='2' align='center'>
<input type='submit' value='Login'></td>
</tr>
</table>
</form>
</body>
</html>";
?>
<?php
$usernameArr = array( 1 => "elliez",
2 => "greatGuy",
3 => "blogger",
4 => "bob",
5 => "mike",
6 => "jane",
7 => "joe",
8 => "rachel",
9 => "james",
10 => "pizzaman2000");
$passwordArr = array( 1 => "tr789ial",
2 => "abc123",
3 => "23seventeen23",
4 => "12345",
5 => "Password123",
6 => "P@ssword123",
7 => "pass123",
8 => "123pass",
9 => "123P@ssword",
10 => "54321");
$varBool = false;
if(isset($_POST['submit'])){
$username = htmlspecialchars(trim($_POST['username']));
$password = htmlspecialchars(trim($_POST['password']));
trim($username);
trim($password);
}
for ( $i = 1; $i <= 10; $i++){
if ($username == $usernameArr[$i] && $password === $passwordArr[$i]){
$varBool = true;
}
}
If ($varBool){
echo "You have successfully logged in!";
}
else{
echo "Oops something went wrong try again!";
}
?>
请不要在生产中这样做。如果网站包含敏感数据,硬编码密码在许多司法管辖区是极其危险和非法的。
解决了这个问题后,您的代码为什么不能工作的答案很简单。您需要输入以下代码:
for ( $i = 1; $i <= 10; $i++){
if ($username == $usernameArr[$i] && $password === $passwordArr[$i]){
$varBool = true;
}
}
If ($varBool){
echo "You have successfully logged in!";
}
else{
echo "Oops something went wrong try again!";
}
因为您只希望在用户已提交表单时执行此检查。它在2个文件中工作的原因是,第2个文件只有在提交时才会被调用,因此用户名和密码不为空
也请调查一下。这里还有很多错误(例如,为什么要回显HTML而不是编写HTML?),但这些应该可以帮助您提高代码的可读性
你可能会得到这样的结果:
<!DOCTYPE html>
<html>
<body>
<form action='<?= $_SERVER['PHP_SELF']; ?>' method='POST'>
<table border='0'>
<tr bgcolor='#cccccc'>
<td width='150'>Username: </td>
<td width='20'><input type='text' name='username' size='15'
maxlength='15'></td>
</tr>
<tr bgcolor='#cccccc'>
<td width='150'>Password: </td>
<td width='20'><input type='password' name='password' size='15'
maxlength='15'></td>
</tr>
<tr>
<td colspan='2' align='center'>
<input type='submit' value='Login' name='login'>
</td>
</tr>
</table>
</form>
</body>
</html>
<?php
// IF THIS IS A PRODUCTION SITE USE PASSWORD HASHING AND A DATABASE.
$credentials = [
'username' => 'password',
...
];
if (isset($_POST['login'])) {
$loginSuccess = false;
foreach ($credentials as $username => $password) {
if ($_POST['username'] == $username && $_POST['password'] = $password) {
$loginSuccess = true;
}
echo $loginSuccess ? "Successfully logged in." : "Failed to log in.";
}
这里有一些问题
首先,大括号应该用isset()
条件语句封装您的整个代码,并且您的提交按钮没有命名,这样操作就永远不会发生
请参阅代码中的注释
HTML坚持者:您在
中也有一个流浪的
。它不会破坏任何东西,但有适当的HTML标记是一件好事
使用
而不是
也是一种很好的做法,因为有些浏览器会抛出一个警告,例如:Start-tag-seen而没有首先看到doctype。应为“”
感谢透彻的分析。我会给你回电的。@Pachuca当然知道,我会先学习end 2 end加密,然后再在生产中做类似的事情。这仅仅是为了学习经验:)@Pachuca没关系,我只需要加入一个大警告,以便(希望)劝阻人们不要将工作代码复制/粘贴到生产站点,就像一直发生的那样。此外,您还应该同时使用这两种方法(HTTPS用于加密流量,散列用于防止使用加密密钥恢复密码)。
<!DOCTYPE html>
<html>
<body>
<form action='<?= $_SERVER['PHP_SELF']; ?>' method='POST'>
<table border='0'>
<tr bgcolor='#cccccc'>
<td width='150'>Username: </td>
<td width='20'><input type='text' name='username' size='15'
maxlength='15'></td>
</tr>
<tr bgcolor='#cccccc'>
<td width='150'>Password: </td>
<td width='20'><input type='password' name='password' size='15'
maxlength='15'></td>
</tr>
<tr>
<td colspan='2' align='center'>
<input type='submit' value='Login' name='login'>
</td>
</tr>
</table>
</form>
</body>
</html>
<?php
// IF THIS IS A PRODUCTION SITE USE PASSWORD HASHING AND A DATABASE.
$credentials = [
'username' => 'password',
...
];
if (isset($_POST['login'])) {
$loginSuccess = false;
foreach ($credentials as $username => $password) {
if ($_POST['username'] == $username && $_POST['password'] = $password) {
$loginSuccess = true;
}
echo $loginSuccess ? "Successfully logged in." : "Failed to log in.";
}
<html>
<body>
<?php
echo "<form action='oneFile.php' method='post'>";
echo "<table border='0'>";
echo "<tr bgcolor='#cccccc'>";
echo "<td width='150'>Username: </td>";
echo "<td width='20'><input type='text' name='username' size='15'
maxlength='15'></td>";
echo "</tr><tr><tr bgcolor='#cccccc'>";
echo "<td width='150'>Password: </td>";
echo "<td width='20'><input type='password' name='password' size='15'
maxlength='15'></td>";
echo "</tr><tr><td colspan='2' align='center'>
<input type='submit' name='submit' value='Login'></td>
</tr>
</table>
</form>
</body>
</html>";
?>
<?php
$usernameArr = array( 1 => "elliez",
2 => "greatGuy",
3 => "blogger",
4 => "bob",
5 => "mike",
6 => "jane",
7 => "joe",
8 => "rachel",
9 => "james",
10 => "pizzaman2000");
$passwordArr = array( 1 => "tr789ial",
2 => "abc123",
3 => "23seventeen23",
4 => "12345",
5 => "Password123",
6 => "P@ssword123",
7 => "pass123",
8 => "123pass",
9 => "123P@ssword",
10 => "54321");
$varBool = false;
if(isset($_POST['submit'])){
$username = htmlspecialchars(trim($_POST['username']));
$password = htmlspecialchars(trim($_POST['password']));
trim($username);
trim($password);
// } // this brace is misplaced
for ( $i = 1; $i <= 10; $i++){
if ($username == $usernameArr[$i] && $password === $passwordArr[$i]){
$varBool = true;
}
}
If ($varBool){
echo "You have successfully logged in!";
}
else{
echo "Oops something went wrong try again!";
}
} // brace moved here
?>