Prakticky s MySQL - 10. díl

Abychom mohli odpovídat v naší diskusi na příspěvky, upravíme si dnes i její základní strukturu.

Odpovídání na příspěvky

Již z úvodního popisu systémů diskusí vyplynulo, že jednou z klíčových vlastností diskusí je možnost odpovídání na příspěvky. To může být opět provedeno několika způsoby, jedním z těch jednodušších je využívání titulkování RE: a kopírování zprávy, na níž odpovídáme, do té aktuální. Tento způsob není na realizaci příliš náročný a proto si jej dnes také předvedeme.

Další možností pak při odpovídání na příspěvky je indexování odsazení příspěvku – představme si, že příspěvky vypisujeme coby tabulky do polí základní tabulky systému. Základní tabulka systému má 20 sloupců o šířce x pixelů. My tedy měníme počtem sjednocených buněk, do kterých zasahuje příspěvek jeho pomyslné odsazení od okraje a tak i graficky můžeme až do určité úrovně vidět systém odpovědí na příspěvky. V lepší verzi tohoto případu dokonce příspěvky řadíme pod ty, na něž odpovídají a tvoříme tak strom odpovědí.

A právě zmíněný strom odpovědí je pak ve své „ořezané“ podobě základem dalšího z typů odpovědí schopných diskusních fór, kdy se uživateli nabídne nejprve seznam všech takto setříděných příspěvků a možnost vypsat jen některé, odpovědi na daný příspěvek či vše. My se tedy na takovéto odpovídání podíváme pěkně popořadě.

RE: Odpovídání na příspěvky

Při prvním jednoduchém odpovídání na příspěvky není ani třeba upravovat SQL tabulku, stačí pomocí javascriptu ošetřit odpovídání na příspěvky. My si tedy představíme ukázkovou možnost využití odpovědi pomocí jména a kopie stávajícího příspěvku pouhým přesunem textu s možností editace, ale šlo by to řešit i načtením textu, na který odpovídáme, v nezměněné podobě z databáze – to už bychom se ale sloupci navíc v tabulce SQL nevyhnuli – pokud bychom nevkládali do příspěvku nějaký speciální kód, ze kterého bychom poté ID potřebného příspěvku získali.

Základním kamenem odpovídání je tato funkce:

<script>
function ok(Name,In)
{
var id;
var obsah;   
id = "RE: "+ Name;
obsah = "<cite>" + In +"</cite><br><br>";
form.Jmeno.value=id;
form.Obsah.focus();
form.Obsah.value=obsah;
}
</script>

Jejími parametry jsou jméno a obsah minulého příspěvku. Nejprve v ní vytvoříme nový název příspěvku a poté i nástin nové hlavičky odpovědi na příspěvek, všechny tyto údaje má uživatel ještě možnost editovat.

Dalším krokem je přiřadit na tuto funkci odpovídající navázání v kódu spolu s možností odpovědi u každého příspěvku dle tohoto modelu:

<a href="javascript:ok(`<?echo $Jmeno;?>`,`<?echo $Obsah;?>`)" name=“<?echo $Jmeno;?>“>Odpovědět</a>

Celý proces odpovídání pak vyústí podobně jako níže předvedený systém naší diskuse (prozatím bez jména příspěvku):

Klepněte pro větší obrázek

Aby se naše příspěvky správně zobrazovaly, povolíme některé HTML tagy při přispívání:

//if(Ereg("<br>",$Obsah)):
$Obsah=EReg_Replace("<br>","..maskovanebr..",$Obsah);
//endif;

//if(Ereg("<cite>",$Obsah)):
$Obsah=EReg_Replace("<cite>","..maskovanecite..",$Obsah);
//endif;

//if(Ereg("</cite>",$Obsah)):
$Obsah=EReg_Replace("</cite>","..maskovanecite2..",$Obsah);
//endif;

$Obsah=HTMLSpecialChars($Obsah);

//if(Ereg("..maskovanebr..",$Obsah)):
$Obsah=EReg_Replace("..maskovanebr..","<br>",$Obsah);
//endif;

//if(Ereg("..maskovanecite..",$Obsah)):
$Obsah=EReg_Replace("..maskovanecite..","<cite>",$Obsah);
//endif;

//if(Ereg("..maskovanecite2..",$Obsah)):
$Obsah=EReg_Replace("..maskovanecite2..","</cite>",$Obsah);
//endif;

Klepněte pro větší obrázek

A zdrojový kód odkazu je generovaný potom třeba takovýto:

<a href="javascript:ok(`<cite>ff</cite>.<br><br>ll`)">Odpovědět</a>

Jméno příspěvku

Dalším upgradem naší diskuse bude přidání položky jména příspěvku. Nebude to nic těžkého, stačí přidat jeden sloupec do tabulky diskusních příspěvků:

Klepněte pro větší obrázek

PHPMyAdmin je užitečný pomocník:)

Dalším krokem je úprava položek při vkládání příspěvků jak ve formuláři, tak v následujícím skriptu. Formulář tedy bude vypadat třeba takto (použitím metody POST při odeslání dat se data nebudou odesílat přes příkazový řádek, ale v těle dokumentu a při nechtěném návratu na takto volaný skript bude uživatel upozorněn na nutnost znovu odeslat data):

<form action="pridejprispevek.php" name=form id=form onsubmit="return validate(this)" method=“POST“>
<table align=center>
<tr align=center>
<td>Jméno příspěvku</td>
<td>Autor</td>
<td>Email</td>
</tr>
<tr>
<td><input name=Jmeno></td>
<td><input name=Autor value=Anonym></td>
<td><input name=Email></td>
</tr>
<tr>
<td colspan=3><textarea name=Obsah cols=56 rows=10></textarea></td>
</tr>
<tr align=center>
<td align=center colspan=3><input type="submit" value="Šup tam s tím" class=input></td>
</tr>
</table>
</form>

