• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Генерация кодов
Dimitro
Praise the sun!
В php я нуб полнейший, многих нюансов не знаю.
Понадобилось написать скрипт для генерации чего-то в стиле промо кодов.

Вот скрипт:

Code
<?php

function generate()   
{
      $code_length = 16;
      $characters = '0123456789abcdefghijklmnopqrstuvwxyz';

      for ($p = 0; $p < $code_length; $p++)
      {
          if (!($p % 4) && $p != 0)
              $string .= '-';

          $string .= $characters[rand(0, strlen($characters))];
      }

      return strtoUpper($string);
}

for ($i = 0; $i < 25; $i++)
{
      echo generate();
      echo "<br>";
}

?>


Скрипт, в общем-то, работает, но иногда выводит коды не 16ти значной длины, а 15ти или даже 14ти.
Скорее всего ошибка настолько очевидна, что я не могу ее найти)
Подскажите, в чем косяк.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 1 отредактировано Dimitro - Среда, 03.10.2012, 19:35
Dark_Mefodii
IT-Consulting by DM©
Первый дубль:
$code_length = 16;
попробуй значение здесь поменять - как будет выводить.
Второй дубль:
Смотри условия, может там что-то не так задано
Третий дубль:
Косяки бывают везде, может даже этот скрипт полностью правильный, разве что просто не хочет.
Яркий пример - писал на С++ тетрис, всё нормально, адекватно, поставил таймер - считает секунды, добавил счёт и окошко с сменой фигур - таймер стал перескакивать одну цифру (1-3-5-7-9), а код был верным smile
Сообщение # 2 написано 03.10.2012 в 21:46
Кот_ДаWINчи
Чемпион
Всё просто как божий день.

$string .= $characters[rand(0, strlen($characters)-1)];

Если длина строки 16, то при счете от 0 последнее зачение 15, а не 16 ...
мне фиолетово какой у меня рейтинг, можете поставить хоть минус миллион...
Не в плюсах счастье...
Помогаю тем, кто хочет чтобы ему помогли, а не сделали за него.
Сообщение # 3 отредактировано Кот_ДаWINчи - Среда, 03.10.2012, 22:11
Dimitro
Praise the sun!
Я убирал все вплоть до голого цикла перебора, ошибка где-то в цикле, видимо конкретно для каких-то значений.
Зависимость я понять не смог.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 4 написано 03.10.2012 в 22:09
Dark_Mefodii
IT-Consulting by DM©
Проверь где ошибка - при построении запроса (попробуй поставь к примеру 17)
Quote (Dimitro)
$code_length = 16;

Quote (Dimitro)
   for ($p = 0; $p < $code_length; $p++)       {           if (!($p % 4) && $p != 0)

Или при непосредственно самом выводе информации, это тут
Quote (Dimitro)
for ($i = 0; $i < 25; $i++)
Сообщение # 5 написано 03.10.2012 в 22:12
Кот_ДаWINчи
Чемпион
Dimitro, Dark_Mefodii, вы явно не желаете прочесть мой предыдущий пост, и поставить в нужное место эту долбаную -1 !!!
мне фиолетово какой у меня рейтинг, можете поставить хоть минус миллион...
Не в плюсах счастье...
Помогаю тем, кто хочет чтобы ему помогли, а не сделали за него.
Сообщение # 6 написано 03.10.2012 в 22:44
Dimitro
Praise the sun!
Quote (Кот_ДаWINчи)
$string .= $characters[rand(0, strlen($characters)-1)];

Спасибо, вкурил, так и знал, что в представлении элементов массива напутал.

Quote (Кот_ДаWINчи)
Dimitro, Dark_Mefodii, вы явно не желаете прочесть мой предыдущий пост, и поставить в нужное место эту долбаную -1 !!!

Когда я постил свой, вашего еще не было, после этого с темы я вышел и зашел только сейчас.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 7 отредактировано Dimitro - Среда, 03.10.2012, 22:50
Dimitro
Praise the sun!
Данная тема была перемещена из раздела Web форум.
Причина перемещения: Вопрос решен.

Переместил: Dimitro.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 8 написано 03.10.2012 в 22:51
  • Страница 1 из 1
  • 1
Поиск: