Autor Zpráva
Innerka
Profil *
Ahoj lidi, mohl by mi prosím někdo poradit? V databázi mám ve sloupci zapsán údaj ve tvaru "číslo, číslo" (např. 1, 3). Toto číslo jsem si pak z databáze vytáhla a uložila do proměnné $cislo. Když ale napíšu rand($cislo); , tak se to vypíše Warning: rand() expects exactly 2 parameters, 1 given in

Na netu jsem hledala nějaké řešení, ale obdobný problém jsem nenašla. :( Poraďte prosím.
scheras
Profil *
A víte k čemu slouží funkce rand()? Ta slouží k vygenerování náhodného čísla a potřebuje k tomu dva parametry, totiž minimální číslo a maximální číslo. Příklad:
rand(1,10); 
juriad_
Profil *
int rand ( int $min , int $max )
musis zadat dva argumenty
Innerka
Profil *
Ano, takže když mám v databázi uložený např. údaj 1, 3 který následně uložím do proměnné, tak to bude brát jako jedno číslo? :)

A jaké by bylo tedy vhodné řešení, když potřebuji mít uloženou minimální i maximální hodnotu v databázi? Vytvořit dva sloupce se mi zdá jako poněkud nešťasné řešení, poněvadž mám 16 údajů a u každého bych potřebovala mít minimální i maximální hranici. :/
tiso
Profil
Innerka:
Ano, takže když mám v databázi uložený např. údaj 1, 3 který následně uložím do proměnné, tak to bude brát jako jedno číslo? :)
Nie, bude to brať ako jeden reťazec. Riešenie:

list($min, $max) = $cislo;//tvoje cislo z DB
$x = rand($min, $max);

K návrhu databázy: naozaj by si mala mať uložené min a max hodnoty zvlášť, ale pravdebodobne nie v stĺpcoch, ale v riadkoch novej tabuľky vo vzťahu 1:n k tejto pôvodnej. Skús popísať viac, čo sú to za dáta a čo chceš dosiahnuť.
Alphard
Profil
tiso [#5]:
Chybí explode().
Innerka
Profil *
Děkuji tiso :) Přepsala jsem údaj do tvaru 1-3 a použila:

list($min, $x, $max) = $cislo;//tvoje cislo z DB
$vypis = rand($min, $max);

Když jsem to napsala bez toho $x, tak to do proměnné $max uložilo tu pomlčku. :)

A oč se jedná? :) No rozhodla jsem se, že si zkusím udělat něco jako hru. :D Jedná se tedy o životy atp. :)
tiso
Profil
Alphard: stáva sa...
Innerka: mal som tam chybu, ten tvoj kód by síce fungoval, ale len pre jednociferné čísla. Opravený kód:
list($min, $max) = explode('-', $cislo);//tvoje cislo z DB
$vypis = rand($min, $max);
Innerka
Profil *
Děkuji moc. :)) Bohužel jsem narazila na další problém, s kterýho mi už jde vážně hlava kolem..

Udělala jsem další změnu: V databázi mám údaj ve tvaru +1,3 nebo -1,3.
Potřebuji nějak rozlišit jestli je v tom údaji + nebo - použila jsem na to funkci preg_match() ale nějak to nedokážu správně napsat. :(

preg_match("/^[\+-]+.[0-9],[0-9]/", $zaznam["sloupec"]);

Už jsem to zkoušela všelijakými způsoby, ale nějak jsem se do toho zamotala. :(
Virtus
Profil
$match = array();
preg_match("/^([\+\-]+)[0-9]+,[0-9]+/", $zaznam["sloupec"], $match);

if( $match[1] == '+' ){
    //číslo je kladné
} else {
    //číslo je záporné
}
nebo ještě třeba:
if( $zaznam['sloupec'] >= 0 ){
    echo 'číslo je kladné';
} else {
    echo 'číslo je záporné';
}
Innerka
Profil *
Děkuji, preg_match funguje :)) Akorát bych se ráda nějak vyhla tomu poli. Potřebovala bych to nějak takto:

      $cislo = "-1,30";
      if (preg_match("/^([\+\-])+[0-9]+,[0-9]+/", $cislo))
        {
          list($operator, $min, $max) = explode(",", $cislo);
          $vypis = rand($min, $max);
          echo ($vypis);
        }

Bohužel jakmile je tam $operator tak to nejde a napíše to:
Notice: Undefined offset: 2 in .....
preca1
Profil
Těmto problémům by ses vyhnula, kdybys to udělala správně a hodnoty min a max měla ve speciálních sloupečcích (viz [#5]).
Za nějakou dobu se třeba rozhodneš, že min a max budou desetinný čísla a zas se ti to celý rozbije.
Problém taky může nastat, když budeš chtít aktualizovat jednu z těch hodnot.
Innerka
Profil *
      $cislo = "-,1,30";
      if (preg_match("/^([\+\-])+,+[0-9]+,[0-9]+/", $cislo))
        {
          list($operator, $min, $max) = explode(",", $cislo);
          $vypis = rand($min, $max);
          echo ($vypis);
        }
Už jsem na to přišla! :D Bože, taková maličkost stačila :DD
Děkuji za rady i trpělivost. :)))
petr 6
Profil
Innerka:
V databázi mám údaj ve tvaru +1,3 nebo -1,3.
Potřebuji nějak rozlišit jestli je v tom údaji + nebo -

Převést na dvě proměnné typu integer a použít if($promenna<0)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: