» »

[PHP] Novice

[PHP] Novice

bluefish ::

S PHP-jem nimam nekih konkretnih izkušenj in temu primerno tudi vprašanje.

Potreboval bi neko zelo preprosto skripto za vnos in prikaz novic. Prikaz bi zajemal le naslov, datum, besedilo in nič drugega. Prav tako bi izpisalo le zadnjih nekaj vnosov - recimo 4.
Novice bi se shranjevale v datoteko ali še raje v bazo.
Ogledal sem si že nekaj skript, ki so dostopne na netu, vendar so bodisi neustrezne za predelavo prikaza ali pa imajo preveč glomazen vmesnik za vnos.
Sicer imam že od prej dokaj dobre izkušnje s CuteNews, vendar bi potreboval nekaj še bolj enostavnega.

Kako se stvari lotiti?

S pomočjo nekega vodiča sem sestavil nekaj malega skupaj (baza ima polja id, title, content):

VNOS novice
<?php
error_reporting(E_ALL);
if(!get_magic_quotes_gpc()) {
	$title = strval(mysql_escape_string($_POST['title']));
	$content = strval(mysql_escape_string($_POST['content']));
}
else {
	$title = strval($_POST['title']);
	$content = strval($_POST['content']);
}
require_once("data.php");
mysql_pconnect($host, $user, $password) or die("Failed to connect!");
mysql_select_db($database) or die("Failed to select!");
$sql = "INSERT INTO entry VALUES(NULL, '$title', '$content')";
mysql_query($sql) or die ("Failed to enter!");
print "Successful entry!";
?>


PRIKAZ novic
<?php
error_reporting(E_ALL);
require_once("data.php");
mysql_pconnect($host, $user, $password) or die("Failed to connect!");
mysql_select_db($database) or die("Failed to select!");
$sql = "SELECT * FROM entry";
$query = mysql_query($sql) or die("Failed to fetch!");
if(mysql_num_rows($query) == 0) {
	print "No data!";
}
while($row = mysql_fetch_assoc($query)):
$title = stripslashes($row['title']);
$content = stripslashes($row['content']);
print $title;
print "<br />";
print $content;
endwhile;
mysql_free_result($query);
?>

Vse skupaj se zatakne pri prikazu večih novic, saj ne vem, kako bi ločil posamezne vnose med sabo. Nekaj sem se igral z br tagom, vendar neuspešno.
Prav tako ne vem, kako bi ob vnosu avtomatsko vpisal še datum in ga potem tudi prikazal.

Kakšna pomoč?
  • spremenil: bluefish ()

blewlelel ::

Izpisi so ubistvu ločeni v while zanki.. Verjetno misliš, da bi jih ločil videzno, lahko to preprosto narediš tudi s CSS ali pa kar s html npr.


print('<div class="naslov">'.$title.'</div>');
print('<div class="vsebina">'.$content.'</div>');
print('<br />');


To bi moralo med vsako novico naredit en presledek, naslov zgoraj, opis spodaj. Seveda pa je potrebno napisat ustrezen CSS, kjer se lahko še na boljše načine ločuje(Lahko ti tudi to spišem ampak ne vem kakšne so želje).


Pri vnosu moreš v bazi pri entiteti entry(v tvojem primeru) dodat še atribut npr. datum tipa DATE. V php pa uporabiš funkcijo date katero pretvoriš v sql date format (YYYY-MM-DD), ter ga potem ob izpisu pretvoriš v obliko ki ti ustreza.. Pretvoriš ga pa lahko z večimi funkcijami ena je npr. explode ali str_replace odvisno..

bluefish ::

ok, tisto s css-jem mi je jasno.
Lahko malo več poveš o datumu? Sploh tale del:
V php pa uporabiš funkcijo date katero pretvoriš v sql date format (YYYY-MM-DD), ter ga potem ob izpisu pretvoriš v obliko ki ti ustreza.. Pretvoriš ga pa lahko z večimi funkcijami ena je npr. explode ali str_replace odvisno..


Hvala za pomoč.

Atos ::

V bazi ustvari dodatno polje za datum, recimo 'created', tipa DATETIME. Potem spremeni SQL za vnos takole:

$sql = "INSERT INTO entry VALUES(NULL, '$title', '$content', NOW())";

ob predpostavki, da je ravnokar ustvarjeno polje 'created' na zadnjem mestu.

Pri izpisu potem uporabiš date() funkcijo. Nekaj v takem smislu:

print date("j.n.y \o\b G:i", strtotime($row['created']));

Prvi argument funckije določi obliko, drugi pa je unix timestamp. strtotime je funkcija, ki pretvori US angleški format zapisa datuma v unix timestamp, v tem primeru (unix timestamp je število pretečenih sekund od 1.1.1970 :) V tem primeru dobiš izpis nekako takole:

5.3.09 ob 1:45

EDIT: za drugačne izpise poglej manual za date funkcijo, kjer je zelo lepo razloženo tole.

Zgodovina sprememb…

  • spremenil: Atos ()

bluefish ::

ok, hvala, se bom jutri malo pomatral in poskusil.

edit: je možno brez večjih sprememb v kodi še narediti, da se iz baze izpiše le zadnjih nekaj x vnosov?
Kako pa je kaj trenutno z varnostjo?

Zgodovina sprememb…

  • spremenil: bluefish ()

blewlelel ::

