Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowanie Rand.
Forum PHP.pl > Forum > PHP
kurczak610
Witam, chciałbym zrobić takie coś że:
Wpisuje w pole input cyfre taką ile chce aby wylosowało się cyfr. Np. 18
I klikam losuj i nizej pokazaly sie 18 losowych cyfr.

Mam cos takiego ale nie wiem jak polaczyc form z php zeby to działało i jak dać petelke:
  1. <form method="POST">
  2. <table>
  3. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  4. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  5. </table>
  6. </form><br>
  7. <?php
  8.  
  9.   $cyfry=array('a','b','c');
  10.  
  11.  
  12.  
  13. do
  14. {
  15.   $los=rand(0,2);
  16.  
  17.   $cyfra.=$cyfry[$los];
  18.  
  19.   $i++;
  20. }
  21.  
  22. while($i<=5);
  23.  
  24. $pokaz = $cyfra;
  25. $explode=explode("\n",$pokaz);
  26. $code=count($explode);
  27. for($i=0;$i<$code;$i++)
  28. $kod = trim ($explode[$i]);
  29. echo "$kod";
  30. ?><br><br>

Za pomoc dam pomógł winksmiley.jpg
kkuba
  1. <form action="" method="POST">
  2. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  3. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  4. </form><br>


  1. <?php
  2. if(isset($_POST['ilosc']))
  3. {
  4.    $count = $_POST['ilosc'];
  5.  
  6.    if(!is_numeric($count))
  7.    {
  8.        die('Przyjmuję tylko liczby. ');
  9.    }
  10.  
  11.    $chars = '1234567890abcdefghijklmnopqrstuvwxyz';
  12.  
  13.    for($q = 0; $q < $count; $q++)
  14.    {
  15.        $res .= $chars[rand(0, strlen($chars))];
  16.    }
  17.  
  18.    echo $res;
  19. }
  20. ?>


Pozdrawiam.
Asmox
Ja to bym zrobił troszkę inaczej:
1. Ten formularzyk, tylko że do ćwiczeń może lepszy będzie GET
2.
  1. <?php
  2. function LosujLiczby($ile, $min=FALSE, $max=FALSE) {
  3. $liczby = array();
  4. if($min && $max){
  5. for $(i = 0; $i < $ile; $i++) {
  6. $liczby[$i] = Rand($min, $max)
  7. }
  8. }
  9. else {
  10. for $(i = 0; $i < $ile; $i++) {
  11. $liczby[$i] = Rand()
  12. }
  13. }
  14. return $liczby
  15. }
  16. ?>

Tych pierdół ze sprawdzaniem, czy argumenty to liczby itd nie będę podawał, bo wygląda mi to na ćwiczenie,a poza tym kolega wyżej już napisał co trzeba robić. Jak chcesz zdobyć te cyfry to możesz zrobić na przykład takie cuś:
  1. <?php
  2. $ile = $_GET['pole'] // To pole z formularza co w nim liczbę wpisujesz
  3. $liczby = LosujLiczby($ile) // Jak chcesz to podajesz zakres, jak nie to olej
  4. foreach ($liczby as $liczba) {
  5. echo "$liczba, "
  6. }
  7. ?>
kurczak610
Ja tam wole na POST tongue.gif ale zle mnie zrozumieliście.

kkuba zrobil formularz ze jak wpisze np. 8 to robi sie 8 cyfrowy kod np.
12345678

A ja chce ze jak wpisze 8 ma byc tak:
12345678
qwertyui
asdfghjk
zxcvbnm,
qazwsxed
crfvtgby
hnujmikl
qwsdcvbg

Da się tak? tongue.gif
erix
Ja korzystam z takiego potworka:
  1. <?php
  2. $a = range(48,57);
  3.            $b = range(65,90);
  4.            $c = range(97,122);
  5.            $chars = array_merge($a,$b,$c);
  6.            $c = count($chars);
  7.  
  8.            for($a=0;$a<8;$a++){
  9.                $pass .= chr($chars[mt_rand(0,$c-1)]);
  10.            }
  11. ?>

Łopatologiczne. ;p
Maveral
To ja już nie wiem czy chcesz same cyfry, czy też litery? W pierwszym poście piszesz o cyfrach, więc wyglądało by to jakoś tak:
  1. <?php
  2.  
  3. $ile = $_POST['ilosc'];
  4.  
  5. for ($k=0; $k<$ile; $k++)
  6. {
  7. $i = rand (1, 1000000);
  8. echo "$i <br />";
  9. }
  10.  
  11. ?>
golaod
Tworzysz tablicę ze wszystkimi znakami jakie chcesz mieć, a następnie:
  1. <?php
  2. if( isset($_POST['ilosc']) ){
  3.  $keys =  array_rand($tablica_znakow, 8);
  4.  foreach($keys as $val)
  5.    echo $tablica_znakow[$val];
  6. }
  7. ?>


Tadam smile.gif
kurczak610
Ok, mam takie coś:
  1. <form action="" method="POST">
  2. <table>
  3. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  4. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  5. </table>
  6. </form><br>
  7. <?php
  8. if(isset($_POST['submit']))
  9. {
  10.   $ile = $_POST['ilosc'];
  11.  
  12.  
  13. $chars = '1234567890abcdefghijklmnopqrstuvwxyz';
  14.  
  15.   for ($k=0; $k<$ile; $k++)
  16.   {
  17.       $res = $chars[rand(0, strlen($chars))];
  18.  
  19. echo "$res <br />";
  20. }
  21.  
  22. }
  23. ?>


Jest ok, losuje tyle cyfr/liczb ile wpisze ale dlugosc tego kodu to 1 cyfra/liczba.
Co zrobić zeby kod mial dlugosc 5 cyfr/liczb?
Spawnm
$res .= $chars[rand(0, strlen($chars))];
kurczak610
Tez jest zle np. wpisalem liczbe 3 i mam tak:
b
bp
bpf
Spawnm
daj echo za klamrą
kurczak610
Jest zle. Wpisuje np. 2 i jest:
6s

A ja chce ze jak wpisze 2 to bedzie tak:
675fg
ujn4f

I koniecznie kod musi mieć długość 5 cyfr/liczb.
Pilsener
Ktoś go rozumie? Poza tym Kurczak, dostałeś już chyba n sposobów użycia rand + tablic, resztę masz w manualu:
http://pl2.php.net/manual/pl/function.array-rand.php

Nie będziemy na każde zawołanie spełniali Twoich fantazji, spróbuj sam coś zrobić.
Maveral
Chodzi chyba o to, że wylosowane liczby muszą być pięciocyfrowe, czyli:

  1. <?php
  2.  
  3. $ile = $_POST['ilosc'];
  4.  
  5. for ($k=0; $k<$ile; $k++)
  6. {
  7. $i = mt_rand(10000, 99999);
  8. echo "$i <br />";
  9. }
  10.  
  11. ?>


A jakbyś chciał litery i liczby, to masz coś takiego:

  1. <?php
  2.  
  3. $ile = $_POST['ilosc'];
  4.  
  5. $chars = '1234567890abcdefghijklmnopqrstuvwxyz';
  6.  
  7.  for ($k=0; $k<$ile; $k++)
  8.    {
  9.        for ($z=0; $z<5; $z++)
  10.            {
  11.            $res = $chars[rand(0, strlen($chars))];
  12.            echo "$res";
  13.            }
  14.        echo "<BR />";
  15.    }
  16.  
  17. ?>


Nie wiem czy użycie dwóch pętli jest optymalne, ale działa winksmiley.jpg
kurczak610
Maveral Jesteś wielki haha.gif O to mi chodziło Dam pomógł smile.gif

PS. Dało by te stworzone kody automatycznie dodać do bazy danych?
Fifi209
Cytat(kurczak610 @ 2.06.2009, 19:18:38 ) *
PS. Dało by te stworzone kody automatycznie dodać do bazy danych?


Tak, jak najbardziej.

Zgadnę, nie wiesz jak się za to zabrać?

Nic nie szkodzi mam coś dla Ciebie:
http://www.google.pl/search?hl=pl&q=ku...mp;aq=f&oq=
kurczak610
Cytat(fifi209 @ 2.06.2009, 19:23:27 ) *
Tak, jak najbardziej.

Zgadnę, nie wiesz jak się za to zabrać?

Nic nie szkodzi mam coś dla Ciebie:
http://www.google.pl/search?hl=pl&q=ku...mp;aq=f&oq=


Nie zgadłeś, dam to przez expolde i bedzie ok smile.gif

Napisałem zapisuje się ale tylko ostatnia liczba calego kody, wiecie dlaczego tak moze byc? tongue.gif

