Autor Zpráva
ondra.prenek
Profil
Ahoj,
Mám dotaz a neukamenujte mě hned prosím :D. Dělám stránky školy a část stránky obsahuje burzu učebnic. Chtěl bych se tedy zeptat, pomocí čeho přidám takovou funkci pro návštěvníka stránky, díky které budou moci vkládat inzeráty a aby se potom ty inzeráty automaticky zobrazovali.
Díky moc za odpověď
lionel messi
Profil
ondra.prenek:
Potrebuješ nejaký serverový skript, najčastejšie PHP, veľmi sa hodí aj databáza (zväčša MySQL, ak nechceš robiť s databázou, potrebuješ ukladať informáciu do súborov, ale db je praktickejšia). Aké sú tvoje skúsenosti s programovaním, ideálne konkrétne s PHP/MySQL?
ondra.prenek
Profil
s PHP nějaké zkušenosti mám, ale s MySQL téměř žádné... ale samozřejmě se tomu nebráním, všechno je někdy poprvé.. :)
lionel messi
Profil
ondra.prenek:
ale s MySQL téměř žádné...
OK, skúsim ti nejako zjednodušene vysvetliť náčrt aplikácie:

1. Užívateľ vyplní formulár na zadanie inzerátu, ten uložíš do databázy
2. Na stránke, kde budeš inzeráty vypisovať sa pripojíš k databáze a vytiahneš dáta buď všetky alebo len podľa istých tebou zadaných kritérií.

ale samozřejmě se tomu nebráním, všechno je někdy poprvé.. :)
Nie je to nič hrozné — na serveri (povedzme na localhoste, čiže na produkčnom prostredí u seba) si vytvoríš databázu (ideálne v nejakom editore, trebárs PHPMyAdmin), nazveme ju pracovne inzeraty. V databáze potom vytvoríš tabuľku (samozrejme, môžeš aj viac, často je to dokonca vhodné i nutné, pre jednoduchosť bude nateraz stačiť jedna, nazveme ju inzeraty :-)) Nadefinuješ v nej trebárs nasledovné stĺpce:
id dátový typ INT AUTO_INCREMENT (v PHPMyAdmine je na to zaškrtávacie políčko, často pod tajuplnou skratkou A_I alebo AI)
AUTO_INCREMENT zabezpečí, že stĺpec id sa použije ako tzv. primárny kľúč — podľa neho sa budú záznamy odlišovať. Navyše keď budeš do db vkladať nový inzerát, stačí stĺpcu id prideliť „hodnotu“ NULL a dostane číslo o 1 väčšie najvyššie použité id.

Ďalší stĺpec by mohol zastupovať užívateľa:
uzivatel dátový typ VARCHAR(64)

a nateraz posledné stĺpce trebárs titulok inzerátu a jeho text:
titulok dátový typ VARCHAR(64)
text dátový typ TEXT

samozrejme, môžeš dorobiť stĺpec pre kategórie, trebárs cenu alebo čokoľvek podľa vlastných požiadaviek (teraz neriešim, že nie je dobré mať maglajs napr. 30 stĺpcov v jednej tabuľke, ale rozdeliť to do viacerých podľa logiky), možnosti sú takmer neobmedzené (a to je hlavná výhoda MySQL oproti ukladaniu trebárs do textových súborov), navyše s pomerne jednoduchým spracovaním.

Neviem, aké máš skúsenosti s príkazmi SQL, netreba sa toho báť, veľmi jednoducho povedané, je to taká databázová angličtina, kt. nie je náročná na pochopenie. Prázdna tabuľka iba s predefinovanou štruktúrou stĺpcov nám je nanič, chceme si predsa vložiť nejaký inzerát. Môžeme ho vložiť v SQL i v PHP, nateraz ho vložím rovno v PHP. Postupoval by som pritom nejako takto:

1. Vytvoríme si súbor connect.php a doňho vložíme iba tento kód, kt. nám zabezpečí pripojenie k db (uvádzam údaje bežné pre localhost, na ostrom serveri sa samozrejme líšia, je potrebné zistiť na hostingu):
<?php
$server = "localhost";
$login = "root";
$password = ""; //áno, na localhoste je to bežne prázdny reťazec :-)
$db = "inzeraty";
$link = mysqli_connect($server, $login, $password, $db); //toto je tá „zázračná funkcia“, kt. sa postará o pripojenie k databáze
?>

2. Presunieme sa na druhú stránku, nazveme ju vkladanie.php (vynechávam doctype, hlavičku, titulok a podobné „samozrejmosti“, kt. nie je problém dorobiť, rovnako nie je problém sprístupniť vkladanie inzerátov iba pre registrovaných, ale keďže mojím cieľom je ukázať princíp, zanedbávam aj túto možnosť):
<form method="post">
  Meno: <input type="text" name="meno">
  Titulok inzerátu: <input type="text" name="titulok">
  <textarea name="text">Text inzerátu.</textarea>
  <input type="submit" value="Vložiť inzerát">
</form>
<?php
if (!isset($_POST["meno"], $_POST["titulok"], $_POST["text"]))
{
  echo "Vyplňte prosím všetky polia!";
}

else
{
  include "connect.php"; //includneme pripojenie k databáze
  
  //pripravíme si obsah dát od užívateľa na vloženie do databáze, tzv. escapovanie (zabráni SQL Injection, bezpečnostnému útoku, odporúčam trochu pogoogliť a niečo si o tom prečítať, keď už budeš mať prehľad o syntaxi SQL)
  $meno = mysqli_real_escape_string($link, $_POST["meno"]);
  $titulok = mysqli_real_escape_string($link, $_POST["titulok"]);
  $text = mysqli_real_escape_string($link, $_POST["text"]);
  
  //ideme zostavovať dotaz, kt. nám vloží inzerát do db
  $query = "INSERT INTO `inzeraty` (`id`, `meno`, `titulok`, `text`) VALUES (NULL, '$meno', '$titulok', '$text')"; //poskladáme dotaz
  mysqli_query($link, $query); //vykonáme dotaz
}
?>

Tento kód vloží užívateľský vstup do našej tabuľky v databáze (zároveň vidíš syntax vkladania).

Presunieme sa teraz na stránku vypis.php:
<?php
include "connect.php" //opäť sa musíme pripojiť

$query = "SELECT * FROM `inzeraty`"; //povedzme, že chceme vybrať všetky inzeráty z našej tabuľky
$result = mysqli_query($link, $query) //vykonáme dotaz

while($row = mysqli_fetch_array($result)) //natiahneme výsledky nášho dotazu do poľa, kt. spracujeme
{
  echo $row["meno"]. ":". $row["titulok"]. " — ". $row["text"]; //veľmi primitívny výpis, kt. nám vypíše meno inzerenta, titulok a text jeho inzerátu oddelené dvojbodkou, resp. pomlčkou, dôležité je, že pri použití funkcie mysqli_fetch_array vždy nájdeš výsledky v poli s indexmi vždy podľa názvu stĺpcov (názov stĺpcu = názov indexu poľa)
}
?>
Toto sa postará o výpis, opäť máš veľmi široké možnosti vo filtrovaní, spôsobe výpisu (napr. do tabuľky a pod.), toto je len schematický príklad, ako by mohla taká najjednoduchšia aplikácia na pridávanie inzerátov rozpísať. Ak by ti nebolo čokoľvek jasné, ozvi sa, veľa vecí som opomenul pre jednoduchosť.

PS: Dúfam, že moje kódy neobsahujú žiadnu chybu, ak áno, vopred sa ospravedlňujem.

Na štúdium práce s MySQL odporúčam napríklad český seriál na ITNetwork.cz.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: