RonoRed Ответов: 1

Проблема в коде, который не должен повторять одно и то же число в PHP


Привет ребята
Я написал эту функцию, которая возвращает время(число), которое не должно существовать в один и тот же день в базе данных, что означает, что одно и то же время не должно повторяться, но когда я выполняю его, время(число) повторяется
не могли бы вы помочь мне разобраться с этим делом?

Примечание: таблица пуста, и она будет заполнена, когда весь код будет выполнен, я только что опубликовал функцию, которая не должна повторять время.


function checkTime($className,$day,$conn){
      
    global $numberLimet,$Daily,$UserLimt,$exist;

    $sqlHoure = "SELECT * from schedule WHERE classname='".$className."'";
    $hourQuery = mysqli_query($conn,$sqlHoure);
    $h = array();
    

    while ($hour = mysqli_fetch_assoc($hourQuery)){
 
        
        $h[$hour['hour']] = $hour['day1'];

       // array_search();
    }

    $number = rand(1,7);

    if(array_search($day,$h) && array_key_exists($number,$h)){


        return 'error';


    }else{

        
     if($hour['hour'] != $number && $hour['day1']  != $day){

        $numberLimet++;
        if($numberLimet == $Daily){
            $UserLimt = 1;
            $FristAdd = false;

            echo("UserLimt" . $UserLimt);

            return 'errorLimit';
        }else{
            return $number;

        }

     }else{
     }
      
     // 
        

    }

    return $h;


          
}


Что я уже пробовал:

я много раз пытался изменить код, но результат был один и тот же

1 Ответов

Рейтинг:
1

Patrice T

$sqlHoure = "SELECT * from schedule WHERE classname='".$className."'";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


RonoRed

только администратор может вставлять данные в базу данных поэтому имя класса может быть вставлено только администратором

RonoRed

честно говоря у меня нет опыта я просто хочу знать в чем проблема со случайным числом

MadMyche

Итак, если программа используется только администратором, то можно ли использовать плохие методы кодирования?

RonoRed

и я использовал !preg_match("/^[a-zA-Z]*$/"

RonoRed

но мне нужна помощь со случайным числом :P

RonoRed

и спасибо Вам за то, что вы принесли проблему SQL-инъекции, я изучу ее, чтобы написать более эффективный код

Patrice T

Кодирование против SQL-инъекций заключается в том, чтобы сделать ваш код безопасным, а не эффективным.