Ja se da, v SQL stavku dodaš LIMIT x.. Za pravilno postavitev in sintakso si poglej na uradni strani.. Kar se tiče varnosti se ne bi poglabljal ker vsaj iz mojih izkušen z varnostjo, se bi lahko tema zelo razširila...

bluefish ::

hvala obema. Sem dodal še ORDER BY, da pri vrhu izpiše najnovejše vnose in seveda LIMIT, datum pa sem oblikoval v 'l\, jS \of F Y'.
Tole pa je rezultat:

opeter ::

Kakšno bazo pa uporabljaš? Tekstovno ali pa kakšno SQL?
Hrabri mišek (od 2015 nova serija!) -> http://tinyurl.com/na7r54l
18. november 2011 - Umrl je Mark Hall, "oče" Hrabrega miška
RTVSLO: http://tinyurl.com/74r9n7j

bluefish ::

SQL

Zgodovina sprememb…

  • spremenil: bluefish ()

msarc1 ::

imam eno vprašanje in sicer na strani mi ne prikaže novic.. v html kodo dodam
<?PHP
 "include("bla/bla/show_news.php");"
?>

in se ne zgodni nič.. no vsaj novice niso vidne :S prosim za pomoč

aja se to uporabljam pa CuteNews v1.4.6 by CutePHP Team

Zgodovina sprememb…

  • spremenilo: msarc1 ()

Atos ::

brez narekovajev:

include("bla/bla/show_news.php");

Zgodovina sprememb…

  • spremenil: Atos ()

msarc1 ::

ok tudi brez narekovajov ne deluje kaj pa pot a mora biti kaj http://www.pot.si/pot/show_news.php al je taka kot je uredu?

Zgodovina sprememb…

  • spremenilo: msarc1 ()

bluefish ::

mora biti relativna glede na stran, kamor novice vključuješ.

msarc1 ::

ok. Kaj pa recimo končnica html ali php? se pravi krneki.html ali krnekih.php ma to kakšno vezo za novice?

SlimDeluxe ::

Nima nobene veze. A ti sploh izpiše kak warning? Kaj pa če daš: require("bla/bla/show_news.php");

msarc1 ::

ja tko je zdej ce je v .php delajo no mi vsaj javi tole You must enter name.go ( kaj zdej to pomeni?)

če dam pa v .html se pa ne zgodi nič

opeter ::

.html/.htm v ne bo delovalo. Lahko poskusiš mogočet edino .shtml
Hrabri mišek (od 2015 nova serija!) -> http://tinyurl.com/na7r54l
18. november 2011 - Umrl je Mark Hall, "oče" Hrabrega miška
RTVSLO: http://tinyurl.com/74r9n7j

bluefish ::

načeloma ima CuteNews precej dober manual. Si naredil tako, kot piše tam?

SlimDeluxe ::

Aja lol, pozna ura dela svoje, kakšno sem ustrelil :)

msarc1 ::

načeloma ima CuteNews precej dober manual. Si naredil tako, kot piše tam?



da naredil sem vse točno tako kot piše v manualu!

bluefish ::

si slučajno uporabil še kak template?
V tem primeru moraš dodati še eno vrstico kode.

msarc1 ::

ne pa uporabu sem tut uno da ti sam zgenerira kodo katero potem vneseš v svojo spletno stran

bluefish ::

skozi setup proces domnevam, da si šel?

msarc1 ::

setup?

bluefish ::

"Finally, go to www.yoursite.com/cutenews/index.php with you favorite browser and follow the instructions." - Ko preneseš fajle na server in preden includaš novice na stran.

Zgodovina sprememb…

  • spremenil: bluefish ()

msarc1 ::

aja ja to sm dej ti poslm zs

bluefish ::

morda je finta kje drugje na strani. Daj poskusi kodo vstaviti v en prazen html fajl in poglej, če novice prikazuje.

msarc1 ::

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<?PHP
include("/home/marko/domains/ma-ro.si/public_html/test/novice/show_news.php");
?>

<body><?PHP
require("/home/marko/domains/ma-ro.si/public_html/test/novice/show_news.php");
?>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<table width="200" border="0">
  <tr>
    <td><p><a href="http://www.ma-ro.si/test/novice/example1.php">novice </a></p>

    <p>&nbsp;</p>
    <p>&nbsp;</p></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>


tukaj je pa se koda od strani na kateri naj bi bile novice

bluefish ::

sodeč po hitrem pregledu kode imaš probleme pri navajanju lokacij.
Pri novicah bi bilo dovolj, da vneseš le novice/show_news.php kot pot do njih, če se celotna zadeva oz. stran nahaja v mapi test in novice v podmapi novice.

Prav tako tam, kjer imaš na strani eno povezavo. Če je datoteka example1.php v mapi novice in je stran v mapi test, potem je vsebina href elementa le novice/example1.php

si rešil zadevo?

Zgodovina sprememb…

  • spremenil: bluefish ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

php - galerija slik

Oddelek: Izdelava spletišč
141999 (1727) t3hn0
»

xCollect - program za katalogacijo filmov, serij, iger ter knjig

Oddelek: Programska oprema
162476 (1988) krho
»

Login script

Oddelek: Programiranje
51080 (1014) Mercier
»

ASP in vnosni podatki v MDB

Oddelek: Izdelava spletišč
7983 (894) swalow

Več podobnih tem