| Autor | Zpráva | ||
|---|---|---|---|
| BunnyBugs6 Profil * |
#1 · Zasláno: 9. 1. 2014, 15:43:44 · Upravil/a: BunnyBugs6
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 |
#2 · Zasláno: 9. 1. 2014, 15:49:50
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 * |
#3 · Zasláno: 9. 1. 2014, 15:53:27
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 |
#4 · Zasláno: 9. 1. 2014, 16:12:11
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 * |
#5 · Zasláno: 9. 1. 2014, 16:28:32
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 |
#6 · Zasláno: 9. 1. 2014, 16:40:31
„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 |
#7 · Zasláno: 9. 1. 2014, 17:11:12
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 * |
#8 · Zasláno: 9. 1. 2014, 19:09:07 · Upravil/a: BunnyBugs6
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 |
#9 · Zasláno: 9. 1. 2014, 20:57:35
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 * |
#10 · Zasláno: 10. 1. 2014, 00:36:08
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 |
#11 · Zasláno: 10. 1. 2014, 08:28:57
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 |
#12 · Zasláno: 10. 1. 2014, 08:53:04
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 |
#13 · Zasláno: 10. 1. 2014, 09:01:00
Joker:
Ale to tvrdí v tabulce s nadpisem "Comparison with Various Types". |
||
| Joker Profil |
#14 · Zasláno: 10. 1. 2014, 09:57:52
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“ |
||
|
Časová prodleva: 13 let
|
|||
0