Kniha citátů - 2.díl - 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

Kniha citátů - 2.díl

18. října 2001, 00.00 | Dnes uděláme z jednoduchého skriptu propracovaný systém. Vylepšíme index, budeme mazat z DB a opravovat již vytvořené skripty.

Protože byly ohlasy na první díl, rozhodl jsem se napsat ještě jeden, kde vysvětlím další věci, které vysvětlené pro začátečníka možná na Internetu ani nenaleznete.

Vylepšíme si výpis

V našem prvním skriptu byl jednoduchý textový výpis, nijak zvlášť upravený. To je možná škoda a tak upravíme výpis do nějaké hezké tabulky, kterou ještě "orámujeme" jinou tabulkou.

<table cellSpacing=0 width=400 align=center bgColor=#000000>
  <tr>
    <td><table cellSpacing=0 width=100%>
      <tr>
      <td align=middle bgColor=#ffffe0>Písmena nemohou za to, co znamenají 
        slova z nich složená, ani za umýsly toho kdo je použil.</td>
      </tr>
      <tr>
        <td align=right bgcolor=#e7e7d6>Jan Sova</td>
      </tr>
    </table>
    </td>
  </tr>
</table>

Jak taková tabulka vypadá si můžete prohlédnout:

Písmena nemohou za to, co znamenají slova z nich složená, ani za úmysl toho, kdo je použil.
Jan Sova

Meze úpravám se nekladou, a tuto kapitolu jsem zařadil, protože se mě lidé často ptají, jak orámovat tabulku, proto jsem snad zabil dvě mouchy jednou ranou :-). Uznávám, že tato tabulka není příliš pěkná, ale vytvořit podobnou dovede podle popsaného návodu snad každý.

Takže podle toho také upravíme index.php:

<HTML>

<HEAD>
 <TITLE>Stranka s citaty</TITLE>
</HEAD>

<BODY>
<H1 align=center>Výpis citátů.</H1>

<?
do {
      @$spojeni = MySQL_Connect("localhost"); //pokus o spojení
      if (!$spojeni):                        //kontrola
            echo "Nepodařilo se připojit k MySQL.<BR>\n";
            break;
      endif;

      MySQL_Select_DB("datacitaty");  //výběr databaze



    @$vysledek = MySQL_Query("SELECT * FROM citaty ORDER BY poradi DESC");
      //SQL příkaz
      if (!$vysledek):
          echo "Došlo k chybě při zpracování dotazu v databázi.<BR>\n";
             break;
      endif;


      while ($zaznam = MySQL_Fetch_Array($vysledek)){
      echo "<table cellSpacing=0 width=400 align=center bgColor=#000000>
             <tr>
              <td>
               <table cellSpacing=0 width=400>
                 <tr>\n<td align=middle bgColor=#ffffe0>\n";
                   echo $zaznam["citat"];
       echo "   </tr>
                <tr>
             <td align=right bgcolor=#e7e7d6>";
              echo $zaznam["autor"];
       echo "</tr>
    </table>
    </td>
  </tr>
</table> 
<p></p>\n";
             }

} while (false);

?>
</BODY>
</HTML>

Upravujeme záznam v databázi

Ne každý má "přímý" přístup k databázi, aby mohl upravovat své data pomocí SQL příkazů. Mnohem pohodlnější je vytvoření další části administrace, kde budeme upravovat již vytvořené citáty. K tomu tady byl již dotaz a pravdou je, že se nám může povést do databáze vložit špatná data (překlep, pravopisná chybička, ...).

<HTML>
<HEAD>
 <TITLE>Úprava citátu</TITLE>
</HEAD>

<BODY>
<FORM ACTION=uprav.php METHOD=post>
<INPUT NAME=poradi SIZE=20>
<INPUT TYPE=SUBMIT VALUE=" OK ">
</FORM>

</BODY>
</HTML>

První uvedenou stránku si uložíme jako třeba prvni.php. Tato stránka nám bude sloužit pouze k tomu, abychom nějak dostali pořadové číslo citátu, které chceme upravit, do proměnné.

Pozn: stejného efektu docílíte, pokud budete stránku uprav.php volat uprav.php?poradi=$poradi (misto $poradi musíte ale již zadat rovnou cislo, treba uprav.php?poradi=1).

<HTML>
<HEAD>
 <TITLE>Úprava citátu</TITLE>
</HEAD>

