| Autor | Zpráva | ||
|---|---|---|---|
| Innerka Profil * |
#1 · Zasláno: 19. 3. 2013, 10:42:54
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 * |
#2 · Zasláno: 19. 3. 2013, 10:46:17
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 * |
#3 · Zasláno: 19. 3. 2013, 10:46:37
int rand ( int $min , int $max ) |
||
| Innerka Profil * |
#4 · Zasláno: 19. 3. 2013, 10:52:46
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 |
#6 · Zasláno: 19. 3. 2013, 11:08:44
|
||
| Innerka Profil * |
#7 · Zasláno: 19. 3. 2013, 11:13:28
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 |
#8 · Zasláno: 19. 3. 2013, 13:13:58
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 * |
#9 · Zasláno: 19. 3. 2013, 13:59:49
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é
}if( $zaznam['sloupec'] >= 0 ){
echo 'číslo je kladné';
} else {
echo 'číslo je záporné';
} |
||
| Innerka Profil * |
#11 · Zasláno: 19. 3. 2013, 14:46:42
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 |
#12 · Zasláno: 19. 3. 2013, 15:29:39
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 * |
#13 · Zasláno: 19. 3. 2013, 16:00:22
$cislo = "-,1,30";
if (preg_match("/^([\+\-])+,+[0-9]+,[0-9]+/", $cislo))
{
list($operator, $min, $max) = explode(",", $cislo);
$vypis = rand($min, $max);
echo ($vypis);
}Děkuji za rady i trpělivost. :))) |
||
| petr 6 Profil |
#14 · Zasláno: 19. 3. 2013, 19:45:57
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)
|
||
|
Časová prodleva: 13 let
|
|||
0