Więc mam cos takiego:
  1. <form action="" method="POST">
  2. <table>
  3. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  4. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  5. </table>
  6. </form><br>
  7. <?php
  8. if(isset($_POST['submit']))
  9. {
  10.  
  11.  
  12. $ile = $_POST['ilosc'];
  13.  
  14. $chars = '1234567890abcdefghijklmnopqrstuvwxyz';
  15.  
  16. for ($k=0; $k<$ile; $k++)
  17.   {
  18.       for ($z=0; $z<5; $z++)
  19.           {
  20.           $res = $chars[rand(0, strlen($chars))];
  21.           echo "$res";
  22.           }
  23.       echo "<BR />";
  24.  
  25.  
  26.  
  27.        $explodecodes=explode("\n",$res);
  28.    $code=count($explodecodes);
  29.    for($i=0;$i<$code;$i++)
  30.        {
  31.        mysql_query("INSERT INTO kody VALUES ('NULL','$explodecodes[$i]','0','0')");
  32.        }
  33.  
  34. }
  35. }
  36. ?>


Losuje mi to ale zapisuje do bazy danych tylko ostatnią cyferkę tongue.gif Dlaczego? sadsmiley02.gif sadsmiley02.gif
phpion
  1. <form action="" method="POST">
  2. <table>
  3. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  4. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  5. </table>
  6. </form><br>
  7. <?php
  8. if(isset($_POST['submit'])) {
  9.    $ile = $_POST['ilosc'];
  10.  
  11.    $chars = '1234567890abcdefghijklmnopqrstuvwxyz';
  12.    $res = '';
  13.  
  14.    for ($k=0; $k<$ile; $k++) {
  15.                // tu cos powinno byc
  16.  
  17.                for ($z=0; $z<5; $z++) {
  18.                    $res .= $chars[rand(0, strlen($chars))];
  19.                }
  20.                
  21.                mysql_query("INSERT INTO kody VALUES ('NULL','$res','0','0')");
  22.                        
  23.                echo $res;
  24.                echo "<BR />"
  25.  
  26.    }
  27. }
  28. ?>

PS: zostawiłem ci w jednym miejscu niespodzianke - usuniętą jedną linijkę. Pomyśl samodzielnie co tam powinno być (bez tej linijki kod powinien również działać).
kurczak610
Ten skrypt tez nie dziala bo losuje kod tak:

9jlhq
9jlhqd5lh7

To jest ten sam kod tylko coraz dłuższy tongue.gif a co do niespodzianki to nie powiedz mi co ona ma robić haha.gif ;P
phpion
No właśnie to jest tą niespodzianką. Pomyśl jak skrócić generowany kod w kolejnych iteracjach pętli.
kurczak610
Mysle i mysle i nie wiem co tam wpisać ;P ja z php mam do czynienia ok. 1 miesiąca tongue.gif
erix
A czytałeś o pętlach? snitch.gif
kurczak610
czyli while, ale jaki dac warunek?

  1. <?php
  2. while ($res>5) {
  3. }
  4. ?>


?
phpion
@erix:
Nie mieszaj chłopakowi, nie o pętlę tu chodzi.

@kurczak610:
No pomyśl. Sam napisałeś, że generuje ci:
Kod
9jlhq
9jlhqd5lh7

Chciałbyś zapewne mieć:
Kod
9jlhq
d5lh7

Zauważ, że aktualnie za każdym razem do wygnerowanego poprzednio kodu dopisywany jest nowy. Więc? Więc musisz jakoś sprytnie wyeliminować tą przypadłość czyli zerować zmienną zawierającą kod. Powiem nawet więcej: linijka, którą potrzebujesz do szczęścia znajduje się już w podanym przeze mnie kodzie. Odszukaj ją i umieść w odpowiednim (oznaczonym!) miejscu.
kefirek
A tak ?

  1. <form action="" method="POST">
  2. <table>
  3. <tr><td>Liczba:</td><td><input type="text" name="ilosc"></td></tr>
  4. <tr><td></td><td><input type="submit" name="submit" value="Losuj!"></td></tr>
  5. </table>
  6. </form><br>
  7. <?php
  8. if(isset($_POST['submit'])) {
  9. $ile = $_POST['ilosc'];
  10. $kody = "";
  11.  
  12. $l = 1;
  13. while ($l <= $ile) {
  14. $l++;  
  15. for ($i=0;$i<=7;$i++) { $kody .= chr(rand(97, 122)); if(strlen($kody) == 8) {
  16. echo $kody.'<br>';
  17. $kody = '';
  18. }
  19. }
  20. }
  21.  
  22.  
  23. }
  24. ?>
kurczak610
aaa. tongue.gif
  1. <?php
  2. $res = '';
  3. ?>
phpion
Cytat(kurczak610 @ 3.06.2009, 20:23:52 ) *
aaa. tongue.gif
  1. <?php
  2. $res = '';
  3. ?>

Bingo! party.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.