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řipojit
try {// 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ě chyby
echo "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(); ?>