V následujícím kódu můžeme vidět zpracování informací z formuláře, pomocí metody POST a následné zapsání dat do databáze. Prosím číst komentáře v kódu, je to nejsnazší způsob, jak dát správné informace na správné místo. Je to to barevné.
<form action="/action_page.php"> <div class="form-group"> <label for="username">Username:</label> <input type="text" class="form-control" id="username"> </div> <div class="form-group"> <label for="password">Password:</label> <input type="password" class="form-control" id="pwd"> </div> <div class="form-group"> <label for="email">Email:</label> <input type="email" class="form-control" id="email"> </div> <div class="form-group"> <label for="phone">Phone:</label> <input type="tel" class="form-control" id="phone"> </div> <button type="submit" class="btn btn-success mt-2">Submit</button> <input type="hidden" name="check_submit" value="true"><s/form>
$login = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$phone = $_POST['phone'];
//jednoduchá podmínka pro ověření správnosti dat
if(empty($login) || empty ($password)){
echo "Některé pole nebylo vyplněno správně";
include "./function.form2.php";
}else{
//include je metoda nebo funkce, která do kódu vloží kompletní kus jiného kódu, který si vyberete, zde například connector pro připojení do databáze
include './function/connector.php';
//V tomto kódu se zpracovávají osobní údaje pro tvorbu profilu, je tedy potřeba ověřit, zda již někdo takový neexistuje.
$checklogin = mysqli_query($conn, "SELECT * FROM users WHERE email = '$email'");
if ($row = mysqli_fetch_assoc($checklogin)){
echo "Login již existuje";
}else{
//Pokud ne, otevře se transakce, neboli privátní spojení s databází, která zajistí, že pokud by se posílalo více insertů najednou, tak se mezi sebou nepomíchají různí uživatelé
$conn->begin_transaction();
try{
$insert = "INSERT INTO users (name, password, email, phone)
VALUES ('$login', '$password', '$email', '$phone')";
$conn->query($insert);
//transakce mají všehovšudy 3 metody: commit, catch a rollback
//commit provede transakci a její obsah, catch zachytí problémy a rollback transakci zruší, pokud catch něco našel
$conn->commit();
loading_session($login, $email);
//toto je přímý odkaz na jinou stránku pomocí "header" a URL adresy
$url = "./myaccount.php";
header('Location: ' . $url);
exit();
}catch(Exception $e){
$conn->rollback();
//Tahle sranda se vypisuje na stránku uživateli
echo "Chyba při provádění transakce: " . $e->getMessage();
}
}
}
V následujícím kousku kódu si vysvětlíme jak se připojit do databáze a co se tam vlastně děje.
//Pro připojení do databáze potřebujeme jméno serveru kde běží, uživatele, který ji používá a jeho heslo, ve MySQL WorkBenchi je to vždycky v levým horním rohu jestli se nepletu
$servername = "localhost";
$username = "root";
$password_db = "password";
//Vytvoříme proměnnou $conn, do které vkládáme výsledek metody mysqli_connect, do které vkládáme hodnoty pro připojení
$conn = mysqli_connect ($servername, $username, $password_db);
//Ověření jestli bylo připojení úspěšné
if(!$conn) {
die('ERROR: Could not select database');
die("Connection failed: " . mysqli_connect_error());
}
//Samozřejmě je potřeba znát i jméno databáze
mysqli_select_db($conn,'db_sazkovka_test');
<?php// Definice přístupových údajů k databázi$servername = 'localhost';// Název serveru, na kterém běží databáze$username = 'root';// Uživatelské jméno pro přihlášení k databázi$password = '';// Heslo pro přihlášení k databázi$dbname = 'dbname';// Název databáze, ke které se chceme připojittry {// Připojení k databázi pomocí PDO$db = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;", $username, $password);// Nastavení režimu zpracování chyb na výjimky$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) {// Zachycení výjimky v případě chybyecho "Connection failed: " . $e->getMessage();// Vypsání chybové zprávy} ?>
V následujícím kousku kódu si vysvětlíme, co jsou to sessions, jak je použít a proč je použít
//Vytvoříme si nový soubor, pojmenujeme ho sessions.php(nebo jak chcete, ale aby jste to po sobě poznali) a v něm využijeme několik základních věcí
//První je session_start což je funkce, kterou PHP obsahuje automaticky a vytvoří nám tu session paměť
session_start();
//Dále je potřeba být lehce kreativní a vytvořit si vlastní funkci, která nám data do session uloží
//Tudíž vytvoříte funkci a do jejích parametrů vložíte proměnné, které chcete uložit
function loading_session($login, $email){
session_start();//Toto je zde pouze pro jistotu kdyby se něc posralo a session se z nějakého důvodu nestartnula
//Ty následně uložíte pomocí $_SESSION['cokoliv'] = $cokoliv
$_SESSION['username'] = $login;
$_SESSION['email'] = $email;
//Nyní lze využít $_SESSION['cokoliv'] nepříklad pro ověření jestli máte přístup na určité stránky, nebo například pro změny, které se stanou až po přihlášení
}
//Sessions je ovšem potřeba i smazat, tudíž si vytvoříte funkci, která nejdřív session vymaže uvnitř a pak celkově
//Jinými slovy nejdřív využijete unset a pak destroy
function deleting_session(){
session_unset();
session_destroy();
}
//Sessions se následně vkládají do kódu pomocí include, to snad ukazovat nemusím
Napište program, který umožní nahrávat 3 typy souborů. Při nahrání souboru bude možné zadat platnost souboru. V zobrazené tabulce se neplatný soubor podbarví. Soubory se boudou zobrazovat v tabulce a budou rozděleny dle typu
<!-- Form for file upload -->
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<br>
Enter a date:
<input type="date" name="date" id="date">
<br>
<input type="submit" value="Upload Image" name="submit">
</form>
<hr>
<!-- Display files using into table -->
<?php include 'display.php'?>
</body>
</html>
<?php
// Check if the form was submitted
if (isset($_POST["submit"])) {
// Check if a file was selected
if (isset($_FILES["fileToUpload"]) && $_FILES["fileToUpload"]["error"] == 0) {
// Define allowed file types
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'text/plain', 'application/msword', 'application/vnd.ms-excel'];
// Get the uploaded file type
$fileType = $_FILES["fileToUpload"]["type"];
// Check if the uploaded file type is allowed
if (in_array($fileType, $allowedTypes)) {
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "testv4";
// Connect to the database
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
// Get file details from the uploaded file
$nazev = $_FILES["fileToUpload"]["name"];
$type = $_FILES["fileToUpload"]["type"];
$fileData = file_get_contents($_FILES["fileToUpload"]["tmp_name"]);
$date = $_POST['date']; // Get the date from the form
// Prepare SQL statement to insert the file into the database
$stmt = $conn->prepare("INSERT INTO `files` (name, type, date, file) VALUES (?, ?, ?, ?)");
$stmt->bind_param("ssss", $nazev, $type, $date, $fileData);
// Execute the statement to insert the file into the database
if ($stmt->execute()) {
echo "File uploaded and inserted into the database successfully.";
} else {
echo "Error inserting file into the database: " . $stmt->error;
}
// Close the statement and database connection
$stmt->close();
$conn->close();
} else {
// Display error if the uploaded file type is not supported
echo "Error: Unsupported file type. Please upload images, documents, or text files.";
}
} else {
// Display error if no file was selected for upload
echo "Error: Please select a file to upload.";
}
}
?>
<?php
// Database connection information
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "testv4"; // Database name
// Establish a connection to the database
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
// Check if the connection was successful
if ($conn->connect_error) {
// If the connection fails, output an error message and terminate the script
die("Connection failed: " . $conn->connect_error);
}
// Array defining different file types and their corresponding MIME types
$types = [
'Images' => ['image/jpeg', 'image/png', 'image/gif'],
'Documents' => ['application/pdf', 'application/msword', 'application/vnd.ms-excel'],
'TextFiles' => ['text/plain']
];
// Create a table structure to display the files
echo '<table border="1">';
echo '<tr>';
// Create table headers based on file types
foreach ($types as $type => $mimeTypes) {
echo "<th>$type!/th>";
}
echo '</tr>';
// Find the maximum number of rows for file display
$maxRows = 0;
foreach ($types as $type => $mimeTypes) {
// Query the database to count the number of files for each type
$sql = "SELECT name, type, date FROM files WHERE type IN ('" . implode("','", $mimeTypes) . "')";
$result = $conn->query($sql);
// Determine the maximum number of rows needed for the table
if ($result->num_rows > $maxRows) {
$maxRows = $result->num_rows;
}
}
// Display files in rows and columns based on their types
for ($row = 0; $row < $maxRows; $row++) {
echo '<tr>';
foreach ($types as $type => $mimeTypes) {
echo '<td>';
// Query the database to fetch files of a particular type for a given row
$sql = "SELECT idfiles, name, type, date FROM files WHERE type IN ('" . implode("','", $mimeTypes) . "') LIMIT 1 OFFSET $row";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($data = $result->fetch_assoc()) {
// Retrieve file information
$fileID = $data['idfiles'];
$fileName = $data['name'];
$fileDate = $data['date'];
$today = date("Y-m-d");
// Compare dates to change the background color of the list item
$style = (strtotime($fileDate) < strtotime($today)) ? 'background-color: red;' : '';
// Display file names as links and apply styles based on date comparison
echo "<a href='download.php?id={$fileID}' style='{$style}'>{$fileName}</a> - Date: {$fileDate}";
echo '<br>'; // Adding line break for separation
}
// Removed the closing ul tag
} else {
// If there are no files, display a message
echo "No files";
}
echo '</td>';
}
echo '</tr>';
}
// Close the table
echo '</table>';
// Close the database connection
$conn->close();
?>
<?php
// download.php
// Database connection details
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "testv4";
// Establish a connection to the database
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
// Check if the connection to the database was successful
if ($conn->connect_error) {
// If the connection fails, display an error message and stop the script
die("Connection failed: " . $conn->connect_error);
}
// Check if the 'id' parameter is set in the URL (GET request)
if (isset($_GET['id'])) {
// Get the file ID from the GET parameters
$fileID = $_GET['id'];
// Prepare a SQL statement to select file details based on the file ID
$sql = "SELECT name, type, file FROM files WHERE idfiles = ?";
$stmt = $conn->prepare($sql);
// Bind the file ID as a parameter to the prepared statement
$stmt->bind_param("i", $fileID);
// Execute the prepared statement
$stmt->execute();
// Get the result of the executed statement
$result = $stmt->get_result();
// If the file with the given ID exists in the database
if ($result->num_rows > 0) {
// Fetch the file information
$file = $result->fetch_assoc();
$fileName = $file['name'];
$fileType = $file['type'];
$fileData = $file['file'];
// Set the appropriate content type for the file
header("Content-Type: $fileType");
// Set the content disposition to force download and specify the file name
header("Content-Disposition: attachment; filename=$fileName");
// Output the file data to the browser
echo $fileData;
// Terminate the script after file output
exit;
} else {
// If the file is not found, display an error message
echo "File not found";
}
// Close the prepared statement
$stmt->close();
} else {
// If the 'id' parameter is not set in the URL, display an error message
echo "Invalid file request";
}
// Close the database connection
$conn->close();
?>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
<hr>
<?php
// Connect to the database
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "file_storage";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Retrieve files from the database
$sql = "SELECT iddata, name, type, size, file FROM data";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Display files in a table
echo "<table>";
echo "<tr><th>ID</th><th>Name</th><th>File Type</th><th>Size</th><th>Action</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["iddata"] . "</td>";
echo "<td>" . $row["name"] . "</td>";
echo "<td>" . $row["type"] . "</td>";
echo "<td>" . $row["size"] . "</td>";
if (strpos($row["type"], 'image') !== false) {
echo "<td><mg src='data:" . $row["type"] . ";base64," . base64_encode($row["file"]) . "'></td>";
} else {
echo "<td><a href='download.php?id=" . $row["iddata"] . "'>Download</a></td>";
}
echo "</tr>";
}
echo "</table>";
} else {
echo "No files found.";
}
$conn->close();
?>
</body>
<?php
// Connect to the database
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "file_storage";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Handle file upload
if(isset($_FILES['file'])) {
$file_name = $_FILES['file']['name'];
$file_type = $_FILES['file']['type'];
$file_size = $_FILES['file']['size'];
$file_content = addslashes(file_get_contents($_FILES['file']['tmp_name']));
$sql = "INSERT INTO data (name, type, file, size) VALUES ('$file_name', '$file_type', '$file_content', '$file_size')";
if ($conn->query($sql) === TRUE) {
echo "File uploaded successfully";
} else {
echo "Error uploading file: " . $conn->error;
}
}
$conn->close();
?>
<?php
// Connect to the database
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "file_storage";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Retrieve file content from the database
$id = $_GET["id"];
$sql = "SELECT name, file, type FROM data WHERE iddata = $id";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$name = $row["name"];
$content = $row["file"];
$file_type = $row["type"];
// Send file to the browser as a file attachment
header("Content-Type: $file_type");
header("Content-Disposition: attachment; filename=\"$name\"");
echo $content;
} else {
echo "File not found.";
}
$conn->close();
?>