Sjednocení podmínek v cyklu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Sjednocení podmínek v cyklu – PHP – Fórum – Programujte.comSjednocení podmínek v cyklu – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Forest0
Stálý člen
14. 12. 2013   #1
-
0
-

Ahoj, dokázal by mi někdo prosím pomoct?

Asi je to opravdu primitivní, ale já jsem nějak mimo a přijde mi, že to musí jít nějak zkrátit.

while($data = mysql_fetch_assoc($dotaz))
{
$_POST["neco"] = $data["neco"];
$_POST["datum"] = $data["datum"];

if($_POST["neco"] <= 1)
{
echo "...";
}

if($_POST["neco"] > 1 && $_POST["neco"] < 1.8)
{
echo "...";
}

if($_POST["neco"] >= 1.8)
{
echo "...";
}
}

A já bych do toho potřeboval ještě dostat:

if($_POST["datum"] == "0000-00-00")
{
echo "Never";
}

if($_POST["datum"] == Date("Y-m-d"))
{
echo "Today";
}

Problém je, že když tyto dvě podmínky dám zvlášť, tak se mi v tom cyklu každý řádek vypíše dvakrát, což je logické. Takže pokud bych ty první tři podmínky rozšířil o && $_POST["datum"] == ... tak mi vznikne 9 podmínek. Nedalo by se to nějak sjednotit? Snad půjde poznat, o co mi jde. Děkuji.

Nahlásit jako SPAM
IP: 92.62.230.–
Reklama
Reklama
Kit+11
Guru
14. 12. 2013   #2
-
0
-

#1 Forest 

echo ($_POST["neco"] <= 1) ? "menší" : (($_POST["neco"] <= 1.8) ? "střední" : "velké");

Osobně bych to však strčil do SQL dotazu.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #3
-
0
-

#2 Kit
A jak do toho mám narvat ten datum?

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #4
-
0
-

#3 Forest
Myslel jsem si, že tohle už zvládneš.

Teď na to koukám: Který idiot ti poradil zapisovat do pole $_POST? To se nesmí!

Celé to je nějaké divné. Proč to nemáš v SQL?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #5
-
0
-

#4 Kit
Kdybych věděl, jak na to, tak sem nepíšu. A proč by se to jako nesmělo?

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #6
-
0
-

#5 Forest
$_POST je pole, ve kterém jsou vstupní hodnoty předané metodou POST. Modifikace je tzv. drahá (je pomalá a paměťově náročná) a navíc může mít neočekávaný vliv na jiné části skriptu. Prostě si nezvykej do toho pole zapisovat, je určeno pouze pro čtení. Jinak tě spolupracovníci ukamenují.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #7
-
0
-

#6 Kit
Dobře, tak děkuji. A mohl bys mi pomoct s těmi podmínkami? Nemám to v SQL dotazu, protože s hodnotou z DB dále pracuju (zaokrouhlování, dělení) a upravenou hodnotu nemám v DB, protože to není potřeba.

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #8
-
0
-

#7 Forest
Však to můžeš zaokrouhlit a dělit přímo v DB a skriptu dodat hotové výsledky, které potřebuje. Ty neumíš napsat SELECT? Kromě toho je hodnota "0000-00-00" nesmyslná, protože tam v těchto případech je NULL.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+11
Guru
14. 12. 2013   #9
-
0
-

#7 Forest
Rád bych ti odpověděl, ale pořád mi uniká, na co se ptáš. Připadá mi to, jako kdyby ses ptal, jak se vruty zatloukají pilkou. Na takovou otázku odpovědět neumím. A přitom řešení může být triviální na dvou či třech řádcích. Jen pochopit otázku...

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #10
-
0
-

#8 Kit
Je to typ DATE. 

A co se týká mé otázky:

$dotaz = mysql_query("SELECT datum, neco FROM tabulka WHERE username='".mysql_real_escape_string(HTMLSpecialChars(strip_tags($_SESSION["username"])))."'");

