Redakční Systém IV. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



PHP

Redakční Systém IV.

redakcni system

3. května 2001, 00.00 | Po delší odmlce pokračujeme ve tvorbě vlastního redakčního systému v PHP. Dnes dokončíme administraci uživatelů a načneme správu rubrik.

Takže po trošku delší odmlce se opět setkáváme u seriálu Redakční Systém v PHP. V dnešním díle bych chtěl dokončit popis administračních skriptů starajících se o přidávání, editování a mazání uživatelů. Pokud nám zbyde trocha prostoru, budu pokračovat v popisu skriptů starajících se o vytváření, editaci a mazání rubrik. Nejdříve vás ale poprosím o drobnou změnu skriptu generuj.php, která napomůže většímu user-friendly rozhraní. Samotná úprava spočívá v přidání jednoho řádku do smyčky, ve které se vytváří proměnná $data. Funkčnost změny si vysvětlíme, až bude vhodná doba a budeme ji využívat.

generuj.php - oprava (/admin/generuj.php)
   // pro každý řádek přidej do proměnné $data
   while ($row = mysql_fetch_row($sql))
   {
      $data .= "<option value=\"".$row[0]."\"";
      // !!! přidaný řádek !!!
      $data .= '<? if ($autor == $row[0]) echo " SELECTED"; ?>';

      $data .= ">".$row[1]."</option>\n";
   }

O přidání nového uživatele se nám postará skript add_user.php, který se bude načítat do samostatného popup okna. Při prvním zavolání se zobrazí prázdný formulář, do kterého budete moct vyplnit údaje o uživateli. Login, heslo, email a jméno jsou povinné položky. Pokud nebudou vyplněny, skript opětovně zobrazí formulář, kde budete muset doplnit všechny povinné údaje. Budou-li všechny položky vyplněny, skript nejdříve ověří zda se v databázi neopakuje zadaný login, pokud ano, zobrazí se chybové hlášení a formulář. Pokud je vše v pořádku, skript uloží informace o uživateli do databáze, vygeneruje nový seznam uživatelů, zavře popup okno a reloaduje stránku se seznamem uživatelů, kde by se již měl zobrazit nový záznam.

add_user.php (/admin/add_user.php)
<?
// pokud neproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
   echo "Neautorizovaný přístup";
   exit;
}

// include funkcí
include "../function.php";
include "../conn.php";

// autorizace
auth();

$error = ''; // proměnná obsahuje případné chybové hlášení

// existuje-li proměnná $email, $heslo, $login a $jmeno,
// budeme přidávat nového uživatele
if ($email != "" && $heslo != "" && $login != "" && $jmeno != "")
{
   // pokud neexistuje proměnná $deny, nastavíme ji
   if (!isset($deny)) $deny = "n";

   // otestujeme možnost existence loginu, pokud již v databázi je,
   // vypíšeme chybové hlášení a vrátíme uživateli formulář k opravě.
   // jinak uživatele do databáze vložíme
   @$sql = mysql_query("SELECT * FROM autori WHERE login LIKE '$login'");
   if (mysql_num_rows($sql) > 0)
   {
      $login = '';
      $error = "<DIV ALIGN=CENTER>Login již existuje !!!</DIV>\n";
   }
   else
   {
      // přidáme uživatele
      @$sql = mysql_query("INSERT INTO autori VALUES (null, '$login',
                                       '".md5($heslo)."', '$jmeno',
                                       '$email', '$oautorovi', $poz,
                                       '$deny')");

      // jelikož jsme do databáze vložili nového uživatele, bude třeba
      // vygenerovat nový soubor se seznamem uživatelů.
      $generuj = "autori";
      include "./generuj.php";

      mysql_close($conn);
      // zavoláme funkci, která nám zavře popup okno a reloadne
      // stránku s uživatli
      zavri();
      exit;
   }
}

else
{
   $error = "<DIV ALIGN=CENTER>Chybí povinné údaje !!!</DIV>\n";
}

// databázi již nebudeme potřebovat
mysql_close($conn);

// zobrazíme HTML stránku s formulářem, který doplníme o případné
// chybové hlášení a obsah proměnných.
head();
?>

<H4 ALIGN="CENTER"><B>Přidání uživatele</B></H4>

<? echo $error; ?>

