Postsystem i PHP
ForordHej Rowlere. Eftersom der er mange der søger et postsystem, og der ikke er nogen artikel på det tænkte jeg på at skrive en. Dette script kræver PHP og MySQL (phpMyAdmin).. Det er ikke testet! Eventuelle fejl kan skrives til mig over PB eller ved artiklen.Indholdsfortegnelse1.0 Introduktion, hvad du behøver.. 1.1 SQL - Connect, og indsættelse. 1.2 Indbakke, Udbakke, og Papirkurv
1.0 Introduktion, hvad du behøver..
Hej Rowlere.
Denne artikel indeholder kun script / kode der er 100% lavet af mig. Koden / Artiklen er ikke skrevet på andre sider overhovedet.
Postsystemet indeholder: Indbakke, Udbakke, slettet post, og send ny besked.
Denne artikel er her for at vise hvordan man kan lave det, og det er ikke den eneste måde. Folk må gerne komme med konstruktiv kritik.
Først skal vi have nogle sessions som du kan sætte ind / ændre på dit login script.
Sessionsne hedder og indeholder:
$_SESSION['brugernavn']; //Indeholder selvf brugerens brugernavn.
$_SESSION['loggetind']; //Det er så den der fortæller om man er logget ind :)
De skal sættes ind hvor brugeren er KORREKT logget ind.
1.1 SQL - Connect, og indsættelse.
Som alle andre scripts (Der bruger SQL) skal vi have en connect fil så vi kan hive informationer ud fra vores database.
Derfor laver vi en config.php som ser sådan her ud:
mysql_connect("localhost", "DIT SQL BRUGERNAVN", "DIT PASSWORD")or die("Kunne ikke oprette forbindelse"); //Vi etablerer forbindelse til MySQL (Databasen)
mysql_select_database("DIN SQL DATABASE")or die(mysql_error()); //Og vi vælger hvor vores tabeller ligger.
Så har vi fået etableret forbindelse. Hvis informationerne ikke stemmer vil den skrive kunne ikke oprette forbindelse.
Så skal vi lave vores tabeller. Vi har i dette tilfælde 1 tabel til post.
For at indsætte dataen skal du gå ind i PhpMyAdmin, og vælge din database, derefter klikke på importer knappen. Så vælger du den fil der indeholder SQL informationen (Nedenstående), og uploader det.
CREATE TABLE `post` (
`dato` datetime NOT NULL,
`fra` varchar(255) NOT NULL,
`til` varchar(255) NOT NULL,
`emne` text NOT NULL,
`status` int(11) NOT NULL,
`besked` longtext NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Så har vi oprettet selve tabellen og styr på databasen.
1.2 Indbakke, Udbakke, og Papirkurv
Så skal vi til selve PHP kodningen. Vi laver først indbakken, som vil indeholde alle breve, der vil være så man kan se om den er læst eller ej. Indbakken indeholder også den funktion hvor man læser brevet.
Vi begynder, og forklaringen er inde i koden :).
<?
session_start(); //Starter vores sessions $_SESSION['brugernavn'] og $_SESSION['loggetind'] så de kan bruges.
include("config.php"); //Inkluderer config.php som etablerer forbindelse til databasen for os.
if($_SESSION['loggetind'] == "true") //Er brugeren logget ind?
{ //Det er brugeren og man kan se indbakken og læse post.
if($_GET['do'] == "laes" && $_GET['id']) //Hvis vi får do=laes og et id, så urlen ser sådan her ud www.ditdomæne.dk/indbakke.php?do=laes&id=1 fx. så åbner den brevet med id nummer 1
{
$hent_besked = mysql_query("SELECT * FROM post WHERE id = '$_GET[id]'")or die(mysql_error()); //Henter beskeden med det bestemte id fra vores database
$findes_beskeden = mysql_num_rows($hent_besked); //Laver en variabel som indeholder et tal, hvis tallet er 0, så findes brevet ikke og der bliver udskrevet, hvis tallet er 1, så vil det blive vist.
if($findes_beskeden == 0) //Tallet i variablen er lig med 0 derfor findes brevet ikke!
{
print "Dette brev findes ikke."; //Det udskriver vi.
}
else //Hvis tallet så er 1 så kan vi vise brevet :)
{
$besked = mysql_fetch_array($hent_besked); //Laver en variabel der hedder $besked med et mysql_fetch_array så vi kan bruge $besked[emne] osv.
$ejer = $besked['til']; //Laver en variabel med hvem den er til, da vi skal bruge den på linien under.
if($ejer == $_SESSION['brugernavn']) //Vi tjekker om man har lov til at læse den.
{ //Det har man og den viser brevet.
print "<h1>".$besked['emne']."</h1>"; //Udskriver emnet i en overskrift
print "<hr><b>Til:</b> ".$besked['til']." - <b>Fra:</b> ".$besked['fra']."<br> <b>Skrevet d:</b> ".$besked['dato']."<hr>"; //Udskriver hvem den er til og fra, inkl datoen for afsendelse.
print $besked['besked']."<br>"; //Udskriver beskeden.
print "<a href='svar.php?emne=RE: ".$besked['emne']."&modtager=".$besked['fra']."'>Besvar</a>"; //Udskriver et link til besvarelses filen (svar.php)
if($besked['status'] == 0) //Hvis beskeden ikke er læst før
{
mysql_query("UPDATE post SET status = '1' WHERE id = '$_GET[id]'")or die(mysql_error()); //Så sætter vi den til læst.
}
}
else //Ellers..
{
print "Du har ikke adgang til dette brev!"; //Har man ikke tilladelse og den giver beskeden.
}
}
}
else //Hvis vi ikke får det så vil den vise vores indbakke.
{
print "<h1>Indbakke</h1>"; //Udskriver en overskrift der hedder "Indbakke" uden "" selvfølgelig :P
$hent_beskeder = mysql_query("SELECT * FROM post WHERE til = '$_SESSION[brugernavn]' ORDER BY id DESC")or die(mysql_error()); //Vi henter informationen fra databasen. Den hiver alle beskeder ud der er til brugeren der er logget ind.
$antal_beskeder = mysql_num_rows($hent_beskeder); //Tjekker om der er nogen beskeder i din indbakke med samme meteode som på linie 10.
if($antal_beskeder == 0) //Variablen er lig med 0 og der er ingen beskeder
{
print "Der er ingen beskeder i din indbakke."; //Så det skriver vi
}
else //Variablen er ikke lig med 0 og vi kan vise beskederne.
{
while($beskeder = mysql_fetch_array($hent_beskeder)) //Laver en while så vi kan lave en liste over alle "brevene". Whilen indeholder som i kan se sætningen "$beskeder = mysql_fetch_array($hent_beskeder)" det betyder at imens den laver den variabel så vi kan bruge $beskeder[emne] osv så viser den beskederne.
{
if($beskeder['status'] == 0) //Hvis beskedens status er 0 (Ulæst betyder 0) så vil dette ske...
{
print "<b><a href='?do=laes&id=".$beskeder['id']."'>".$beskeder['emne']."</a></b> - Fra: ".$beskeder['fra']."</b> ".$besked['dato']." | <a href='slet.php?id=".$beskeder['id']."'>Slet</a><br>"; //Så vil den udskrive det med fed tekst. Den udskriver emne, et link (til brevet), datoen for afsendelse, et slet link, og hvem den er fra.
}
elseif($beskeder['status'] == 1) //Hvis den ikke er 0, men derimod 1 (Læst) så vil følgende ske
{
print "<a href='?do=laes&id=".$beskeder['id']."'>".$beskeder['emne']."</a> - Fra: ".$beskeder['fra']." ".$besked['dato']." | <a href='slet.php?id=".$beskeder['id']."'>Slet</a><br>"; //Den udskriver det uden fed tekst. Den udskriver det samme.
} //Lukker vores if
} //Lukker vores while
}
}
}
else //Hvis brugeren ikke er logget ind.
{
print "Du er ikke logget ind!"; //Så vil vi give besked.
}
?>
Jeg har selvfølgelig sikret så man ikke kan læse andres breve (;.
Så har vi da indbakke :) og læs post.
Nu skal vi så have udbakke. Det er næsten ligesom indbakke, denne gang er det bare fra istet for til i queryen..
Denne udbakke vil også vise om modtageren har læst brevet eller ej :). Man kan dog ikke besvare sit eget brev ;P. Koden er:
udbakke.php
<?
session_start(); //Starter vores sessions $_SESSION['brugernavn'] og $_SESSION['loggetind'] så de kan bruges.
include("config.php"); //Inkluderer config.php som etablerer forbindelse til databasen for os.
if($_SESSION['loggetind'] == "true") //Er brugeren logget ind?
{ //Det er brugeren og man kan se udbakken og læse post.
if($_GET['do'] == "laes" && $_GET['id']) //Hvis vi får do=laes og et id, så urlen ser sådan her ud www.ditdomæne.dk/udbakke.php?do=laes&id=1 fx. så åbner den brevet med id nummer 1
{
$hent_besked = mysql_query("SELECT * FROM post WHERE id = '$_GET[id]'")or die(mysql_error()); //Henter beskeden med det bestemte id fra vores database
$findes_beskeden = mysql_num_rows($hent_besked); //Laver en variabel som indeholder et tal, hvis tallet er 0, så findes brevet ikke og der bliver udskrevet, hvis tallet er 1, så vil det blive vist.
if($findes_beskeden == 0) //Tallet i variablen er lig med 0 derfor findes brevet ikke!
{
print "Dette brev findes ikke."; //Det udskriver vi.
}
else //Hvis tallet så er 1 så kan vi vise brevet :)
{
$besked = mysql_fetch_array($hent_besked); //Laver en variabel der hedder $besked med et mysql_fetch_array så vi kan bruge $besked[emne] osv.
$ejer = $besked['fra']; //Laver en variabel med hvem den er fra, da vi skal bruge den på linien under.
if($ejer == $_SESSION['brugernavn']) //Vi tjekker om man har lov til at læse den.
{ //Det har man og den viser brevet.
print "<h1>".$besked['emne']."</h1>"; //Udskriver emnet i en overskrift
print "<hr><b>Til:</b> ".$besked['til']." - <b>Fra:</b> ".$besked['fra']."<br> <b>Skrevet d:</b> ".$besked['dato']."<hr>"; //Udskriver hvem den er til og fra, inkl datoen for afsendelse.
print $besked['besked']."<br>"; //Udskriver beskeden.
}
else //Ellers..
{
print "Du har ikke adgang til dette brev!"; //Har man ikke tilladelse og den giver beskeden.
}
}
}
else //Hvis vi ikke får det så vil den vise vores indbakke.
{
print "<h1>Udbakke</h1>"; //Udskriver en overskrift der hedder "Udbakke" uden "" selvfølgelig :P
$hent_beskeder = mysql_query("SELECT * FROM post WHERE fra = '$_SESSION[brugernavn]' ORDER BY id DESC")or die(mysql_error()); //Vi henter informationen fra databasen. Den hiver alle beskeder ud der er til brugeren der er logget ind.
$antal_beskeder = mysql_num_rows($hent_beskeder); //Tjekker om der er nogen beskeder i din indbakke med samme meteode som på linie 10.
if($antal_beskeder == 0) //Variablen er lig med 0 og der er ingen beskeder
{
print "Der er ingen beskeder i din udbakke."; //Så det skriver vi
}
else //Variablen er ikke lig med 0 og vi kan vise beskederne.
{
while($beskeder = mysql_fetch_array($hent_beskeder)) //Laver en while så vi kan lave en liste over alle "brevene". Whilen indeholder som i kan se sætningen "$beskeder = mysql_fetch_array($hent_beskeder)" det betyder at imens den laver den variabel så vi kan bruge $beskeder[emne] osv så viser den beskederne.
{
if($beskeder['status'] == 0) //Hvis beskedens status er 0 (Ulæst betyder 0) så vil dette ske...
{
print "<b><a href='?do=laes&id=".$beskeder['id']."'>".$beskeder['emne']."</a></b> - Fra: ".$beskeder['fra']."</b> ".$besked['dato']."<br>"; //Så vil den udskrive det med fed tekst. Den udskriver emne, et link (til brevet), datoen for afsendelse, og hvem den er fra.
}
elseif($beskeder['status'] == 1) //Hvis den ikke er 0, men derimod 1 (Læst) så vil følgende ske
{
print "<a href='?do=laes&id=".$beskeder['id']."'>".$beskeder['emne']."</a> - Fra: ".$beskeder['fra']." ".$besked['dato']."<br>"; //Den udskriver det uden fed tekst. Den udskriver det samme.
} //Lukker vores if
} //Lukker vores while
}
}
}
else //Hvis brugeren ikke er logget ind.
{
print "Du er ikke logget ind!"; //Så vil vi give besked.
}
?>
Nu mangler vi slet.php, papirkurv.php, og svar.php
Det går hurtigt syntes jeg :). Håber i læser forklaringen og ikke kun copy paster.
Vi laver slet.php
<?
session_start(); //Starter vores sessions $_SESSION['brugernavn'] og $_SESSION['loggetind'] så de kan bruges.
include("config.php"); //Inkluderer config.php som etablerer forbindelse til databasen for os.
if($_SESSION['loggetind'] == "true") //Er brugeren logget ind?
{ //Det er brugeren og han/hun kan nu slette post..
$hent_info = mysql_query("SELECT * FROM post WHERE id = '$_GET[id]'")or die(mysql_error()); //Vi henter informationen fra brevet.
$info = mysql_fetch_array($hent_info); //Laver en variabel så vi kan bruge $info[status] for eksempel.
$ejer = $info['til']; //Vi laver en variabel der hedder ejer, som indeholder den beskeden er til.
if($ejer == $_SESSION['username']) //TJekker om $ejer er lig med brugerens brugernavn
{ //Det er det og beskeden kan slettes
if($info['status'] != 3)
{
mysql_query("UPDATE post SET status = '3' WHERE id = '$_GET[id]'")or die(mysql_error());
print "Beskeden er nu slettet.";
}
else
{
print "Beskeden er allerede slettet.";
}
}
else //Hvis man ikke har rettigheder til det
{
print "Du kan ikke slette andres beskeder!"; //Så giver vi en besked om det.
}
}
else //Hvis brugeren ikke er logget ind.
{
print "Du er ikke logget ind!"; //Så vil vi give besked.
}
?>
Meget simpel kode :)..
Nu mangler vi kun 2 ting! Papirkurv.php og svar.php :)
Så er vi snart færdige. Som sagt så er forklaringen inde i koden.
Vi laver nu papirkurv.php
<?
session_start(); //Starter vores sessions $_SESSION['brugernavn'] og $_SESSION['loggetind'] så de kan bruges.
include("config.php"); //Inkluderer config.php som etablerer forbindelse til databasen for os.
if($_SESSION['loggetind'] == "true") //Er brugeren logget ind?
{ //Det er brugeren og man kan se indbakken og læse post.
print "<h1>Papirkurv</h1>"; //Udskriver en overskrift der hedder "Indbakke" uden "" selvfølgelig :P
$hent_beskeder = mysql_query("SELECT * FROM post WHERE til = '$_SESSION[brugernavn]' AND status = '3' ORDER BY id DESC")or die(mysql_error()); //Vi henter informationen fra databasen. Den hiver alle beskeder ud der er til brugeren der er logget ind, hvor statusen er 3 (Slettet)
$antal_beskeder = mysql_num_rows($hent_beskeder); //Tjekker om der er nogen beskeder i din papirkurv.
if($antal_beskeder == 0) //Variablen er lig med 0 og der er ingen beskeder
{
print "Der er ingen beskeder i din indbakke."; //Så det skriver vi
}
else //Variablen er ikke lig med 0 og vi kan vise beskederne.
{
while($beskeder = mysql_fetch_array($hent_beskeder)) //Laver en while så vi kan lave en liste over alle "brevene". Whilen indeholder som i kan se sætningen "$beskeder = mysql_fetch_array($hent_beskeder)" det betyder at imens den laver den variabel så vi kan bruge $beskeder[emne] osv så viser den beskederne.
{
print $beskeder['emne']." - Fra: ".$beskeder['fra']." ".$besked['dato']." <br>"; //Den udskriver det uden fed tekst. Den udskriver det samme.
} //Lukker vores while
}
}
else //Hvis brugeren ikke er logget ind.
{
print "Du er ikke logget ind!"; //Så vil vi give besked.
}
?>
What the heck. Lad os da bare lave svar.php
Også er vi færdige! :D
<?
session_start(); //Starter vores sessions $_SESSION['brugernavn'] og $_SESSION['loggetind'] så de kan bruges.
include("config.php"); //Inkluderer config.php som etablerer forbindelse til databasen for os.
if($_SESSION['loggetind'] == "true") //Er brugeren logget ind?
{ //Det er brugeren og man kan skrive en ny besked eller besvare.
print "<h1>Skriv besked</h1>"; //Udskriver en overskrift der hedder "Skriv besked" uden "" selvfølgelig :P
if($_GET['emne'] && $_GET['modtager']) //Hvis urlen ser sådan her ud svar.php?emne=ET EMNE&modtager=EN MODTAGER så bliver det emnet og modtageren medmindre det bliver ændret.
{
$get_emne = addslashes($_GET['emne']); //Vi får urlen og vi gemmer infoen i disse variabler.
$get_modtager = addslashes($_GET['modtager']);
}
else //Vi får ikke infoen
{
$get_emne = ""; //Og variablerne er nu tomme.
$get_modtager = "";
}
if($_POST['send']) //Tjekker om der er trykket på knappen Send
{ //Det er der og vi sender beskeden videre
$from = $_SESSION['brugernavn']; //Laver en variabel der hedder from, der indeholder brugerens brugernavn.
$besked = addslashes($_POST['besked']); //Laver en variabel med beskeden, grunden til jeg bruger addslashes er så man ikke kan se det i URLen, og det er mere sikkert.
$emne = addslashes($_POST['emne']); //Laver en variabel med emnet. Jeg bruger igen addslashes
$til = addslashes($_POST['til']); //Laver en variabel med hvem den er til
if(empty($besked)) //Er beskeden tom?
{
print "Du har ikke skrevet en besked."; //Ja.
}
elseif(empty($emne)) //Nej.. Men er emnet tomt?
{
print "Du har ikke skrevet et emne."; //Ja, og vi skriver det.
}
elseif(empty($til)) //Nej, men er modtageren angivet?
{
print "Du har ikke skrevet en modtager."; //Nej, derfor skriver vi det.
}
else //Der er intet ivejen og vi sender beskeden
{
mysql_query("INSERT INTO post (fra, til, emne, besked, dato)VALUES('$from', '$til', '$emne', '$besked', now())")or die(mysql_error()); //Vi indsætter beskeden. Læg mærke til at jeg ikke sætter ' ' rundt om now(), grunden er at hvis der var det ville vi få en fejl.
}
}
print "<form action='#' method='post'>
<b>Emne:</b> <input type='text' name='emne' value='".$get_emne."'><br>
<b>Modtager:</b> <input type='text' name='til' value='".$get_modtager."'><br>
<b>Besked:</b><br>
<textarea name='besked'></textarea><br>
<input type='submit' name='send' value='Send'>"; //Vi udskriver en form. Formen har 2 variabler som vi lavede ovenover.
}
else //Hvis brugeren ikke er logget ind.
{
print "Du er ikke logget ind!"; //Så vil vi give besked.
}
?>
Så er vi færdige!
Du har nu et postsystem. Det er ikke testet så der kan være fejl! Derfor har rowl et forum og et postsystem :).
Du kan bygge videre på det hvis du vil. Jeg tænkte på med hensyn til modtager, at den skulle tjekkes om den eksisterer. Det kunne jeg jo så ikke da jeg ikke kender jeres tabeller. Om den hedder brugere eller users. Om det hedder brugernavn eller username.
Så det kan i selv tilføje :P. Der er ikke links, altså en navigation. Men det tror jeg godt i selv kan klare :).
Jeg håber i kan bruge det. Over & Out
***Jeg indsender det som download hvis nogen har problemer. Sidst redigeret 17:38 26/01/2009 |
Oprettet af:
PHP
Point modtaget: 100
Rate:
16:16 26/01/2009
|
Kommentarer
Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
|
Fortæl lidt mere om, hvilke metoder du bruger, og hvorfor præcis det du har programmeret, er smart. |
18:21 26/01/2009
|
|
jeg kan ikke få det til at virke :( |
Oprettet af:
kristianandersen
20:17 26/01/2009
|
|
Bedre forklaring.. Og så er der rimelig meget kode. |
16:55 31/01/2009
|
Synes det er super cool du gider at bruge tid på at lave en så lang artikle, super fedt, fortsæt endelig med det...
dog synes jeg ikke det er særlig fedt at du ikke har testet det da det virker hul i hovedet at du så har givet dig tid til at lave den.. jeg ved at folk skal lærer af den her artikle, men de kommer ikke langt hvis der er så mange fejl i det at det halve kunne være..
men igen super fedt du gider at bruge tid på det.. :D |
02:02 20/07/2009
|
|
Det virker ikke. |
22:34 07/05/2010
|
Hvad skal jeg gøre hvis jeg har $_SESSION['username']; og $_SESSION['login'];
Skal jeg. Så ændre alle session til det? Sidst redigeret 13:09 04/08/2011 |
13:03 04/08/2011
|
Ved godt det er lang tid siden den er oprettet men.
Din connect.php er MEGET USIKKER!
Du skal have <?php og ?> rundt om, ellers kan folk se dine information!
Der var rigtig mange fejl.
Hvorfor ikke bare slette beskeden hvis folk har trykket "slet" istedet for at give den et id 3? |
22:22 02/01/2012
|
|
Ved godt det er lang tid siden den er oprettet men.
Din connect.php er MEGET USIKKER!
Du skal have <?php og ?> rundt om, ellers kan folk se dine information!
Der var rigtig mange fejl.
Hvorfor ikke bare slette beskeden hvis folk har trykket "slet" istedet for at give den et id 3?
Fordi lige nu flyttes den til parpirkurven når man klikker "Slet" :) |
17:22 04/01/2012
|
Du skal være oprettet og logget ind for at kommentere en artikel
|