while($data = mysql_fetch_assoc($dotaz))
{
$datum = $data["datum"];
$neco = $data["neco"];
$dny = round((time() - strtotime($datum)) / (3600 * 24));
$neco2 = $neco/$dny;

if($neco2 <= 1)
{
echo "Výstup: ".$neco2." a Datum: ".$datum.""; //odlišnost barvou
}

if($neco2 > 1 && $neco2 < 1.8)
{
echo "Výstup: ".$neco2." a Datum: ".$datum.""; //odlišnost barvou
}

if($neco2 >= 1.8)
{
echo "Výstup: ".$neco2." a Datum: ".$datum.""; //odlišnost barvou
}
}
//zároveň, ale potřebuju podmínky pro datum
// Dnešní datum - Dnes, NULL - Nikdy, Jinak: $datum
Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #11
-
0
-

#10 Forest
Měl bys používat funkci DATEDIFF(), která ti vrátí rozdíl přímo ve dnech.

Stejně je mi divné, že tě nijak netrápí případné dělení nulou. Takže to asi nebude 9 výstupních stavů, ale jen 5:

  • nikdy
  • dnes
  • <= 1
  • < 1.8
  • ostatní

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #12
-
0
-

#11 Kit
Já to s tou nulou vyřešené mám, ale tak nebudu sem dávat celý svůj skript. A pořád jsi pro mě neudělal to, o co tady prosím a proč jsem založil toto vlákno. Já nevím, jak budou ty podmínky.

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #13
-
0
-

#12 Forest
 Tohle mi krásně šlape podle tvého zadání:

<?php
$dbattr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$pdo = new PDO('mysql:host=localhost;dbname=test', null, null, $dbattr);
$username = $pdo->quote($_SESSION["username"]);
$dotaz = $pdo->query("SELECT datum, neco, DATEDIFF(NOW(), datum) AS dny
    FROM tabulka WHERE username=$username");

while ($data = $dotaz->fetch()) {
    $datum = $data["datum"];
    $neco = $data["neco"];
    $dny = $data["dny"];

    if (is_null($datum)) {
        echo "Nikdy";
    } else if ($dny == 0) {
        echo "Dnes";
    } else {
        $neco2 = $neco/$dny;
        if($neco2 <= 1) {
            echo "Výstup: $neco2 a Datum: $datum"; //odlišnost barvou
        } else if($neco2 < 1.8) {
            echo "Výstup: $neco2 a Datum: $datum"; //odlišnost barvou
        } else {
            echo "Výstup: $neco2 a Datum: $datum"; //odlišnost barvou
        }
    }
    echo "\n";
}
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #14
-
0
-

#13 Kit
No tohle je super, jenže já potřebuju $neco2 vypsat i když datum bude Nikdy či Dnes.

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #15
-
0
-

#12 Forest
Koukám, že jsi z toho stále blbej. Se zbytkem by sis už ale měl poradit sám.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+11
Guru
14. 12. 2013   #16
-
0
-

#14 Forest
A jaká že bude hodnota v $neco2? Však si to tam dopiš. Když se nad tím zamyslíš, tak požaduješ volovinu.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #17
-
0
-

#16 Kit
Nepožaduju volovinu, ale už nevím, jak jinak ti to mám napsat. Nechci tu prozrazovat skutečný script, takže jsem se snažil uvést příklad ...

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #18
-
0
-

#17 Forest
Volovina to je, protože pro "Dnes" je $neco2 dělení nulou, pro "Nikdy" je $neco2 nesmyslná hodnota.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #19
-
0
-

#18 Kit
Tak v tom případě potřebuju v těchto dvou případech do $neco2 dostat nulu a zobrazit ji.

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #20
-
0
-

#19 Forest
Tak si ji tam dej, když ji tam potřebuješ.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Forest0
Stálý člen
14. 12. 2013   #21
-
-2
-
Mimo téma

#20 Kit
No já už to nějak vyřeším. 20 příspěvku v podstatě o ničem. Dík za tvůj čas.

Nahlásit jako SPAM
IP: 92.62.230.–
Kit+11
Guru
14. 12. 2013   #22
-
0
-
Nerozhodně

#21 Forest
Tak o ničem? Příště tě pošlu rovnou do /dev/null. Jsi neschopný a ještě drzý.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý