SQL — загружает все, даже если я просил его загрузить только%, как%

#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:

Я уже понял это. Все, что мне нужно сделать, это добавить идентификатор в опцию загрузки кода, и это сработало как по волшебству.