Poslední úpravy bude tvořit skript pro zápis dat do tabulky:

$query=MySQL_Query("Insert into Diskuse values(null,`$Jmeno`,`$Obsah`,`$Autor`,`$Email`,`$Datum`)");

a výpis příspěvků (tentokrát si uvedeme celý dokument bez nutnosti logování):

diskuse.php

<?
include("in.php");

if($chyba!=0):

if($chyba==1):
$text="Bohužel se nepovedlo přispět do diskuse chybou serveru.";
else:
$text="Neoprávněný příspěvěk.";
endif;

echo"<script>alert(`$text`);</script>";

include("login.htm");
else:

?>
<LINK href="main.css" rel=StyleSheet type=text/css>
<center>
<h3>Diskuse</h3>
<?
include("pridatprispevek.php");

$x=10;
$queries=MySQL_Query("Select ID from Diskuse");
$test=MySQL_Num_Rows($queries);

if($test>0):


$stranek=Ceil($test/$x);

if($ak==0):
$ak=1;
endif;

$xy=(($ak*$x)-$x);
$query=MySQL_Query("Select * from Diskuse order by ID DESC limit $xy,$x");?>
<script>
function ok(In)
{
var obsah;   
obsah = "<cite>" + In +"</cite><br><br>";
form.Obsah.focus();
form.Obsah.value=obsah;
}
</script>

<?
while($fetch=MySQL_Fetch_Array($query)):

$ID=$fetch["ID"];
$Obsah=$fetch["Obsah"];
$Autor=$fetch["Autor"];
$Email=$fetch["Email"];
$Datum=$fetch["Datum"];
$Jmeno=$fetch["Jmeno"];

echo "<table width=550 border=1 style=`border-width:1;border-color:maroon;font-size:12`><tr><td align=center colspan=2 style=`border-width:0;border-color:maroon;background-color:maroon;color:white`>$Jmeno</td></tr><tr><td align=left valign=center style=`border-width:0;border-color:maroon;`>";

if($Email!=""):
echo"<a href=`mailto:".$Email."`>".$Autor."</a>";
else:
echo "<b>".$Autor."</b>";
endif;

echo "</td><td align=right><small>".$Datum."</small>";?>  <a href="javascript:ok(`<?echo $Obsah;?>`)">Odpovědět</a></td></tr><?
echo"<tr><td colspan=2 align=center valign=center style=`border-width:0;border-color:maroon;`>".$Obsah."</td></tr></table><br>";

endwhile;
?>
Stránka:
<?
if(($ak!=1)and($stranek>1)):
$aka=$ak-1;
echo"<a href=`diskuse.php?ak=$aka&Login=$Login&Heslo=$Heslo`><<</a>";
endif;

$s=1;
while($s<=($stranek)):

$ted=($s*$x);
$pak=$ted-$x;

if($s!=$ak):
echo " <a href=`diskuse.php?ak=$s&Login=$Login&Heslo=$Heslo`>".$s."</a>";
else:
echo " ".$s;
endif;

$s+=1;
endwhile;

$akaa=$ak+1;
if($akaa<=$stranek):
echo" <a href=`diskuse.php?ak=$akaa&Login=$Login&Heslo=$Heslo`>>></a>";
endif;

else:
echo"Zatím v naší diskusi nejsou žádné příspěvky.";
endif;

endif;

?>

Klepněte pro větší obrázek

Všechny možné varianty příspěvků v diskusi.

Dodělávky

V následujícím pokračování našeho seriálu si již doděláme slíbené vypisování příspěvků pomocí jejich hierarchie.

Váš názor Další článek: RivaTuner v2.0 Release Candidate 11.1

Témata článku: Software, Programování, Code, Nechtěná data, Příspěvek, City, MySQL, Volaná zpráva, FF, Obsah, Elsa, Díl, Login, Echo, Základní tabulka


Určitě si přečtěte

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

** Z Brna pochází třetina světové produkce elektronových mikroskopů ** První československý kus vyrobila Tesla už v 50. letech ** Dnes na ni navazuje třeba brněnský Tescan

Jakub Čížek | 19

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

** Strojové učení ještě nepřitáhlo takový zájem jako na začátku prázdnin ** Ne, umělá inteligence nenašla lék na rakovinu ** Naučila se svlékat ženy nejen z plavek

Jakub Čížek | 35

Pojďme programovat elektroniku: Rádiový čip, který má skoro každá bezdrátová myš

Pojďme programovat elektroniku: Rádiový čip, který má skoro každá bezdrátová myš

** Bezdrátové myši řídí čip od Nordic Semiconductors ** Jeho rádiové vysílače si před lety oblíbila i komunita kutilů ** Dnes si je vyzkoušíme v praxi

Jakub Čížek | 9

Hledá se způsob, jak uložit elektřinu. Možná pomohou obří gravitační baterie

Hledá se způsob, jak uložit elektřinu. Možná pomohou obří gravitační baterie

** Jak uložit elektřinu z fotovoltaiky a větrných turbín ** Pomohou třeba staré autobaterie, nebo setrvačníky ** A pak tu jsou bizarní gravitační akumulátory velikosti mrakodrapu

Jakub Čížek | 252



Aktuální číslo časopisu Computer

Test 9 bezdrátových reproduktorů

Jak ovládnout Instagram

Test levných 27" herních monitorů

Jak se zbavit nepotřebných věcí na internetu