PHP - 显示数据库数据的登录表单

标签 php mysql database forms undefined

我正在做一个项目。有 4 个文件:loginMHSmanageLoginMHS(可选)、inputPerwaliandb

db 中,程序将连接到数据库。这是代码:

<?php
$link = mysqli_connect("localhost", "root", NULL, "perwalian");

if (mysqli_connect_errno()) {
    die("Connect Error : " . mysqli_connect_error());
}
?>

loginMHS 中,用户应该输入他们的 NRP (varchar) 和密码。这是代码:

<?php
session_start();
?>

<form action="manageLoginMHS.php?act=login" method="POST">
    NRP: <input type="text" name="unrp"/><br />
    Password: <input type="password" name="upass"/><br />
    <input type="submit" value="LOGIN"/>
</form>

我将 manageLoginMHS 用作辅助文件。来自 loginMHS 的 NRP 和 varchar 将被检查。如果用户不输入 NRP,程序会显示消息“输入 perwalian belum dapat diakses saat ini”。我真的需要这个文件吗?或者,我只能使用 2 个文件(loginMHSinputPerwalian)?

<?php
require './db.php';
session_start();
$act = $_GET['act'];

switch ($act) {
    case "login":
        $nrp = $_POST['unrp'];
        $pass = $_POST['upass'];

        $sql = "select * from mahasiswa where nrp = '" . $nrp . "'";
        $result = mysqli_query($link, $sql);
        $row = mysqli_fetch_array($result);

        if(isset($_POST['unrp'])){
            if(empty($nrp)){
                echo "<br /> Input perwalian belum dapat diakses saat ini"
                    . "<br />";
            }
            else {
                header('Location: inputPerwalian.php');
            }
        }

        if(mysqli_num_rows($result) > 0) {
            if($pass == $row['password'] && $nrp == $row['nrp']) {
                $_SESSION['login'] = TRUE;
                header("Location: inputPerwalian.php");
            }
            else {
                echo "Invalid Password";
            }
        }
        else {
            echo "User not found";
        }
        break;
    default:
        die("Unknown");
}
?>

然后程序将显示来自数据库的 inputPerwalian 中的数据,这些数据具有相同的 NRP 和 varchar。这是代码:

<?php
session_start();

if (isset($_SESSION['login'])) {
    require './db.php';

    //echo $_POST['unrp'];

    //$nrp = $_POST['unrp'];
    //$pass = $_POST['upass'];

    $sql2 = "select nrp, nama, jatah_sks, foto_profil from mahasiswa"
        . " where nrp=".$nrp; //this line is the error
    $result2 = mysqli_query($link, $sql2);
    if (!$result2) {
        die("SQL Error " . $sql2);
    }
    while ($row2 = mysqli_fetch_array($result2)) {
        echo "NRP: " . $row2['nrp'] . "<br />";
        echo "Nama: " . $row2['nama'] . "<br />";
        echo "SKS Maks: " . $row2['jatah_sks'] . "<br />";
        echo "Sisa SKS: " . "<br /><br />";
    }
}   
?>

我有这些错误:

Notice: Undefined variable: nrp in C:\xampp\htdocs\ProjectUAS\inputPerwalian.php on line 37
SQL Error select nrp, nama, jatah_sks, foto_profil from mahasiswa where nrp=

因此,程序不会显示我之前选择的数据库中的数据。

我应该怎么做才能修复这些错误?请解释你的答案。谢谢。

最佳答案

使用 2 个文件(如果您希望数据库连接在一个单独的文件中,则为 3 个)会更容易做到这一点

您可以像这样合并您的 LoginMHS 和 ManageLoginMHS 页面:

<?php
  session_start();

  require './db.php';

  if (isset($_POST['act']))
  {
    $act = $_POST['act'];

    switch($act)
    {
    case "login":
    $nrp = $_POST['unrp'];
    $pass = $_POST['upass'];

    $sql = "select * from mahasiswa where nrp = '" . $nrp . "'";
    $result = mysqli_query($link, $sql);
    $row = mysqli_fetch_array($result);

    if(isset($_POST['unrp'])){
        if(empty($nrp)){
            echo "<br /> Input perwalian belum dapat diakses saat ini"
                . "<br />";
        }
        else {
            header('Location: inputPerwalian.php');
        }
    }

    if(mysqli_num_rows($result) > 0) {
        if($pass == $row['password'] && $nrp == $row['nrp']) {
            $_SESSION['login'] = TRUE;
            $_SESSION['nrp'] = $nrp;
            header("Location: inputPerwalian.php");
        }
        else {
            echo "Invalid Password";
        }
    }
    else {
        echo "User not found";
    }
    break;
    default:
    die("Unknown");
    }
    }
  }
?>

<form action="" method="POST">
  <input type="hidden" name="act" value="login" />
  NRP: <input type="text" name="unrp"/><br />
  Password: <input type="password" name="upass"/><br />
  <input type="submit" value="LOGIN"/>
</form>

这将所有登录合并到一个表单中。它将 nrp 设置在您可以从任何其他页面读取的 session 变量中,因此您的 inputPerwalian 页面可以像这样检查它:$nrp = $_SESSION['nrp'];

关于PHP - 显示数据库数据的登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37472392/

相关文章:

php - 作为 Action 输入的后置参数

mysql - varchar(50) 可以插入的最大数据大小是多少;

php - 更改 PHP 文件上传的默认临时目录

javascript - 使用键盘按键导航网页(在内容脚本内)

php - 弹出此错误时如何在 Windows Xampp 上安装 Subrion

java - 标准 XAConnectionHandle :prepareStatement should not be used outside an EJBServer

sql - 约束一对多关系或使用预定义的关系约束创建表

mysql - sqlite3和mysql之间有速度差异吗?

javascript - 选中/取消选中所有复选框仅选中 1 个复选框,但返回所有其他复选框值

php - SQL查询,指定哪些top结果?