Autor Zpráva
BunnyBugs6
Profil *
Zdravím, jak prosím vytvořit podmínku, aby to fungovalo? Zkoušel jsem různé varianty a ani jedna mi nefungovala :(

<?php

        if(isset($_POST['edit']));
// ********** přehled přihlášených **********
        echo "<table width='950px'>
            <tr>
            <th width='25px'>Poř.</th>
            <th width='175px'>Datum přihlášení</th>
            <th width='200px'>Jméno/Nick</th>
            <th width='400px'>Poznámka</th>
            <th width='150px'>Úprava/Odhlášení</th>
            </tr>";

        while($row = mysql_fetch_array($vysledek)) {
                echo "<tr>";
                echo "<td>" . "<span></span>" . "</td>";
                echo "<td style='font: 14px arial'>" . DATE("d.m.Y, H:i:s", strtotime($row['datum_reg'])) . "</td>";
                echo "<td>" . $row['jmeno'] . "</td>";
                echo "<td>" . $row['poznamka'] . "</td>";
                echo "<td><a href='?show=cont-edit&edit=" . urlencode($row['id_uzivatel']) . "'>upravit / odhlásit</a></td>";
                    }
                echo "</tr>";
                echo "</table>";

        mysql_close();
    ?>



Tak podmínka by měla být na řádku 20 ve spojení s aktuálním datem.
Tzn. pokud je aktuální datum větší než datum z výpisu $row['datum_kon'], zobrazí se jedno "echo" (to uvedené na řádku 20)
a pokud je datum nižší, tak se zobrazí druhé "echo" pouze s textem (v uvedeném kódu není)

V podstatě se jedná o to, aby to zobrazovalo odkaz na úpravu do dne konání a pak už se odkaz pro úpravu nezobrazil.
Díky za každou radu.
Joker
Profil
BunnyBugs6:
Nevidím tam nikde podmínku v echo, co má fungovat?

Jestli podmínka na řádku 3, tak ta funguje, ale nic neudělá, protože v ní nejsou žádné příkazy.
Viz manuál, jak se to má zapsat správně.
BunnyBugs6
Profil *
Joker:
Podmínka na řádku 3 je pro předání proměných do jiné stránky.
A podmínka, co bych potřeboval, ta v tom kódu napsaná není, protože mi nic nefungovalo, proto bych s tím potřeboval pomoci.
Potřebuju jí dostat do řádku 20.
Joker
Profil
BunnyBugs6:
Podmínka na řádku 3 je pro předání proměných do jiné stránky.
Tak jak je napsaná je v první řadě zbytečná, protože nedělá vůbec nic.

A podmínka, co bych potřeboval, ta v tom kódu napsaná není
Aha, takže další telepatické zadání, bezva.

Tak teď když máme dotaz, v čem konkrétně je problém? Použití strtotime pro získání timestampu zjevně znáte (i když zrovna na řádku 17 by bylo elegantnější si čas vhodně zformátovat už při výběru z databáze), aktuální timestamp se dá získat funkcí time() a porovnávat mezi sebou jdou normálně jako čísla.
BunnyBugs6
Profil *
Tak já to zkusím konkrétněji, když napíšu ten kod takhle, tak to pokaždé vypíše to "else" i když je datum z databáze vyšší než aktuální a nevím proč :(

while($row = mysql_fetch_array($vysledek)) {
                echo "<tr>";
                echo "<td>" . "<span></span>" . "</td>";
                echo "<td style='font: 14px arial'>" . DATE("d.m.Y, H:i:s", strtotime($row['datum_reg'])) . "</td>";
                echo "<td>" . $row['jmeno'] . "</td>";
                echo "<td>" . $row['poznamka'] . "</td>";
                if($row['datum_kon'] > $aktdat) {
                    echo "<td><a href='?show=cont-edit&edit=" . urlencode($row['id_uzivatel']) . "'>upravit / odhlásit</a></td>";
                    }
                else echo "<td>Již nelze!</td>";
                }

v proměnné $aktdat mám toto: $aktdat = strFTime("%Y-%m-%d %H:%M:%S", time());
což mám v hlavičce stránky.
abc
Profil
echo "<td style='font: 14px arial'>" . DATE("d.m.Y, H:i:s", strtotime($row['datum_reg'])) . "</td>";
a
$aktdat = strFTime("%Y-%m-%d %H:%M:%S", time());

jsou 2 různé formáty datumů... nahraď $aktdat za
$aktdat = DATE("d.m.Y, H:i:s", now())
Joker
Profil
BunnyBugs6:
Řetězce nemůžete porovnávat aritmetickými operátory.

Nejjenodušší bude použít jen time(), to vrací číslo, a $row['datum_kon'] dát do strtotime, jako to je o tři řádky před tím s datum_reg.
BunnyBugs6
Profil *
abc:
první echo, tedy DATE("d.m.Y, H:i:s", strtotime($row['datum_reg'])) mi funguje v pořádku, to mám na zobrazení a obyčejné čtení v našem formátu
a
$aktdat = strFTime("%Y-%m-%d %H:%M:%S", time()) mám právě k porovnávání data, je to výpis originálního formátu z databáze


BunnyBugs6:
To se mi nějak nezdá, protože už mi taková funkce funguje.
Používám jí pro nadpis a jak proběhne datum konání, nadpis mi automaticky zčervená (nastaveno css)
Takhle ten kod vypadá a funguje bez problémů,

while($dat = mysql_fetch_array($datum)) {
        if ($aktdat <= $dat['datum_kon'])
            echo ("<h1>*** *** ***</h1>");
        else 
            echo ("<div class='past'><h1>*** *** ***</h1></div>");
        }

kde proměná $datum vypadá takto: $datum = mysql_query("SELECT * FROM `$table` WHERE `id_vyjezd` = '$vyjezd' LIMIT 1");

nevím, proč nefunguje v tom příkladu, co jsem posílal výše.
Joker
Profil
BunnyBugs6:
Používám jí pro nadpis a jak proběhne datum konání, nadpis mi automaticky zčervená (nastaveno css)
Takhle ten kod vypadá a funguje bez problémů
Může to vypadat, že funguje bez problémů, ale ve skutečnosti nefunguje.

Jelikož operandy jsou řetězce, operátor <= je konvertuje na čísla. Převádí se tak, že se vezme od začátku řetězce všechno co dává smysluplný zápis čísla a zbytek se ignoruje.
Datum má na začátku číslice, takže shodou okolností jde konvertovat na číslo takovým způsobem (vznikne desetinné číslo ze dne a měsíce, například z "09.01.2014 11:11:11" vznikne číslo 9.01, v řetězci je označeno kam až jde konvertovat a zbytek se ignoruje), že to někdy vypadá, že to funguje.
BunnyBugs6
Profil *
Joker:
Aha, jak tedy udělat tu podmínku dle pravidel?
Díky, ale teprve se to učím, tak musím vychytat mouchy hned na začátku :)
Kajman
Profil
Joker:
Myslím, že pokud jsou oba operandy řetězce, tak se neprovádí konverze, ale porovnávají se řetězce.

BunnyBugs6:
$row['datum_kon'] z mysql vypadne jako string 'YYYY-MM-DD HH:MI:SS', takže by mělo stačit
$aktdat = date("Y-m-d H:i:s");
Joker
Profil
Kajman:
Myslím, že pokud jsou oba operandy řetězce, tak se neprovádí konverze, ale porovnávají se řetězce.
Manuál (viz odkaz výše) tvrdí, že pokud oba operandy jsou „string, resource or number“, string a resource se převede na číslo a porovnají se čísla.
Kajman
Profil
Joker:
Ale to tvrdí v tabulce s nadpisem "Comparison with Various Types".
Joker
Profil
Kajman:
Ale podle mě various sice jde přeložit jako různých, ale není to ve významu „Porovnávání dvou odlišných typů“, ale „Porovnávání rozličných typů“.

Nicméně i přesto máš nejspíš pravdu, vzal jsem totiž špatný řádek tabulky.
Pro porovnání řetězců má platit nejspíš ten první, „null or string vs string“, kde je opravdu „numerical or lexical comparison“

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: