За последние 24 часа нас посетили 18495 программистов и 1619 роботов. Сейчас ищут 1146 программистов ...

Как вызвать функцию php n количество раз?

Тема в разделе "Вопросы от блондинок", создана пользователем spamolov, 19 янв 2022.

  1. spamolov

    spamolov Новичок

    С нами с:
    19 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Всем привет! Возможно вопрос глупый, но все же...

    Сам вопрос:

    Как можно вызвать функцию n кол-во раз так, чтобы она выдавала разный результат на странице(например 5 разных результатов)? Сейчас если вызывать функцию например 5 раз то она отдаст одно и тоже 5 раз.

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

    Для чего это делается:
    Учил регулярные выражения, только хотел перейти к написанию условий проверки и в голову ударило попробовать выводить несколько разных вариантов паролей.

    Что пытался сделать:
    Использовал цикл for, пытался записать их в разные переменные(выдает только один результат), гуглил и нашел только это на stackoverflow. Выводил через echo

    Код PHP
    PHP:
    1.  
    2. //Получили данные из формы
    3. $lenght = $_POST['pasLenght'];
    4. $number = $_POST['number'];
    5. $charters = $_POST['charters'];
    6.  
    7.  
    8. // Условия для проверки введенных данных
    9. if (preg_match("/[0-9]/",$lenght) && strlen($lenght) > 0) {
    10.     echo "введены цифры<br/>";
    11. } elseif (preg_match("/[а-яА-ЯёЁa-zA-Z\-_]+/", $lenght) && strlen($lenght) > 0) {
    12.     echo "не вводите буквы<br/>";
    13. } elseif ( strlen($lenght) == 0) {
    14.     echo "введите число<br/>";
    15. }
    16. else {
    17.     echo "введены недопустимые символы ". "\" <b>" .  $lenght . "</b> \"" ."<br>";
    18. }
    19. if ($number != "" ) {
    20.     $number = true;
    21.     echo "цифры выбраны" . "<br/>";
    22. } else {
    23.     echo "цифры не выбраны" . "<br/>";
    24. }
    25. if ($charters != "") {
    26.     $charters = true;
    27.     echo "спецсимволы выбраны" . "<br/>";
    28. } else {
    29.     echo "спецсимволы не выбраны" . "<br/>";
    30. }
    31.  
    32. //Начинаем генерировать пароль по параметрам
    33. function generatePassword($lenght,$number,$characters)
    34. {
    35.     //Массивы с данными
    36.     $charactersArray = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','R','S','T','U','V','X','Y','Z',);
    37.     $numberArray = array('1','2','3','4','5','6','7','8','9','0');
    38.     $specialCharactersArray = array('!','@','#','$','%','-','^','&','*','(',')','_','+','~','"','%','~',':',';','[',']','\\','/','{','}','|','<','>','?' );
    39.     $passwordArray = array();
    40.  
    41.     //функция для случайного смешивания
    42.     function passwordMixed($lenght,$passwordArray) {
    43.         for ($i = 0; $i < $lenght; $i++) {
    44.             $index = random_int(0, count($passwordArray) - 1);
    45.             $mixedResult .= $passwordArray [$index];
    46.         }
    47.         return $mixedResult;
    48.     }
    49.  
    50.     //условия для паттернов, чтобы проверять в будущем
    51.     if ($number == true && $characters == false) {
    52.         $passwordArray  = array_merge($charactersArray,$numberArray);
    53.         $pattern = '/[a-zA-Z0-9]/';
    54.     } elseif ($number == false && $characters == true) {
    55.         $passwordArray = array_merge($charactersArray,$specialCharactersArray);
    56.         $pattern = '/[a-zA-Z\!\@\#\$\%\-\^&\*\(\)\,\_\+\~\"\%\:\;\[\]\\/\{\}\|\<\>\?]/';
    57.     } elseif ($number == true && $characters == true) {
    58.         $passwordArray  = array_merge($charactersArray,$numberArray,$specialCharactersArray);
    59.         $pattern = '/[a-zA-Z0-9\!\@\#\$\%\-\^&\*\(\)\,\_\+\~\"\%\:\;\[\]\\/\{\}\|\<\>\?]/';
    60.     } else {
    61.         $passwordArray  = array_merge($charactersArray);
    62.         $pattern = '/[a-zA-Z]/';
    63.     }
    64.  
    65.  
    66.     $password = passwordMixed($lenght,$passwordArray );
    67.  
    68.     //Проверка на наличие нужных символов
    69.     /*
    70.      * не менее 2 вариантов символов
    71.      * нет одинаковых видов символов подряд
    72.      * нет одинаковых символов
    73.      */
    74.  
    75.     if (mb_strlen($password) > 0) {
    76.         echo mb_strlen($password, 'UTF-8') . "<br>";
    77.     }
    78.  
    79.    return $password;
    80. }
    81.  
    82. echo generatePassword($lenght,$number,$charters);[/code]
    83.  
    84. [B]Код формы[/B]
    85. [code]<form action="" method="post">
    86.     <div class="form-group">
    87.         <label for="lenght">Какой длины сделать пароль?</label>
    88.         <input class="form-control-range" type="range" name="pasLenght" id="pasLenght" value="12" min="6" max="12" oninput="pasLenghtOutput.value = pasLenght.value">
    89.         <div>Длина пароля будет: <output name="pasLenghtOutput" id="pasLenghtOutput">12</output> символов</div>
    90.     </div>
    91.     <div class="form-group form-check">
    92.         <input id="number" type="checkbox" class="form-check-input" name="number">
    93.         <label class="form-check-label" for="number">Использовать цифры?</label>
    94.     </div>
    95.     <div class="form-group form-check">
    96.         <input id="symbol" type="checkbox" class="form-check-input" name="charters">
    97.         <label class="form-check-label" for="symbol">Использовать спецсимволы?</label>
    98.     </div>
    99.     <input class="btn btn-primary" type="submit" value="сгенерировать">
    100. </form>
    Примечание: Еще не сделал проверку результата функции, планировалось что passwordMixed() будет повторяться пока не совпадет с условиями проверки и только после этого generatePassword() вернет результат.

    Если знаете что поменять,укажите на ошибки или подскажите что лучше почитать/посмотреть буду благодарен.
     
    #1 spamolov, 19 янв 2022
    Последнее редактирование модератором: 19 янв 2022
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    Ну инициализируй перед генерацией через random, функцией mt_rand() это элементарно и во всех учебниках и доках по языку...
    А вообще всё слишком замудрено... Всё проще можно
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.788
    Симпатии:
    1.328
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. for ( $i = 1; $i <= 5; $i++ )
    4. {
    5.     echo $i . PHP_EOL;
    6. }
    o_O
     
  4. spamolov

    spamolov Новичок

    С нами с:
    19 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Вопрос состоял в том чтобы выдавался разный результат, а не одно и тоже 5 раз
     
  5. spamolov

    spamolov Новичок

    С нами с:
    19 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Где использовать? При выводе? Как именно использовать? Данные принимаются из формы и на основе условий происходит генерация с помощью random_int()

    Тут суть написания всего кода чтобы в процессе научиться работать с регулярными выражениями, а именно сравнить и проверить, научиться писать паттерны. Просто возник вопрос почему если написать например
    Код (Text):
    1.   function el() {
    2.                echo random_int(1,100) . '<br>';
    3.             }
    4.  
    5.             for ($i = 0; $i < 5; $i++) {
    6.                 el();
    7.             }
    То все замечательно и получаем 5 разных значений, но если проворачивать это со скриптом в вопросе то выходит одно и тоже значение.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.788
    Симпатии:
    1.328
    Адрес:
    Лень
    Одно и тоже ? o_O

    Впервую очередь возьми тестовый php файл и запусти у себя на локале, проверь что выдает без пустословия.
     
  7. spamolov

    spamolov Новичок

    С нами с:
    19 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Что именно замудрено? Проверка входящих данных? Смешивание массивов? Если посмотрите внимательно то в условиях написана проверка введенных символов для range, т.к там возможно изменение под текстовое поле, это была первая практика по работе с регулярными выражениями. Отдельно написал для чего все это делается
    --- Добавлено ---
    --- Добавлено ---
    Меняет одну цифру которая задавалась через $i, вы видимо не поняли вопрос
     

    Вложения:

    • cDT7ckbXnrA.jpg
      cDT7ckbXnrA.jpg
      Размер файла:
      15,2 КБ
      Просмотров:
      4
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @spamolov, всё замечательно отрабатывает в песочнице.
    PS: без некоторых изменений, конечно, не обошлось.
    Вынесено объявление функции из тела функции, чтобы не падало с Fatal error.
    Инициализирована переменная $mixedResult.
     
  9. spamolov

    spamolov Новичок

    С нами с:
    19 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Спасибо! Для тех кто читает в будущем это правильный ответ на вопрос, ответы от остальных можно не смотреть. Вынес функцию
    passwordMixed() из функции generatePassword() все заработало. Единственное непонятно зачем переменная $mixedResult если и без нее все работает?
     
  10. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Раз уж используется конкатенация этой переменной с её предыдущим значением, логично, чтобы это значение всё-таки было.
    Зачем на кузнец Warning: Undefined variable?