Autor Zpráva
Jan Vonka
Profil
Zdravým,

potřeboval bych poradit jak vytvořit funkci která by zobrazovala kód pouze u přihlášených lidí, ale je v tom háček,
měl bych například:
                {logout}
                <form id="accessControl" method="post" action="{$links_admin}/login.php">
                    <table>
                        <tr>
                            <td>User:</td>
                            <td><input type="text" name="login_nick" /></td>
                        </tr>
                        <tr>
                            <td>Heslo:</td>
                            <td><input type="password" name="login_password" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Přihlásit" /></td>
                        </tr>
                    </table>
                </form>
                {/logout}

                {login}
                <form id="accessControl" method="post" action="{$links_admin}/logout.php">
                    <table>
                        <tr>
                            <td>User:</td>
                            <td>{$user}</td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="Odhlásit" /></td>
                        </tr>
                    </table>
                </form>
                {/login}

a aby pokud by byl člověk přihlášený zobrazil by se kód pouze mezi {login} a {/login} a pokud odhlášený tak mezi {logout} a {/logout}

funkci která by to řešil jsem už si udělal ale funguje pouze pokud to je v jednom řádku, né v pokud je to na více řádcích a to takovouhle:
<?php
        if(@$_SESSION['admin']=="Admin")
        {
            $file_out = preg_replace("#<!--\[admin\](.*)-->#", "\\1", $file_out);
        }
        else
        {
            $file_out = preg_replace("#<!--\[admin\](.*)-->#", "", $file_out);
        }

        /* kód mezi <!--[!admin] a --> zobrazit jen bez přihlášení */
        if(@$_SESSION['admin']=="Admin")
        {
            $file_out = preg_replace("#<!--\[!admin\](.*)-->#", "", $file_out);
        }
        else
        {
            $file_out = preg_replace("#<!--\[!admin\](.*)-->#", "\\1", $file_out);
        }
?>
která zobrazuje kód mezi <!--[admin] a --> popřípadě <!--[!admin] a -->

doufám že to nepíšu moc složitě a že mi rozumíte :D napadlo mě řešení pomocí komentářů ale to se mi moc nelíbí...

děkuji za každou radu ;)
ShiraNai7
Profil
Jan Vonka:
Do reg. výrazů si přidej modifikátor "m" (za ukončovací #).
Jan Vonka
Profil
Jsem to teďka zkoušel ale stále nefunguje... pochopil jsem to správně?
        if(@$_SESSION['admin']=="Admin")
        {
            $file_out = preg_replace("#<!--\[admin\](.*)-->#m", "\\1", $file_out);
        }
        else
        {
            $file_out = preg_replace("#<!--\[admin\](.*)-->#m", "", $file_out);
        }
pořád to takhle funguje na 1 řádku...
alan113
Profil *
skus podmínku s isset..nebo možná bude lepší empty
Jan Vonka
Profil
? to jsem nějak nepochopil... ta podmínka je ok ale ta funkce $file_out = preg_replace("#<!--\[admin\](.*)-->#m", "\\1", $file_out); je nějaká vadná...
peta
Profil
Jaky je string?
Co v nem potrebujes jak nahradit?

Proc se ptam?
Protoze string nabizis {logout}...
Ale reg. vyraz mas "#<!--\[admin\](.*)-->#m"
To v tom stringu neni. Takze je problem neresitelny. Nebo si mame ten kod vycarovat pomoci kristalove koule?

<?php
// http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

$str = "
<!-- admin -->
Toto je admin
<!-- /admin -->
<!-- user -->
Toto je user
<!-- /user -->
";
$reg0 = "/###/";
$reg1 = "/<!-- (###) -->(.*)<!-- \/\\1 -->/s";

$a = "admin";
$str1 = preg_replace(preg_replace($reg0,$a,$reg1),"\2",$str);
echo $str1;

echo ' - - - ';

$a = "user";
$str2 = preg_replace(preg_replace($reg0,$a,$reg1),"\2",$str);
echo $str2;
//$str2 = preg_replace($reg,"\2",$str);
?>

Jinak muj postup byl:
google = preg_replace multiline html comment

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: