Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] losowa liczba przy rejestracji

Napisany przez: korey 16.08.2010, 16:23:16

Witam. Tworzę Formularz Do rejestracji w którym będzie trzeba wpisać w input losowy kod. Napisałem kodzik który wyświetla mi taki losowy 5 cyfrowy kod, ale nie wiem jak wyciągnąć ten wyświetlony ciąg cyfr po za Pętlę, tak bym mógł go porównać z tym co wpiszę w input. Naprowadzi mnie ktoś jak to zrobić.?

  1. <?php
  2. $liczby = http://www.php.net/array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); //liczby 0-9
  3. http://www.php.net/shuffle($liczby); // tasowanie tablicy
  4. for ( $i = 0; $i < 4; $i++ )
  5. {
  6. $liczba = $liczby[$i];
  7. http://www.php.net/echo $liczba;
  8. }
  9.  
  10. ?>
  11. <form>
  12. <input type="text" name="kod" />
  13. </form>

Napisany przez: flashdev 16.08.2010, 16:26:43

Nie trzeba wywarzać otwartych drzwi http://php.net/manual/en/function.uniqid.php

Napisany przez: korey 16.08.2010, 16:41:03

Nie o taki efekt mi chodziło.. jak używam tej funkcji zwraca mi takiej długości kody: 34c695ba02c7404.40539291. a ja potrzebuję 4-6 znakowe..

Napisany przez: Blame 16.08.2010, 16:43:18

substr

Napisany przez: korey 16.08.2010, 16:54:47

Noo biggrin.gif teraz jest cacy. biggrin.gif tylko zastanawiam się czemu w funkcji uniqid(); pierwsze 6 znaków jest cały czas takie same..? biggrin.gif
tak wywołałem uniqid:

  1. $xx = http://www.php.net/uniqid('', true);
  2. http://www.php.net/echo $xx;
$xx zawsze na początku zwraca mi: 4c695e

Napisany przez: Kaffiuri 16.08.2010, 16:56:08

a może tak?

  1. <?php
  2. $liczby = http://www.php.net/range(0, 9); //liczby 0-9
  3. http://www.php.net/shuffle($liczby); // tasowanie tablicy
  4. $liczba = http://www.php.net/array_slice($liczby, 0, 5);
  5. foreach ($liczba as $dane) {
  6. $wynik .= $dane;
  7. }
  8. http://www.php.net/echo $wynik;
  9. ?>
  10.  
  11. <form>
  12. <input type="text" name="kod" />
  13. </form>


teraz pozostaje ci porownac zmienna $wynik z tym co wpisał uzytkownik

Napisany przez: korey 16.08.2010, 17:00:03

@Kaffiuri trafiłeś w 10 biggrin.gif dzięki. ale poprzednie pytanie nadal aktualne. ;p ciekaw jestem tongue.gif

Napisany przez: Wicepsik 16.08.2010, 17:35:46

rand, po co pętle ?

Napisany przez: Kaffiuri 16.08.2010, 17:44:01

Tez racja, mniej kodu wyjdzie.. zapomniałem o rand.

Napisany przez: gorden 16.08.2010, 17:44:02

nie wiem czy najlepszy, czy najgorszy sposób, ale ja to robię tak:

  1. <?
  2. // generowanie kodu
  3. $od = 1;
  4. $do = 9;
  5. $rd = http://www.php.net/rand($od, $do);
  6. http://www.php.net/echo"Przepisz kod:<br>$rd<br>
  7. <input type=\"text\" name=\"kod\">
  8. <input type=\"hidden\" name=\"kod2\" value=\"$rd\">";
  9.  
  10. //sprawdzanie poprawnosci
  11. $tk = $_POST['kod'];
  12. $stk = $_POST['kod2'];
  13. if($tk !== $stk){ http://www.php.net/echo"Źle przepisałeś wygenerowany kod!"; http://www.php.net/exit; }

Napisany przez: Blame 16.08.2010, 18:07:02

Cytat(korey @ 16.08.2010, 17:54:47 ) *
tylko zastanawiam się czemu w funkcji uniqid(); pierwsze 6 znaków jest cały czas takie same..? biggrin.gif

Przecież pisze w manualu, że funkcja uniqid generuje ciąg na podstawie aktualnego czasu i o ile sekundy i minuty się u ciebie zmieniały, o tyle godziny już nie, stąd ta powtarzalność winksmiley.jpg

Napisany przez: kryzz 16.08.2010, 18:37:17

Może to winksmiley.jpg

  1. <?php
  2.  
  3. function randNums($lenght) {
  4. http://www.php.net/static $hash = '0123456789';
  5. $out = '';
  6. for($x=0;$x<$lenght;++$x) $out .= $hash{http://www.php.net/rand(0,9)};
  7. return $out;
  8. }
  9.  
  10. http://www.php.net/echo randNums(5);
  11.  
  12.  
  13. function randChars($lenght) {
  14. http://www.php.net/static $hash = 'abcdefghijklmnopqrstuvwxyz0123456789';
  15. $out = '';
  16. for($x=0;$x<$lenght;++$x) $out .= $hash{http://www.php.net/rand(0,35)};
  17. return $out;
  18. }
  19.  
  20. http://www.php.net/echo randChars(5);
  21.  
  22. ?>

Napisany przez: franki01 16.08.2010, 21:17:17

Ja korzystam z md5(microtime()) + ewentualnie substr.

Napisany przez: korey 17.08.2010, 20:00:57

Dzięki wam wszystkim ze wszystkiego zrobiłem jedno.. tak jakby ;P

O to moje ostateczne rozwiązanie tego problemu: smile.gif

  1. <?php
  2. function generator_code($lok){
  3.  
  4. $liczby = http://www.php.net/range('A', 'Z'); //Znaki A-Z
  5. http://www.php.net/shuffle($liczby); // tasowanie tablicy
  6. $liczba = http://www.php.net/array_slice($liczby, 0, 5);
  7. foreach ($liczba as $dane) {
  8. $wynik .= $dane;
  9. }
  10. http://www.php.net/echo '<input type="hidden" name="getcode" value="'.$wynik.'" />'; //funkcja jest wywoływana w formularzu dlatego ten input
  11.  
  12. http://www.php.net/echo $wynik; // Widok Diva z losowym kodem
  13. }
  14. ?>


Dziękuje bardzo wszystkim za pomoc smile.gif z pol roku obijałem się i pozapominało się troszkę. tongue.gif

Pozdro By Korey

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)