<FORM METHOD="POST" ACTION="add_user.php">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
  <TR>
    <TD>Login: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="login" MAXLENGTH="20" SIZE="40"
    VALUE="<? echo $login; ?>"></TD>
  </TR>
  <TR>
    <TD>Heslo: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="heslo" MAXLENGTH="25" SIZE="40"
    VALUE=""></TD>
  </TR>
  <TR>
    <TD>Email: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="email" MAXLENGTH="100" SIZE="40"
    VALUE="<? echo $email; ?>"></TD>
  </TR>
  <TR>
    <TD>Jméno: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="jmeno" MAXLENGTH="100" SIZE="40"
    VALUE="<? echo $jmeno; ?>"></TD>
  </TR>
  <TR>
    <TD VALIGN="TOP">O autorovi:  </TD>
    <TD><TEXTAREA COLS="34" ROWS="4" NAME="oa">
    <? echo $oa; ?></TEXTAREA></TD>
  </TR>

  <TR>
    <TD>Pozice:  </TD>
    <TD><SELECT name="poz">
    <?
    // vloží všechny možné pozice a pokud je proměnná poz shodná
    // s některým z indexů, pak tuto položku zvolí
    for ($i = 1; $i <= 3; $i++)
    {
        echo "<OPTION VALUE=\"$i\"";
        if ($i == $poz)
           echo " SELECTED";
        echo ">$pozice[$i]</OPTION>";
    }
    ?>
    </SELECT></TD>
  </TR>
  <TR>
    <TD>Aktivní:  </TD>
    <TD><INPUT TYPE="CHECKBOX" NAME="deny" VALUE="a"
    <? if ($deny == "a") echo " CHECKED"; ?>></TD>
  </TR>
  <TR>
    <TD COLSPAN="2" ALIGN="CENTER">
      <INPUT TYPE="SUBMIT" VALUE="Přidat">
      <? butonek(); ?>
    </TD>
  </TR>
</TABLE>
</FORM>

<?
foot();
?>

Další skript, který si probereme, bude edit_user.php, který bude obsluhovat formulář pro změnu údajů o autorech. Jedná se vlastně o úpravu předešlého skriptu. Heslo už ale nebude povinná položka, pokud jej nevyplníte, nebude se měnit.

edit_user.php (/admin/edit_user.php)
<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
   echo "Neautorizovaný přístup";
   exit;
}

include "../function.php";

// pokud neexsituje proměnná $id zavřeme popup
if (!isset($id))
{
   zavri();
   exit;
}

include "../conn.php";

// autorizace
auth();

// pokud byl odeslán formulář, a bylo zadáno jméno a email, budeme
// autora editovat
if ($email != "" && $jmeno != "")
{
   if (!isset($deny))
      $deny = "n";

      // SQL pokud se nemění heslo, nebudeme jej v databázi měnit
      if ($heslo == "")
      {
         @$sql = mysql_query("UPDATE autori SET jmeno = '$jmeno',
                                     email = '$email', oautorovi = '$oa',
                                     prava = $poz, stav = '$deny'
                              WHERE id = $id");
      }
      // SQL pokud se heslo mění, provedeme změnu hesla v databázi
      else
      {
         @$sql = mysql_query("UPDATE autori SET pass = '".md5($heslo)."',
                                     jmeno = '$jmeno', email = '$email',
                                     oautorovi = '$oa', prava = $poz,
                                     stav = '$deny' WHERE id = $id");
      }

      // mohlo se změnit jméno autora, takže vygenerujeme nový
      // soubor s autory
      $generuj = "autori";
      include "./generuj.php";

      mysql_close($conn);
      zavri();
      exit;
}

// select informaci o uzivateli
@$sql = mysql_query("SELECT * FROM autori WHERE id = $id");

// pokud neni user v databazi, zavru okno
if (mysql_num_rows($sql) == 0):
    mysql_close();
    zavri();
    exit;
endif;

@$row = mysql_fetch_row($sql);
mysql_free_result($sql);
mysql_close($conn);

head();
?>

<H4 ALIGN="CENTER"><B>Editace uživatele</B></H4>

<FORM METHOD="POST" ACTION="edit_user.php">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="<? echo $id; ?>">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
  <TR>
    <TD>Login:  </TD>
    <TD><? echo $row[1]; ?></TD>
  </TR>
  <TR>
    <TD>Heslo:  </TD>
    <TD><INPUT TYPE="TEXT" NAME="heslo" MAXLENGTH="25" SIZE="40"
     VALUE=""></TD>
  </TR>
  <TR>
    <TD>Email: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="email" MAXLENGTH="100" SIZE="40"
     VALUE="<? echo $row[4]; ?>"></TD>
  </TR>
  <TR>
    <TD>Jméno: * </TD>
    <TD><INPUT TYPE="TEXT" NAME="jmeno" MAXLENGTH="100" SIZE="40"
     VALUE="<? echo $row[3]; ?>"></TD>
  </TR>
  <TR>
    <TD VALIGN="TOP">O autorovi:  </TD>
    <TD><TEXTAREA COLS="34" ROWS="4" NAME="oa">
    <? echo $row[5]; ?></TEXTAREA></TD>
  </TR>

  <TR>
    <TD>Pozice:  </TD>
    <TD><SELECT name="poz">
    <?
     for ($i = 1; $i <= 3; $i++)
     {
        echo "<OPTION VALUE=\"$i\"";
        if ($i == $row[6])
           echo " SELECTED";
        echo ">$pozice[$i]</OPTION>";
     }
    ?>
    </SELECT></TD>
  </TR>
  <TR>
    <TD>Aktivní:  </TD>
    <TD><INPUT TYPE="CHECKBOX" NAME="deny" VALUE="a"
    <? if ($row[7] == "a") echo " CHECKED"; ?>></TD>
  </TR>
  <TR>
    <TD COLSPAN="2"> </TD>
  </TR>
  <TR>
    <TD COLSPAN="2" ALIGN="CENTER">
      <INPUT TYPE="SUBMIT" VALUE="Editovat">
      <? butonek(); ?>
    </TD>
  </TR>
</TABLE>
</FORM>

<?
foot();
?>

Tak, a administraci uživatelů máme hotovou. Můžete si vyzkoušet vytvořit několik testovacích userů a přidělovat jim různá práva, popřípadě jim zakázat přístup úplně. Alespoň si tak vyzkoušíte činnost skriptu menu.php - zda se položky menu skutečně generují podle práv přihlášeného uživatele.

Rubriky

Jelikož již máme možnost vytvořit uživatele, kteří budou mít možnost vkládat články a krátké zprávy, bude třeba vytvořit rubriky, do kterých se budou články autorů vkládat. Pro administraci rubrik bude třeba vytvořit další PHP skripty, které se budou jmenovat: rubriky.php, add_rubrika.php a edit_rubrika.php. Jelikož seznam rubrik budeme kvůli pozdější optimalizaci výkonu generovat do souboru, přidáme do skriptu generuj.php další část kódu, která se bude o toto generování starat. Skript vygeneruje celkem dva soubory. Jeden bude používán v administrační části, kde se bude vkládat do formuláře pro vložení/editaci článku a druhý bude vkládán do skriptů, jež se budou starat o samotné zobrazování stránek návštěvníkům.

generuj.php (/admin/generuj.php)
if ($generuj == "rubriky")
{
   // vybereme všechny rubriky a seřadíme výsledek podle jejich názvu.
   @$sql = mysql_query("SELECT * FROM rubriky ORDER BY rubrika");

   // vyprázdníme pomocné proměnné
   $data1 = '';
   $data2 = '';

   // pro každý záznam v databázi vložíme do pomocných proměnných
   // jeden řádek
   while ($row = mysql_fetch_row($sql))
   {
      $data1 .= "<a href=\"index.php?rubrika=".$row[0]."\">".$row[1];
      $data1 .= "</a><br>\n";
      $data2 .= "<option value=\"".$row[0]."\"";
      $data2 .= '<? if ($rubrika == $row[0]) echo " SELECTED"; ?>';
      $data2 .= ">".$row[1]."</option>\n";
   }

   // vygenerujeme první soubor
   @$f = fopen("../inc/rubriky","w");
   fputs($f,$data1);
   fclose($f);

   // vygenerujeme druhý soubor
   @$f = fopen("../inc/rubriky_admin","w");
   fputs($f,$data2);
   fclose($f);
}

Jelikož dnešní část byla hodně praktická, další část skriptů pro administraci rubrik si probereme až v příštím díle seriálu. Máte tak alespoň možnost pořádně odzkoušet administraci uživatelů a případně ji doladit dle svého gusta. A abych nezapomněl, přidávám dva slíbené obrázky, které pomohou zpestření administrační části RS. Jsou to následující dva malé gify, které umístíte do adresáře: /admin/img/.

ok.gif(209 b)     no.gif(164 b)

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: