ugrás a tartalomhoz

Szöveges adatbázis

morocztamas · 2011. Május. 17. (K), 15.13
Ismerősöm ajánlotta, hogy használjak szöveges adatbázist, míg nem tudok simát használni. explode() használatával lenne megoldva, de a sorokat hogyan szűröm ki, hogy ha az $_GET['view']=='valami', akkor azt a sort írja ki az elemek megfelelő helyére, ahol az azonosito ,,valami"?
 
1

SQLite sem jöhet szóba?

kuka · 2011. Május. 17. (K), 15.47
SQLite sem jöhet szóba? Szerver mentes adatbázis, egyetlen állományban tárolva. Nem más, de a kérdésed alapján a szöveges állomány használata nem lenne éppen zökkenőmentes.
3

Meggyőző

morocztamas · 2011. Május. 17. (K), 17.34
Jónak tűnik a SQLite. Elolvastam az általam előbb hivatkozott oldalt, és úgy látszik nagy falat, de ez a PHP-val is így volt nálam. :D
6

Amennyiben SQLite nincs

kuka · 2011. Május. 17. (K), 18.19
Amennyiben SQLite nincs telepítve és nincs jogod telepíteni, figyelmedbe ajánlanám a PHP dBase függvényeit. Ezekkel ősrégi DBF állományokat használhatsz tárolásra. Sajnos index, memo, relation és egyéb DBF nyalánkságok nélkül, de legalább a törlés és szerkesztés meg van oldva.
2

Úgy érted, hogy egy txt

bb0072 · 2011. Május. 17. (K), 15.51
Úgy érted, hogy egy txt file-ban lesz tárolva soronként az adattartalom? Feltéve, hogy az adatbázis viszonylag kicsi marad (egyébként úgyis komolyabb adatbázis kell majd), beolvasod a file-t a file() függvény segítségével. Ez egy tömbben adja vissza a file sorait. Végigmész a tömbbön foreach-el. Az egyes tömbelemeket (sorokat) explode-olod, és megvizsgálod amit kell.
4

Nincs nagyon más lehetőség

morocztamas · 2011. Május. 17. (K), 17.39
Igen, olyan állományra gondoltam, ilyet javasoltak, bár hozzászólásokhoz javasolták a blogomra, de gondoltam az egészet így oldom meg, mert eddig nagyon kényelmetlen volt új bejegyzést adni hozzá (forrásban).
Felhívták rá a figyelmemet, hogy nem olyan biztonságos, mint a rendes adatbázis, de gondoltam a Januári meghosszabításig kibírom anélkül.
Köszönöm a függvényeket, így képzeltem el én is, hogy megadjátok a függvényeket, és majd én összerakom, annyit már tudok. :D
5

Két példa, ha érdekel, hogy

kuka · 2011. Május. 17. (K), 18.14
Két példa, ha érdekel, hogy mások hogyan oldották meg a szöveges állomány alapú tárolást:Ami a biztonságot illeti, szerintem nincs nagyobb jelentősége mint SQL esetében. Csak annyi a különbség, hogy mivel több kódot kell írni, több a hibalehetőség, amelyek közül több lehet biztonsági hiba.
7

Ezek szerint bb0072 válasza

morocztamas · 2011. Május. 19. (Cs), 17.47
Ezek szerint bb0072 válasza jó volt, vagyis elég az, vagy te egy teljesen másik alkalmazást ajánlottál a DokuWiki-vel?
11

bb0072 válasza tökéletesen

kuka · 2011. Május. 19. (Cs), 19.22
bb0072 válasza tökéletesen helytálló, bár az üdvözüléshez elégtelen. Na de inkább nem részletezem, ha már erre eldöntötted, hogy erre haladsz, nem töröm le a lendületedet.
14

Hogy érted?

morocztamas · 2011. Május. 20. (P), 13.15
Hogyan érted, hogy ,,az üdvözüléshez elégtelen"? Nem megfelelő megoldás?
16

Hogyan érted, hogy ,,az

kuka · 2011. Május. 20. (P), 13.45
Hogyan érted, hogy ,,az üdvözüléshez elégtelen"?
bb0072 csak az olvasásról szólt, viszont hozzászólásokhoz az nem elég, írás is szükséges. Az állomány végére való hozzáírás banális, viszont
  • szerkesztés és törlés több munka
  • keresés szekvenciális
  • rendezéshez az egészet be kell olvasni
  • kereszthivatkozás még több munka
18

Jogos

morocztamas · 2011. Május. 20. (P), 14.32
Csak én alapból bejegyzésekhez használnám fel, csak hozzászólásokhoz ajánlották. Valamivel ki kell húznom Januárig, és így nem nagyon ,,porosodik" a honlap.
19

Úgy érted, hogy

kuka · 2011. Május. 20. (P), 16.21
Úgy érted, hogy blogbejegyzéseket tárolnál bennük, amiket mondjuk Jegyzettömbben megírsz, odamásolod, aztán PHP szkriptnek már csak olvasnia kell őket? Ebben az esetben valóban sima ügy, nagyjából annyira sima mint bb0072 válaszában és Poetro kódjában.

De a blogbejegyzés általában terjedelmesebb szöveg, ami gyakorta tartalmaz \n karaktert. Ha PHP-ról is fogsz írni akkor valószínűbb, de különben sem kizárt, hogy valamelyik bejegyzés '||' karaktersort is fog tartalmazni. Márpedig jelenleg a fent említetteket bejegyzés illetve mező elválasztóként használod. Ezek levédésére (esetleg lecserélésére) gondolni kell.

Ami engem illet, az ilyen blogbejegyzésszerű szövegeket inkább külön állományokban szeretem tárolni. Aztán megegyezek magammal, hogy például:
  • állomány neve a bejegyzés azonosító
  • első sor bejegyzés címe
  • második sor témakör neve
  • a többi pedig maga a bejegyzés
20

Bizony

morocztamas · 2011. Május. 20. (P), 17.24
Már régebben írtam úgy nyolcvan bejegyzést, de azokat switch-csel raktam be include()-olva, de azon belül is a tartalom $content="tartalom"; volt és a cím, kulcsszavak is így. PHP-ról írtam úgy tucatszor. Lecserélni nem gond a |-t |-re.

Éppenséggel gedittel fogom írni a bejegyzéseket még, de ha egy jobb forrást összetudok majd dobni, akkor php-val fogom lementeni a cikkeket is. A cikközlő alkalmazásomban (jelszó: jelszavam) is így van, bár ott a forrás nem a legelőnyösebb, de hírközlésre jó, a blogomhoz viszont már nem.

A külön állományok annyiból zavarnának, hogy sok lenne, bár ha bedobom őket a /cikk/azonosító/cikk.txt-be, akkor az úgy jó lenne. Most jelenleg a /cikk/azonosító/ mappákból van körübelül tíz, a képek miatt, hogy legyenek bejegyzésekhez képek, de aztán leállítottam az oldalt, ezért nem töltöttem fel a többi bejegyzéshez sem képet. Jó ötlet ez, amit leírtál, jobban is tetszik, így szívesen venném benne a segítségedet.
21

Az útvonal ilyen esetekben

kuka · 2011. Május. 20. (P), 18.02
Az útvonal ilyen esetekben inkább /cikk/kategoria/azonosito.txt szokott lenni, képek meg valahol külön. Mert ha mondjuk írsz három cikket geditről és fel akarod bennük tünteti a gedit logóját, akkor mit csinálsz a képpel?
  • Mind a három cikk könyvtárába bemásolod - hely pazarlás.
  • Csak az egyik cikk könyvtárába másolod be - később ha kell már nem tudod hol is hagytad.
  • Csak az egyik cikk könyvtárába másolod be, a többibe pedig symlinkeled - ez már jobb, de sávszélességet csak pazarlod.
22

Mindegyik cikknél mást

morocztamas · 2011. Május. 20. (P), 18.26
Csak egy képet csinálok meg Gimppel egy cikkhez, de a címet próbálom a képpel ábrázolni. Az ellenvetés igaz, mert végülis amikor írtam az Ubuntu 11.04-ről és a Kubuntu 11.04-ről, majd később az Ubuntu és Kubuntu fejlődéstörténetéről, akkor kellettek a képernyőképek bemutatásra és így három külön mappában voltak elhelyezve. Most egy újabb gond lett felvetve. :D Fogós kérdés tényleg.
8

Elakadtam

morocztamas · 2011. Május. 19. (Cs), 18.26
Eddig megcsináltam:
<?php
$db=file('db.txt');
$line=explode("\n",$db);
list($azonosito,$cim,$tartalom,$kulcsszavak,$cimkek)=explode("||",$line);
?>
A foreach()-ról nem tudtam meg többet, így tényleg nem tudom, hogy hogyan tovább.
9

Soronként

Poetro · 2011. Május. 19. (Cs), 19.01
<?php  
$db = file('db.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);  
foreach ($db as $line) {
  list($azonosito, $cim, $tartalom, $kulcsszavak, $cimkek) = explode("||", $line);
}
?>
12

Hogy iratom ki?

morocztamas · 2011. Május. 19. (Cs), 19.47
Mert ugye nekem úgy kell, mint az adatbázisnál, csak itt nem tudom hogyan kellene. Az $azonosito ahol egyenlő $_GET['view']-vel, abból a sorból kéne a változókat kiemelnie. Ezt hogyan oldjam meg?
13

keresés

Poetro · 2011. Május. 19. (Cs), 20.42
<?php    
$db = file('db.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);    
foreach ($db as $line) {  
  list($azonosito, $cim, $tartalom, $kulcsszavak, $cimkek) = explode("||", $line);  
  if ($_GET['view'] == $azonosito) {
    // Csinálunk valamit.
    break;
  }
}  
?>
15

Tökéletesen működik

morocztamas · 2011. Május. 20. (P), 13.31
Ragyogó, de azt hogyan tudom megoldani, hogy felsorolja az összeset egymás után a címlapon? A $tartalmat megoldom úgy, hogy HTML elemek nélkül legyenek $bevezeto=strip_tags($tartalom);, de utána már le kellene vágni 240 írásjelre, de a fő gond, hogy az összeset felsorolja.
17

Algoritmusok

Poetro · 2011. Május. 20. (P), 14.09
Szerintem előbb ismerkedj meg az algoritmusok alapjaival. Például, hogy mik azok a ciklusok, milyen fajtájuk van. Hogyan készítünk feltételeket, azoknak milyen fajtájuk van. Azután jöhetnek a string kezelő függvények, majd a tömb kezelő függvények. Ha ez megvan, akkor mutasd meg, meddig jutottál.
23

Függvényre számítottam öszintén...

morocztamas · 2011. Május. 21. (Szo), 11.08
...mivel ha megadjátok a függvényt, akkor összetudom dobni belőle nagyjából a forrást, más alkalmazásokat is készítettem már így (vendégkönyv, társalgó, kapcsolatfelvételi űrlap, captcha, és a többi). Ha gyakorlatban próbálkozom velük, akkor könnyebben megtanulom.
24

substr

Poetro · 2011. Május. 21. (Szo), 14.37
De csináltam neked egy teljes blog motort kb 140 sorban:

<?php
function getItems() {
  $db = file('db.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $entries = array();
  foreach ($db as $line) {
    $entry = new stdClass();
    list($entry->azonosito, $entry->cim, $entry->tartalom, $entry->kulcsszavak, $entry->cimkek) =
      explode('||', $line);
    $entry->cimkek = array_map('trim', explode(', ', $entry->cimkek));
    $entries[] = $entry;
  }
  return $entries;
}

function showAll() {
  $teasers = array();
  $entries = getItems();
  foreach ($entries as $entry) {
    $teasers[] = showTeaser($entry);
  }
  return showTeasers($teasers);
}

function showTeasers($teasers) {
  $teasers = implode("\n", $teasers);
  return <<<__HTML__
  <div class="hfeed">
    $teasers
  </div>
__HTML__;
}

function showTag($tag) {
  $teasers = array();
  $entries = getItems();
  foreach ($entries as $entry) {
    if (in_array($tag, $entry->cimkek)) {
      $teasers[] = showTeaser($entry);
    }
  }
  return showTeasers($teasers);
}

function showItem($azonosito) {
  $teasers = array();
  $entries = getItems();
  foreach ($entries as $entry) {
    $teasers[] = showTeaser($entry);
    if ($entry->azonosito == $azonosito) {
      $cimkek = array_map('checkPlain', $entry->cimkek);
      $felho = '';
      foreach ($cimkek as $cimke) {
        $ecimke = urlencode($cimke);
        $felho .= <<<__HTML__
        <li>
          <a href="?tag=$ecimke" rel="tag">$cimke</a>
        </li>
__HTML__;
      }
      $cim = checkPlain($entry->cim);
      return <<<__HTML__
      <div class="hentry">
        <h2 class="entry-title">
          <a href="?view={$entry->azonosito}">$cim</a>
        </h2>
        <div class="entry-content">
          {$entry->tartalom}
        </div>
        <ul class="tags">
          $felho
        </ul>
      </div>
__HTML__;
    }
  }
}

function showTeaser($entry) {
  $cimkek = array_map('checkPlain', $entry->cimkek);
  $felho = array();
  foreach ($cimkek as $cimke) {
    $ecimke = urlencode($cimke);
    $felho[] = <<<__HTML__
        <li>
          <a href="?tag=$ecimke" rel="tag">$cimke</a>
        </li>
__HTML__;
  }
  $felho = "\n" . implode("\n", $felho);
  $cim = checkPlain($entry->cim);
  $tartalom = nl2br(checkPlain(truncate(strip_tags($entry->tartalom), 240, TRUE, TRUE)), TRUE);
  return <<<__HTML__
    <div class="hentry">
      <h2 class="entry-title">
        <a href="?view={$entry->azonosito}">$cim</a>
      </h2>
      <div class="entry-summary">
        <p>$tartalom</p>
      </div>
      <ul class="tags">$felho
      </ul>
    </div>
__HTML__;
}

function truncate($text, $len, $wordSafe, $dots) {
  if (mb_strlen($text) < $len) {
    return $text;
  }
  if ($dots) {
    $len -= 1;
  }
  if ($wordSafe) {
    $text = mb_substr($text, 0, $len + 1);
    if ($lastSpace = strrpos($text, ' ')) {
      $text = substr($text, 0, $lastSpace);
    }
    else {
      $text = mb_substr($text, 0, $len);
    }
  }
  else {
    $text = mb_substr($text, 0, $len);
  }

  if ($dots) {
    $text .= '…';
  }

  return $text;
}

function checkPlain($text) {
  return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}

if (isset($_GET['view'])) {
  echo showItem($_GET['view']);
}
else if (isset($_GET['tag'])) {
  echo showTag($_GET['tag']);
}
else {
  echo showAll();
}
25

Kösz!

morocztamas · 2011. Május. 21. (Szo), 15.17
Nagy segítség köszönöm. A tárhely azonban hibát ír ki.
26

Sikerül

Poetro · 2011. Május. 21. (Szo), 16.39
Remélem majd sikerül megoldanod ezt a problémát. Például elmélyedni abban, hogyan kell hibajelzéseket megfejteni, feldolgozni. Vagy csak a hibakeresés alapjait elsajátítani.
Én nem állítottam, hogy a kód hibátlan, sőt, azt se, hogy működik, igazából csak egy szemléletet akartam mutatni, hogy hogyan lehet megoldani.
27

Én nem állítottam, hogy a kód

kuka · 2011. Május. 21. (Szo), 17.11
Én nem állítottam, hogy a kód hibátlan, sőt, azt se, hogy működik,
Ha megengeded, majd én: Poetro kódja nekem hibátlanul működik.
28

Nekem is

morocztamas · 2011. Május. 21. (Szo), 17.25
Csak amit még én használtam fel, annál még csak közel 130 sor volt, aztán később írhata át Poetro 140-re, és úgy már működik is: http://morocztamas.realgameguides.com/bm/index2.php
29

Nem kötekedésképp...

Kérésre törölve 11. · 2011. Május. 21. (Szo), 18.25
de ez:

 function showTeasers($teasers) {  
   $teasers = implode("\n", $teasers);  
csak az én szépérzékemet "báncsa"?
Vagy ma már nem divat, hogy a függvény argumentumok tartalmát békén hagyjuk?
30

Az enyémet inkább az bántja

kuka · 2011. Május. 21. (Szo), 19.00
Az enyémet inkább az bántja amikor n darab változón passzírozzák át az értékeket, hogy az ember már két tucat változót vett fel a debugger watch listájába, de még mindig nem látszik a végeredmény.
31

Elkezdtem testreszabni

morocztamas · 2011. Május. 28. (Szo), 14.24
De akadt néhány gond. A blogmotor forrásába beleágyaztam a HTML ,,testet", de a változók nem jelennek meg a meta elemekben. Hogyan oldjam meg?
32

E_NOTICE

Poetro · 2011. Május. 28. (Szo), 16.01
Mondjuk bekapcsolod a PHP E_NOTICE-okat, és látod, hogy a $entry változót nem töltötted fel. Előbb azt a változót is fel kell tölteni adattal.
33

-.-

morocztamas · 2011. Május. 28. (Szo), 16.52
Ettől nem lettem okosabb. Hiába bogarászom át az egész forrást, még nem értem meg. Majd később úgyis megfogom (így volt ez más forrásokkal is), de én már most szeretném használni.
34

Értelmezd

Poetro · 2011. Május. 28. (Szo), 18.00
Mivel az alkalmazás nem hosszú, menj rajta végig soronként, és megjegyzésbe írd le, melyik sor mit csinál. Ha valamelyik függvényt, vagy programszerkezetet nem ismered, akkor olvasd el a dokumentációban, mit csinál. Ha nem megy az angol, akkor vehetsz, vagy kölcsönözhetsz könyvtárból magyar nyelvû könyvet a témában, ami tartamazza a PHP dokumentációt.
Ha ezzel megvagy, és még mindig nem világos valami, akkor mutasd meg az értelmezésedet (a felkommentezett kódot) és kibogozzuk a maradékot.
35

Elkezdtem

morocztamas · 2011. Május. 28. (Szo), 22.20
Elkezdtem, de ezzel csak szenvedek. Néhányat tudok belőle, amúgy semmi mást. Az angol doksikat nem értem (hála a magyar közoktatásnak), de a magyarokat se mindig. Könyvre nincs pénzem, ahogyan könyvtárra sem.

Nekem még mindig csak januárig kellene, mert utána MySQL. Addig meg az kéne, hogy végre kiírja a megfelelő helyekre (title, meta) a cuccokat és kész.
36

Én így csinálnám. Sokkal

Poetro · 2011. Május. 28. (Szo), 23.46
Én így csinálnám. Sokkal szebb, megfelelően escapelve vannak az elemek, és ráadásul a HTML kód is áttekinthető. A másik dolog, hogy szerintem egy 800-1000 forintos könyvtári bérletet biztosan sikerül valahogy összehozni, ha még kiskorú vagy, a szüleid erre azért biztosan tudnak áldozni.
[off]
A másik dolog, hogy angolul mindenképpen érdemes megtanulni, és azt nem csak iskolában lehet. Elég csak sokat olvasni, szótárazni angol szöveget. Bármilyen jellegűt, lényeg, hogy a téma érdekeljen. Én anno Star Wars könyveket olvastam és fordítottam le angolról. Volt pár ismerősömnek ilyen könyve, kölcsönkértem pár hétre, és lefordítottam magamnak. Azóta, az internet korában pedig nem nehéz megfelelő idegennyelvű szöveget találni, és a fordítás is sokkal könnyebb.
37

Király

morocztamas · 2011. Május. 29. (V), 11.32
Nagyon jó! Kösz! Még annyit, hogy a meta leírásban esc és iso kódokká alakítja a html elemeket, nem tünteti el, de strip_tags() fügvénnyel megoldottam.

Angolul néztem már filmet angol felirattal, de nagyon nem vettem észre, hogy fejlődtem volna. Nekem nem a szavakkal van a gond, hanem a nyelvtannal.
10

Hát ha file() eredményét

kuka · 2011. Május. 19. (Cs), 19.13
Hát ha file() eredményét \n-re explode()-olod, akkor addig sincs igazán megcsinálva és nem csak a foreach-ről nem tudsz eleget: a file() soronként darabolva egy tömbbe olvassa az állomány tartalmát.