Vytvoření kompletního školního informačního systému je rozsáhlý projekt, který vyžaduje řadu funkcí a zvažování bezpečnosti. Zde je základní kostra PHP skriptu, který vám poskytne směr, jak začít. Tento příklad zahrnuje přihlášení a registraci uživatelů, přidávání nápadů a přihlašování se na kurzy.
Struktura databáze (MySQL). Tento kód vytvoří následující čtyři databázové tabulky: uzivatele
, napady
, kurzy
a registrace_kurzu
CREATE TABLE uzivatele (
id INT AUTO_INCREMENT PRIMARY KEY,
uzivatelske_jmeno VARCHAR(255) NOT NULL,
heslo VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
role ENUM('student', 'ucitel') NOT NULL
);
CREATE TABLE napady (
id INT AUTO_INCREMENT PRIMARY KEY,
uzivatel_id INT NOT NULL,
nazev VARCHAR(255) NOT NULL,
popis TEXT NOT NULL,
FOREIGN KEY (uzivatel_id) REFERENCES uzivatele(id)
);
CREATE TABLE kurzy (
id INT AUTO_INCREMENT PRIMARY KEY,
nazev VARCHAR(255) NOT NULL,
popis TEXT NOT NULL
);
CREATE TABLE registrace_kurzu (
id INT AUTO_INCREMENT PRIMARY KEY,
uzivatel_id INT NOT NULL,
kurz_id INT NOT NULL,
FOREIGN KEY (uzivatel_id) REFERENCES uzivatele(id),
FOREIGN KEY (kurz_id) REFERENCES kurzy(id)
);
Vytvořte soubor config.php
pro připojení k databázi:
<?php
$nazevServeru = "localhost";
$uzivatelskeJmeno = "jmeno_databaze";
$heslo = "heslo_databaze";
$nazevDatabaze = "nazev_databaze";
$conn = new mysqli($nazevServeru, $uzivatelskeJmeno, $heslo, $nazevDatabaze);
if ($conn->connect_error) {
die("Připojení selhalo: " . $conn->connect_error);
}
?>
Vytvořte soubor login.php
pro přihlášení uživatelů:
<?php
require_once 'config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$uzivatelskeJmeno = $_POST["uzivatelske_jmeno"];
$heslo = $_POST["heslo"];
$sql = "SELECT * FROM uzivatele WHERE uzivatelske_jmeno = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $uzivatelskeJmeno);
$stmt->execute();
$result = $stmt->get_result();
$uzivatel = $result->fetch_assoc();
if ($uzivatel && password_verify($heslo, $uzivatel["heslo"])) {
session_start();
$_SESSION["uzivatel_id"] = $uzivatel["id"];
$_SESSION["uzivatelske_jmeno"] = $uzivatel["uzivatelske_jmeno"];
$_SESSION["role"] = $uzivatel["role"];
header("Location: dashboard.php");
exit;
} else {
echo "Neplatné uživatelské jméno nebo heslo.";
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="uzivatelske_jmeno">Uživatelské jméno:</label>
<input type="text" name="uzivatelske_jmeno" required>
<br>
<label for="heslo">Heslo:</label>
<input type="password" name="heslo" required>
<br>
<input type="submit" value="Přihlásit se">
</form>
Vytvořte soubor register.php
pro registraci uživatelů:
<?php
require_once 'config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$uzivatelskeJmeno = $_POST["uzivatelske_jmeno"];
$heslo = $_POST["heslo"];
$email = $_POST["email"];
$role = $_POST["role"];
$zahashovaneHeslo = password_hash($heslo, PASSWORD_DEFAULT);
$sql = "INSERT INTO uzivatele (uzivatelske_jmeno, heslo, email, role) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssss", $uzivatelskeJmeno, $zahashovaneHeslo, $email, $role);
$result = $stmt->execute();
if ($result) {
header("Location: prihlaseni.php");
exit;
} else {
echo "Chyba: " . $sql . "<br>" . $conn->error;
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="uzivatelske_jmeno">Uživatelské jméno:</label>
<input type="text" name="uzivatelske_jmeno" required>
<br>
<label for="heslo">Heslo:</label>
<input type="password" name="heslo" required>
<br>
<label for="email">Email:</label>
<input type="email" name="email" required>
<br>
<label for="role">Role:</label>
<select name="role" required>
<option value="student">Student</option>
<option value="ucitel">Učitel</option>
</select>
<br>
<input type="submit" value="Registrovat">
</form>
Vytvořte soubor dashboard.php
pro zobrazení seznamu kurzů a možnosti přidání nápadů:
<?php
session_start();
require_once 'config.php';
if (!isset($_SESSION["user_id"])) {
header("Location: prihlaseni.php");
exit;
}
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["odeslat_napad"])) {
$nazev = $_POST["nazev"];
$popis = $_POST["popis"];
$sql = "INSERT INTO napady (user_id, nazev, popis) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iss", $_SESSION["user_id"], $nazev, $popis);
$stmt->execute();
}
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["registrovat_kurz"])) {
$course_id = $_POST["course_id"];
$sql = "INSERT INTO registrace_kurzu (user_id, course_id) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $_SESSION["user_id"], $course_id);
$stmt->execute();
}
$sql = "SELECT * FROM kurzy";
$result = $conn->query($sql);
$kurzy = $result->fetch_all(MYSQLI_ASSOC);
?>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>Nástěnka</title>
</head>
<body data-rsssl=1>
<h1>Vítejte, <?php echo $_SESSION["username"]; ?></h1>
<h2>Předložte svůj nápad</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="nazev">Název:</label>
<input type="text" name="nazev" required>
<br>
<label for="popis">Popis:</label>
<textarea name="popis" required></textarea>
<br>
<input type="submit" name="odeslat_napad" value="Odeslat nápad">
</form>
<h2>Kurzy</h2>
<table>
<thead>
<tr>
<th>Název</th>
<th>Popis</th>
<th>Akce</th>
</tr>
</thead>
<tbody>
<?php foreach ($kurzy as $kurz) : ?>
<tr>
<td><?php echo $kurz["nazev"]; ?></td>
<td><?php echo $kurz["popis"]; ?></td>
<td>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<input type="hidden" name="course_id" value="<?php echo $kurz["id"]; ?>">
<input type="submit" name="registrovat_kurz" value="Registrovat">
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>
Tato kostra kódu představuje základní funkcionalitu školního informačního systému. Je zde mnoho dalších funkcí, které byste mohli přidat, jako je správa uživatelů, správa kurzů, komunikace mezi učiteli a žáky, sledování úspěšnosti žáků atd. Ujistěte se, že implementujete bezpečnostní opatření, jako je ochrana proti SQL injection, kontrola přístupových práv a validace vstupů na straně klienta a serveru.