#php #sql
Вопрос:
Я работаю над простой системой посещаемости, все работает, но. в этом конкретном PHP-скрипте есть проблема, он должен загружать только данные загрузки из SQL, но когда я нажимаю $_GET[‘search_download’], он загружает все данные из SQL. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я использую репозиторий GitHub, который позволяет мне конвертировать PHP-скрипт в PDF
<?php
session_start();
if(isset($_SESSION['role']) amp;amp; $_SESSION['role'] == 'admin'){
} else {
echo header('Location: ../../event_attendance_system/index.php');
}
include_once ('../../event_attendance_system/SQL/connections.php');
$sql_connection = connection();
$search = $_GET['search_id'];
$sql ="SELECT * FROM guest_table WHERE firstname LIKE '%$search%' OR lastname LIKE '%$search%' OR email LIKE '%$search%' ORDER BY ID DESC";
$guest = $sql_connection->query($sql) or die ($sql_connection->error);
$row = $guest -> fetch_assoc();
error_reporting(E_ERROR | E_PARSE);
if($row == null){
$empty ='<p class="text-danger text-uppercase text-center">Data is not registered in the data base</p>';
}
if (isset($_GET['search_download'])){
require_once __DIR__ . '../../vendor/autoload.php';
$mpdf = new MpdfMpdf();
$data = '';
// this the github repository I am talking about.
// I do not understand why this downloads all the data from SQL when I have already set this
// $sql ="SELECT * FROM guest_table WHERE firstname LIKE '%$search%' OR lastname LIKE '%$search%' OR email LIKE '%$search%' ORDER BY ID DESC";
$data .='<table>';
$data .='<thead>';
$data .='<tr>';
$data .='<th >#</th>';
$data .='<th >First name</th>';
$data .='<th >Last name</th>';
$data .='<th >Email </th>';
$data .='<th >Date and time </th>';
$data .='</tr>';
$data .='</thead>';
$data .='<tbody>';
do {
$data .='<tr>';
$data .='<th>'.$row['ID']. '</th>';
$data .='<td>'.$row['firstname'].'</td>';
$data .='<td>'.$row['lastname'].'</td>';
$data .='<td>'.$row['email'].'</td>';
$data .='<td>'.$row['date_time'].'</td>';
$data .='</tr>';
}while($row = $guest -> fetch_assoc());
$data .='</tbody>';
$data .='</table>';
$mpdf ->WriteHTML($data);
$mpdf ->Output('data.pdf','D');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home page</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1 K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2 l" crossorigin="anonymous">
<link rel="stylesheet" href="../../event_attendance_system/css/global.css">
<link rel="stylesheet" href="../../event_attendance_system/css/admin.css">
</head>
<body>
<div class="pt-5">
<div class="container-fluid shadow-lg p-3 mb-5 bg-white rounded">
<p class="admin_message">Participants Details</p>
<div class="search_container">
<form action="../../event_attendance_system/php/search.php" method="get">
<input type="search" id="form1" class="form-control" name="search_id" placeholder="search here"/>
<label class="pt-3"><a href="../../event_attendance_system/index.php">Back To Home Page</a></label>
<label><a href="../../event_attendance_system/php/admin_page.php">Show All</a></label>
<label><a href="../../event_attendance_system/download_search.php" name="search_download">Download data</a></label>
</form>
</div>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First name</th>
<th scope="col">Last name</th>
<th scope="col">Email </th>
<th scope="col">Date and time </th>
</tr>
</thead>
<tbody>
<?php do {?>
<tr>
<th scope="row"><?php echo $row['ID'];?></th>
<td><?php echo $row['firstname']; ?></td>
<td><?php echo $row['lastname']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['date_time']; ?></td>
</tr>
<?php }while($row = $guest -> fetch_assoc()); ?>
</tbody>
</table>
<?php if(isset($empty)) { ?>
<div>
<?php echo $empty; ?>
</div>
<?php } ?>
</div>
</div>
</body>
</html>
Комментарии:
1. Вы сделали отладочный вывод
$sql
переменной и проверили, все ли там в порядке? Вы проверяли эту инструкцию SQL с помощью copyamp;paste в phpMyAdmin или аналогичной? И к вашему сведению, это, конечно, открыто для SQL-инъекции.2. Привет, я решил эту проблему, это был просто идентификатор, который нужно добавить в опцию загрузки. Спасибо, что уделили время проверке этого кода, в этом нет ничего серьезного, это просто простой проект, также спасибо, что указали на SQL-инъекцию, над которой я буду работать.
Ответ №1:
Я уже понял это. Все, что мне нужно сделать, это добавить идентификатор в опцию загрузки кода, и это сработало как по волшебству.