<BODY>
<?
do{
      
      if (!IsSet($poradi)):
          echo "Nezadal jste cislo citatu !";
          break;
      endif;

      @$spojeni = Mysql_connect(localhost); //pokus o spojení

      if (!$spojeni):
          echo "Nepodařilo se připojit k MySQL.<BR>\n";
          break;
      endif;
      MySQL_Select_DB("datacitaty");  //výběr databáze

      @$vysledek=MySQL_Query("SELECT * FROM citaty
                                        WHERE poradi=$poradi");
      if (!$vysledek):
          echo "Cbyba při dotazu v databázi";
          break;
      endif;
      
      @$zaznam=MySQL_Fetch_Array($vysledek);
      if($pole):
         $autor=$zaznam["autor"];
         $citat=$zaznam["citat"];
      else: 
         echo "Chyba při prohledávání seznamu\n";
         break;
      endif;

?>
<H1>Úprava záznamů v databázi</H1>

<FORM ACTION=update.php METHOD=POST>
<TABLE>
<TR>
 <TD>Pořadí:</TD>
 <TD><INPUT NAME=poradi SIZE=4 VALUE="<?echo $poradi?>">
</TR>
<TR>
 <TD>Autor:</TD>
 <TD><INPUT NAME=autor SIZE=50 VALUE="<?echo $autor?>"></TD>
</TR>
</TABLE>
<TEXTAREA NAME=citat ROWS=8 COLS=80><?echo $citat?></TEXTAREA>
<P><INPUT TYPE=SUBMIT VALUE="Zapiš změny">
</FROM>
<?   
} while(false)
?>
</BODY>
</HTML>

No, tak teď jsme vytvořili pěkný formulář, kam se nám vypíše obsah databáze do jednotlivých částí formuláře a mi tak záznam můžeme snadno upravit. Ještě však musíme vytvořit skript update.php, který změny zapíše do DB.

<HTML>
<HEAD>
 <TITLE>Smazání citátu</TITLE>
</HEAD>
<?
do {   
      if (!IsSet($poradi)):
          echo "Nezadal jste cislo citatu !";
          break;
      endif;

       @$spojeni = mysql_connect(localhost); //pokus o spojení
      if (!$spojeni):
          echo "Nepodařilo se připojit k MySQL.<BR>\n";
          break;
      endif;
      MySQL_Select_DB("datacitaty");  //výběr databáze
      
     @$uprava=MySQL_Query("UPDATE citaty SET autor = '$autor',
                                             citat = '$citat' WHERE 
                                             poradi = $poradi");

      if (!$uprava):
          echo "Cbyba při dotazu v databázi";
          break;
      endif;
 
} while(false);
?>
</BODY>
</HTML>

Mažeme citáty z databáze

Pokud vložíte špatný citát, prostě jej upravíte. Pravdou však je, že musíte vložit jiný citát (pokud jste vložili nějaký nevhodný) a ten nový citát nebude na prvním místě (musíte si uvědomit, že při každém zápisu stoupá poradi (viz. DB) o jednu. V neposlední řadě tento skript popisuji hlavně proto, abych ukázal jak lze také pracovat s databází.

Ve skriptu je vyřešen problém, kdy pokud vymažu jeden záznam, nezmění se poradi všech ostatních, proto musíme pořadí těch, které měly poradi vyšší snížit o jedničku.

Nejdříve jsem ještě vytvořil skript druhy.php, kterým dostanete na stránku umaz.php potřebnou proměnou (úprava viz. prvni.php).

<HTML>
<HEAD>
 <TITLE>Smazání citátu</TITLE>
</HEAD>

<BODY>
<FORM ACTION=vymaz.php METHOD=post>
<INPUT NAME=poradi SIZE=20>
<INPUT TYPE=SUBMIT VALUE=" OK ">
</FORM>
</BODY>
</HTML>

No a nyní pouze vytvoříme stránku umaz.php a vše jest hotovo:

<HTML>
<HEAD>
 <TITLE>Smazání citátu</TITLE>
</HEAD>
<?
do {   
      if (!IsSet($poradi)):
          echo "Nezadal jste cislo citatu !";
          break;
      endif;

       @$spojeni = mysql_connect(localhost); //pokus o spojení
      if (!$spojeni):
          echo "Nepodařilo se připojit k MySQL.<BR>\n";
          break;
      endif;
      MySQL_Select_DB("datacitaty");  //výběr databáze
       @$zjisteni=MySQL_Query("SELECT * FROM citaty");
     @$zjisteni=MySQL_Query("SELECT * FROM citaty WHERE poradi = $poradi");
       if (!$zjisteni):
         echo"<br>Takový citát není.\n";
         break;
        endif;
       
       @$vymaz=MySQL_Query("DELETE FROM citaty WHERE poradi=$poradi");


          if (!@$vymaz){
              echo "Došlo k chybě při zpracování dotazu v databázi<BR>\n";
                  break;  }
              else{
                   @$vysledek=MySQL_Query("UPDATE citaty SET 
                                poradi = poradi-1 where poradi > $poradi");
                 echo "<br>Kód byl ubrán.\n";
                  }



          if (!@$vysledek):
              echo "Došlo k chybě při zpracování dotazu v databázi.<BR>\n";
                break;
          else: 
                  echo "<br>Vymazáno $id $rubrika\n";
          endif;

} while(false);
?>
</BODY>
</HTML>

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: