Autor Zpráva
Josef Přerovský
Profil
Zdravím, na webu mám vložený kod:
                    <?php
                    $nickname=$user['nick'];
                    $userlevel=$user['level'];
                    $date=date('c');
                    mysql_query("replace into online (nickname,time,level) values('$nickname','$date','$userlevel')");
                    ?>
                    <div class="panel panel-primary"> 
                        <div class="panel-heading"> 
                            <h3 class="panel-title"><b>Online uživatelé</b></h3> 
                        </div>                         
                        <div class="panel-body"> 
                        <?php 
                        $d=date('c',time()-5*60);
                        $q=mysql_query("select nickname,level from online where time>'$d'");
                        if(mysql_affected_rows()>0){
                            while($nick=mysql_fetch_array($q)){
                 ?>
                 <a href="/profile/<?php echo "{$nick[0]}";?>"><span class="label label-<?php if($nick['level'] == 3) {?>danger<?php } else {?>primary<?php }; ?>"><?php echo "{$nick[0]}";?></span></a>
                 <?php 
                        }
                    } else {
                        echo "Nikdo není online!";
                    }
             ?>                
                        </div>
                    </div>

Jenže u toho mám problém, že pokud u někoho mám že je online, tak se ukáže, ale pokud jsou všichni uživatelé offline, tak to neukáže hlášku "Nikdo není online" je to prázdné.
Příčina je, že v db existuje řádek, kde je jen čas a level 0. bez nicku.
Nevíte co s tím?

Děkuji za rady.
Tomášeek
Profil
Josef Přerovský:
Pokud tam je řádek, byť prázdný, tak je samozřejmě 1 záznam nelazen.

Řešením je buď ten prázdný řádek smazat, nebo ho podmínkou ignorovat, něco ve smyslu where nick is null and time > '...' (případně nick = '', pokud neukládáš NULL hodnoty). Respektive, jestli je tohle celý kód, tak ten prázdný řádek bez nicku vůbec nevytvářet (obalit celý INSERT kód podmínkou, jestli byl formulář odeslán... teď to musí házet warningy o neexistujících klíčích pole, kdybys měl zapnuté vypisování chyb).

PS. to používání mysql_* je nehorázné peklo, to s touhle prehistorickou verzí PHP pracuješ v IT muzeu?
Dále pak vůbec neřešíš bezpečnost (SQL injection), atd. Nasekat na pár řádcích kódu tolik zla, to je fakt umění :-)

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:

0