PHP-代码在2个文件中工作,但不';不能在一个文件中工作

PHP-代码在2个文件中工作,但不';不能在一个文件中工作,php,Php,终于让我的代码开始工作了。如果不执行if/else语句中的else,我不确定如何定义变量$username/$password。当页面加载时,它会显示消息“哎呀,有什么地方出错了,再试一次!”我意识到它这样做是因为我将$username/$password声明为NULL。我从代码中删除了这一部分,但随后我收到了错误消息“Undefined variable:username”,现在我不确定如何避免这两个错误。有人有什么想法吗?提前谢谢 <html> <body> <

终于让我的代码开始工作了。如果不执行if/else语句中的else,我不确定如何定义变量$username/$password。当页面加载时,它会显示消息“哎呀,有什么地方出错了,再试一次!”我意识到它这样做是因为我将$username/$password声明为NULL。我从代码中删除了这一部分,但随后我收到了错误消息“Undefined variable:username”,现在我不确定如何避免这两个错误。有人有什么想法吗?提前谢谢

<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

        ?>