Autor Zpráva
Nitrogen
Profil *
Ahoj, mám problém se dvěma scripty, co jsem napsal.
První je na generování hodnot a ukládání do pole, ale pouze dokud nebude soucet prvku v poli roven 40.
Můj script je:
//inicializace
$generovano = 0;
$maximum = 40;

//vycisteni pole
for ($i=0; $i<=4; $i++) {
$atributy[$i]=0;
}

//generovani hodnot
while ($generovano<$maximum) {
for ($a=0; $a<=4; $a++) {
$nahodna = rand(1,4);
if (($generovano+$nahodna)<$maximum) {
$atributy[$a]=$atributy[$a]+$nahodna;
$generovano=$generovano+$atributy[$a];
}
}
}
Bohužel script funguje špatně, vytváří hodnoty až do +6 navíc, což je nežádoucí.

A druhý muj script by měl být na vypisování článků na webu.
Napsal jsem se script
session_start();
include("opendb.php");

$pocet_c = mysql_query("SELECT count(Nadpis) FROM clanky");
$pocet = mysql_fetch_array($pocet_c);

$citac = 1;
$datum = date("Ymd");
settype($pocet, "integer");
echo "Pocet clanku: ".$pocet;
if ($pocet >= 3) $pocet=3;
for ($citac=0; $citac<=$pocet; $citac++) {
$idc = mysql_query("SELECT IDClanku,Nadpis,Popis,Datum FROM clanky WHERE '".$datum."'>=Datum ORDER BY Datum DESC LIMIT 1");
$p_idc = mysql_fetch_array($idc); ?>
<div class="post">
<div class="header">
<h3><? echo $p_idc['Nadpis']; ?></h3>
<div class="date"> <? echo $p_idc['datum']; ?></div>
</div>
<div class="content">
<p> <? echo $p_idc['Popis']; ?></p>
</div>
<div class="footer">
<ul>
<li class="printerfriendly"><a href="#">Printer Friendly</a></li>
<li class="comments"><a href="#">Comments (0)</a></li>
<li class="readmore"><a href="#">Read more</a></li>
</ul>
</div>
</div> <?
$datum = $p_idc['Datum'];
}

ale ten funguje taky celkem zvlastne, vypisuje jen prvni clanek, nikoli ty ostatní.
Pro přiblížení: Mám zapsané 2 články, ale 2x vypíše jen článek Nadpis první, další článek (Nadpis druhý) nevypíše. :(
Můžete mi poradit jak scripty překopat aby dělali to co mají?
nightfish
Profil
ad 1) napiš, čeho chceš dosáhnout, třeba to půjde vyřešit jinak, lépe...

ad 2) nemáš tam žádný cyklus, takže to vypíše pouze jeden výsledek
http://www.linuxsoft.cz/article.php?id_article=344
Nitrogen
Profil *
ad 1) napiš, čeho chceš dosáhnout, třeba to půjde vyřešit jinak, lépe...
U toho prvního scriptu chci dosáhnou generování hodnot do pole o 5i prvcích a chci "rozdat" max 40 bodů, pokud by to šlo tak, že přesně 40, tak by to bylo nejlepší
U toho druhého výpisu článků z db

ad 2) nemáš tam žádný cyklus, takže to vypíše pouze jeden výsledek
Cyklus tam je a to for

for ($citac=0; $citac<=$pocet; $citac++) {

a při každé obrátce by měl změnit datum
$datum = $p_idc['Datum'];

a na základě toho data vybrat právě jeden záznam serazený sestupně podle data zapsaní
$idc = mysql_query("SELECT IDClanku,Nadpis,Popis,Datum FROM clanky WHERE '".$datum."'>=Datum ORDER BY Datum DESC LIMIT 1");
$p_idc = mysql_fetch_array($idc);
bukaj
Profil
Nitrogen
ad 1)
chci dosáhnou generování hodnot do pole o 5i prvcích a chci "rozdat" max 40 bodů, pokud by to šlo tak, že přesně 40, tak by to bylo nejlepší
function generujPole($prvku, $max_sum)
{
$pole = array();
for(;$prvku > 0; $prvku--)
$pole[] = 0;
foreach($pole as $klic => $hodnota)
$max_sum -= $pole[$klic] = mt_rand(0, $max_sum);
return $pole;
}
Doufám, že je to, co jsi myslel. Stači zavolat generujPole(5, 40); pro pole obsahující pět prvků a jehož maximální součet je 40.

EDIT: Ale pokud vykonávající stroj bude ve špatném rozmaru, klidně můžeš dostat pole, jehož součet bude 0 ;)

ad 2) A což takhle prostě položit databázi jeden dotaz:
$dotaz = mysql_query("SELECT IDClanku, Nadpis, Popis, Datum FROM clanky WHERE '".$datum."' >= Datum ORDER BY Datum DESC LIMIT 3");
A použít cyklus while:
while($p_idc = mysql_fetch_assoc($dotaz))
{
...
}

Má to dvě pozitiva. Zaprvé je to kratší, což zlepšuje čitelnost. Zadruhé je tam míň dotazů na databázi, tudíž skript bude běžet rychleji.
Hm?
Nitrogen
Profil *
Bukaj:
děkuju, právě jsi mi pomohl vyřešit trápení na duši... :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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