Evet arkadaşlar bu seferki yazımda daha önce Jquery tabs ile nasıl haber manşeti vitrin yapımını göstermiştim şimdiki yazımda ise bu haberleri admin panel ile nasıl değiştiririz sileriz ekleriz onu anlatacağım.
şimdi kodlama haritamızı şöyle bi gözümüzün önünde canlandıralım. daha iyisi bi kalem kağıt alıp. sıra ile yazalım.
ben ne zaman bir site yapsam bunu hep bir tiyatro oyunu olarak ele alırım.
oyuncular, konu mankenleri, mekanlar olarak düşünürüm. sizede bu yazımda öyle anlatacağım.
şimdi. kullanıcı giriş yapılmış sayfamız olan main.php sayfamızı kral olarak düşünelim.
main.php - kral (her şeye yetkisi var)
haber ekle/sil/düzenle
firma ekle/sil/düzenle (bu moduller kralın uşakları olsun kralın emirleri ile çalışan)
login.php (yani giriş sayfamızıda kralın tacı olsun. taçsız kralın hiç bir yetkisi olmaz)
1. adım krala tacı takma ( yani sitemize yönetici girişi yapma)
index.php sayfamızın içeriği buradadır.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
|
<? |
|
session_start(); //php sezonlar ile kullanicinin giris yapip yapmadigini anlar buna gore tekrar giris yapmasina gerek varmi yokmu ona bakar gerek yok ise gerekli sayfaya yonlendirir
|
|
error_reporting(1); //sayfamizda hatalari gostersin mi gostermesinmi onu ayarlariz. sitemizi gelistirme asamasinda bize çok yardımı olur. şimdilik 1 yani açık olsun
|
|
if($_SESSION["admin"] and $_COOKIE['cook']){
|
|
header("location:main.php");
|
//burada ise admin sezonu tanımlanmış ve cook çerezi browser a atılmış ise yani giriş yapılmış ise main.php kralın sayfasına yönlendirme yapıyoruz.
|
} ?>
|
|
<!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>admin giriş</title>
|
</head>
|
|
<body>
|
<form id="form1" name="form1" method="post" action="login.php">
|
<p>
|
<label>Username |
<input type="text" name="user" id="user" />
|
</label>
|
</p>
|
<p>
|
<label>Password |
<input type="text" name="pass" id="pass" />
|
</label>
|
</p>
|
<p>
|
<label>
|
<input type="submit" name="button" id="button" value="Войти" />
|
</label>
|
</p>
|
</form>
|
<div><? if (isset($_GET['action']) && $_GET['action'] == 'error')
|
|
echo 'error'; //kullanıcı veya şifre hatalı ise bize error diye sayfaya yazacak.
|
|
|
?></div>
|
</body>
|
</html> |
|
2. aşama giriş yapılan veriler doğrumu login.php ile ona bakacağız.
login.php sayfamızında içeriği burada.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
<?
|
$user = 0; //sql injectiondan kacmak icin basit bir yoldur bos bir kullanici adi vs de yollansa 0 a esitleriz ki . sonra htmlescape ile falan uğraşmayalım.
|
$pass1 = 0;
|
$user = $_POST['user'];// formdan gonderilen user verisi
|
$pass1 = $_POST['pass'];// formdan gonderilen pass verisi
|
|
if ( $user == "admin" and $pass1 == "123456") |
|
//eger user admine pass da 123456 ya eşit ise aşağıdakileri yapacak.
|
{
|
|
ob_start();//buna kafa yormayın bu benim projenin gelecekte yapacağım bir şey si ile ilgili.
|
|
session_start();//sezonu başlatıyoruz.
|
include 'functions.php';// functions.php dosyamızdan rasgele en az 10 en fazla 40 karakterli rakamlar oluşturacağız.
|
$_SESSION["admin"] = $user; //admin sezonumuzu kullanıcı admıza ekledik.
|
$ranx = genRandStr(10, 40) ;// bu degisken olusturduğumuz 40 karakterli rakam oldu
|
|
setcookie("cook", $ranx, time()+3600); // ve cook isimli cereze o 40 karakterli rakamı atadık ve
|
|
header('location:main.php');// main kral ın sayfasına yönlendirme yaptık.
|
}
|
//eğer şifremiz vs hatalı ise index sayfamız geri dönüş yaptık.
|
else {
|
header('location:index.php?action=error');
|
|
|
}
|
|
|
?> |
|
3. adım ise kralın sayfası emirler yağdıracağı tahtına oturtturduk kralımızı.
bu sayfa main.php
tabi kralımızın verdiği emirleri uşakların yapması gerekiyor bu nedenle uşaklara konuşmayı öğretmek zorundayız. uşaklar veri tabanı ile konuşacaklarki veritabanımızdaki bilgiler değişsin.
bunun için database e bağlanmaları lazım. bu bağlantı dosyamızda
dbb.php dir.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
<?php
|
$con = mysql_connect("localhost","root","");
|
if (!$con)
|
{
|
die('Could not connect: ' . mysql_error());
|
}
|
|
|
mysql_select_db("db", $con);
|
mysql_query("SET CHARACTER SET utf8"); //querylerizin karakter setleri
|
mysql_query("SET NAMES UTF8");// karşılaştırma karakteri tablo türü latin1 ama içeriği utf8 ise yukarıdaki 2 satır ile utf8 tipinde veriyi düzgün olarak göstermeye yarar.
|
?> |
|
main.php içeriği.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
|
<?
|
|
session_start();
|
|
error_reporting(0);
|
|
if(!$_SESSION["admin"]){
|
|
header("location:login.php");
|
|
} ?>
|
|
|
<?php include 'head.php';?>
|
|
<?php |
include_once ('dbb.php');
|
if(isset($_GET['module']) && file_exists('./'.$_GET['module'].'.php'))
|
{
|
// include the module eg news.php
|
include $_GET['module'] . '.php'; // eger uşaklara görev verilmişse gerekli modül olan uşağı çağırır
|
}
|
else {
|
//yoksa haberler bölümünden hangi haberler var onu gösterir
|
$habers = mysql_query("SELECT * FROM Habers");
|
|
$habercount = mysql_query("select id FROM Habers |
");
|
$rows2 = mysql_num_rows($habercount);
|
|
?>
|
|
|
Haber Sayısı : <? echo $rows2; ?>
|
|
|
<table width="900" cellpadding="0" cellspacing="0" style="border: 2px solid navy">
|
<th colspan="3">Haberler</th> <tr>
|
<td><table width="100%" border="0">
|
<? while($row = mysql_fetch_array($habers))
|
{ ?>
|
//alt taraftakiler kısayoldan haber düzenle sil bölümüdür. modül içerisinden de halledilebilir. |
|
<tr id="haberrow">
|
<td style="border-bottom:1px ridge #966;" width="52%"><?=$row['title']?></td>
|
<td style="border-bottom:1px ridge #966;" width="16%"><a href="main.php?module=newsduzenle&id=<?=$row['id']?>">Düzenle</a></td>
|
<td style="border-bottom:1px ridge #966;"width="17%"><a href="main.php?module=news&action=silmek&id=<?=$row['id']?>">Sil</a></td>
|
<td style="border-bottom:1px ridge #966;" width="15%"><? if($row['vitrin'] == 1) { echo '<span id="vitrin">Manşette</span>';echo '<br />';}if($row['yayin'] == 1) { echo '<span id="yayin"> Yayında</span>';}?></td>
|
</tr>
|
|
|
<? } ?>
|
</table>
|
</td>
|
</tr>
|
</table>
|
|
|
|
|
|
|
|
|
|
|
<? }?>
|
<? include 'foot.php';?> |
|
ve genel olarak panelimizin görüntüsü aşağıdaki gibi oldu.
sonraki adım yeni haber ekleme
haber içeriğini zengin içerikli yapmak için tinymce yi kullanacağız. zaten index.phpnin üst bölümü olan head.php içine gerekli kodları gömmüştüm. incelemenizi tavsiye ederim.
hem türkçe hem rusça içerik olacağı için bu projemde 2 tane textarea 2 tane text field vardır formda.ve haberin bir manşet büyük resmi birde haber linkine gidildiğinde gösterilecek olan ufak resmi vardır. haber yayında mı manşettemi seçenekleride haberi yayın ve/veya manşette olacak şekilde ayarlamamıza olanak sağlayacak.
genel görünüm ve sayfa kodları aşağıdadır.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
|
<? |
session_start();
|
|
|
|
if(!$_SESSION["admin"] or !$_COOKIE['cook']){
|
|
header("location:login.php");
|
|
} ?>
|
|
|
|
<?
|
include 'dbb.php';
|
|
|
|
?>
|
|
|
|
|
<h3>Haber Ekle</h3>
|
<form action="main.php?module=news&action=newsekle" method="post" enctype="multipart/form-data" class="niceform">
|
<fieldset>
|
<legend>Титль</legend>
|
|
<dl>
|
<dt>
|
<label for="title">Русский:</label></dt>
|
<dd><input type="text" name="title" size="80" maxlength="400" value="" /></dd>
|
</dl>
|
<dl>
|
<dt>
|
<label for="turkcebaslik">Турецкий:</label></dt>
|
<dd><input type="text" size="80" name="turkcebaslik" maxlength="400" value="" /></dd>
|
</dl>
|
|
|
</fieldset>
|
<fieldset>
|
<legend>Настройка |
</legend>
|
<dt> </dt>
|
<dd>
|
<input type="checkbox" name="yayin" id="interestsNews" value="1" />
|
<label for="interestsNews" class="opt">Опубликован</label>
|
<input type="checkbox" name="vitrin" id="interestsSports" value="1" />
|
<label for="interestsSports" class="opt">Витрина</label>
|
|
</dd>
|
</dl>
|
|
</fieldset>
|
<fieldset>
|
<legend>Cодержание</legend>
|
<dl>
|
<dt>
|
|
<label for="comments">Русский:</label></dt>
|
<dd>
|
<textarea id="elm1" name="content" rows="15" cols="80" style="width: 60%">
|
|
</textarea>
|
</dd>
|
<dt>
|
|
|
</dl>
|
<dl>
|
<dt>
|
|
<label for="comments">Turkce Metin</label></dt>
|
<dd>
|
<textarea id="elm2" name="turkcemetin" rows="15" cols="80" style="width: 60%">
|
|
</textarea>
|
</dd>
|
<dt>
|
|
|
</dl>
|
<dl>
|
<dt>
|
<label for="upload">Большой рисунок (420 x 280):</label></dt>
|
<dd><input type="file" name="bigresim" id="upload" /></dd>
|
</dl>
|
<dl>
|
<dt>
|
<label for="upload">Маленкий рисунок (200 x 200):</label></dt>
|
<dd><input type="file" name="smallresim" id="upload" /></dd>
|
</dl>
|
|
</fieldset>
|
<fieldset class="action">
|
<input type="submit" name="submit" id="submit" value="Отправить" />
|
</fieldset>
|
<input type="hidden" name="MAX_FILE_SIZE" value="300000000" />
|
</form> |
|
bu formu gönder dediğimizde. news isimli uşağın adamlarına gönderir ve veritabanımızda nasıl değişiklik olacağını gösterir.
veritabanında değişikliği nasıl yapacağız?
kodlar açıklamalı olarak aşağıda.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
|
<? |
|
session_start();
|
|
|
|
if(!$_SESSION["admin"] or !$_COOKIE['cook']){
|
//daha önce yazdığım gibi eğer sezon ve çerez yok ise login.php ye git.
|
//yani direk browsera module=newsekle?action=sil&id=1 yazıldığında giriş yapılmamış ise querynin çalışmaması için gerekli olan koddur yukarıda yazılan.
|
header("location:login.php");
|
|
} |
if(isset($_GET['action']))
|
{
|
//eylem nedir eğer newsekle ile haber ekliyor newsduzenle ise haber düzenliyor news sil ise haber siler
|
switch($_GET['action'])
|
{
|
|
|
case 'newsekle':
|
//$id = $_GET['id'];
|
include 'functions.php';
|
//print_r($_FILES);// formdan gönderilen dosyanın dizi verisidir kontrol amaçlı
|
//move_uploaded_file($_FILES["bigresim"]["tmp_name"],
|
// $_FILES["bigresim"]["name"]);
|
if (isset ($_FILES["bigresim"]) && $_FILES["bigresim"]["name"] != "" ){
|
//eger buyukresim verisi var ve buyukresimin bir dosya ismi boş değil ise. 10 40 arası karakterli bir kelime ve sayı karışımı olustur ve dosyanın ismini buna çevir. yani 2 tane aynı isimli dosya yüklenipte karışmasın diye.
|
$ran = genRandStr(10, 40) ;
|
$_FILES["bigresim"]["name"] = $ran.".jpg";
|
$resimbname=$_FILES["bigresim"]["name"];// buyukresimin ismini rastgele ürettiğimiz isme atadık ve images/news/ klasörü altına resmi yeni ismi ile taşıdık.
|
move_uploaded_file($_FILES["bigresim"]["tmp_name"],
|
"../images/news/".$_FILES["bigresim"]["name"]);
|
|
|
}
|
//altta ise ufak resim eğer ufak resim form verisi var ise yukaridaki işlemlerin aynısını bu seferde ufakresim icin uguladık.
|
if (isset ($_FILES["smallresim"]) && $_FILES["smallresim"]["name"] != "" ){
|
$ran = genRandStr(11, 40) ;
|
$_FILES["smallresim"]["name"] = $ran.".jpg";
|
$resimsname =$_FILES["smallresim"]["name"];
|
move_uploaded_file($_FILES["smallresim"]["tmp_name"],
|
"../images/news/".$_FILES["smallresim"]["name"]);
|
|
|
}
|
$title= $_POST['title'];//haber basligi
|
$content= $_POST['content'];//haber içeriği
|
$turkcebaslik= $_POST['turkcebaslik'];// turkçe haber basligi
|
$turkcemetin= $_POST['turkcemetin'];//turkçe haber içeriği
|
$vitrin = 0;// default olarak vitrinde değil
|
$yayin = 0;// default olarak yayında değil
|
if (isset ($_POST['vitrin']))
|
{
|
//eger formdan vitrinde seçeneği işaretlenmiş ise vitrine alıyoruz haberi
|
$vitrin= 1;
|
|
}
|
|
if (isset ($_POST['yayin']))
|
{
|
//eger formdan yayinda seçeneği işaretlenmiş ise yayına alıyoruz haberi
|
$yayin= 1;
|
|
}
|
//ve haberi veritabanımıza giriyoruz
|
$query="INSERT INTO habers (title, content, turkcebaslik, turkcemetin, big_resim, ufak_resim, yayin, vitrin) |
VALUES ('$title', '$content', '$turkcebaslik', '$turkcemetin', '$resimbname', '$resimsname', $yayin, $vitrin)";
|
mysql_query($query);
|
|
//haber girildikten sonra 3 saniye içinde javascript ile news modulunun sayfasına yönlendiriliyoruz.
|
js_redirect('main.php?module=newsduzenle',3);
|
echo '<pre>';
|
echo 'Haber eklendi yonlendiriliyorsunuz';
|
print "</pre>";
|
break;
|
|
case 'duzenlemek':
|
|
include 'functions.php';
|
//düzenlemek içinde yukarıdaki gibi aynı kodları kullanıyoruz bu sefer ise INSERT yerine UPDATE ile gerekli haberi düzenliyoruz.
|
|
//echo $_FILES['bigresim']['tmp_name'];
|
$id = $_GET['id'];
|
//print_r($_FILES);
|
//move_uploaded_file($_FILES["bigresim"]["tmp_name"],
|
// $_FILES["bigresim"]["name"]);
|
if (isset ($_FILES["bigresim"]) && $_FILES["bigresim"]["name"] != "" ){
|
$ran = genRandStr(10, 40) ;
|
$_FILES["bigresim"]["name"] = $ran.".jpg";
|
$resimbname=$_FILES["bigresim"]["name"];
|
if(move_uploaded_file($_FILES["bigresim"]["tmp_name"],
|
"../images/news/".$_FILES["bigresim"]["name"]));
|
$query="UPDATE habers SET big_resim = '$resimbname' WHERE id = $id ";
|
mysql_query($query) or die( "An error has ocured: " .mysql_error (). ":" .mysql_errno ());
|
|
}
|
if (isset ($_FILES["smallresim"]) && $_FILES["smallresim"]["name"] != "" ){
|
$ran = genRandStr(11, 40) ;
|
$_FILES["smallresim"]["name"] = $ran.".jpg";
|
$resimsname =$_FILES["smallresim"]["name"];
|
if(move_uploaded_file($_FILES["smallresim"]["tmp_name"],
|
"../images/news/".$_FILES["smallresim"]["name"]));
|
$query2="UPDATE habers SET ufak_resim = '$resimsname' WHERE id = $id ";
|
mysql_query($query2) or die( "An error has ocured: " .mysql_error (). ":" .mysql_errno ());
|
|
}
|
$title= $_POST['title'];
|
$content= $_POST['content'];
|
$turkcebaslik= $_POST['turkcebaslik'];
|
$turkcemetin= $_POST['turkcemetin'];
|
$vitrin = 0;
|
$yayin = 0;
|
if (isset ($_POST['vitrin']))
|
{
|
|
$vitrin= 1;
|
|
}
|
|
if (isset ($_POST['yayin']))
|
{
|
|
$yayin= 1;
|
|
}
|
$queryk="UPDATE habers SET title='$title',content='$content',turkcebaslik='$turkcebaslik',turkcemetin='$turkcemetin', vitrin=$vitrin, yayin=$yayin WHERE id=$id";
|
|
mysql_query($queryk);
|
js_redirect('main.php?module=newsduzenle',3);
|
echo '<pre>';
|
echo 'Haber Düzenlendi yönlendiriliyorsunuz';
|
print "</pre>";
|
|
break;
|
//haber silme bölümü DELETE ile siliyoruz isterseniz unlink komutu ile habere ait resimleride silebilirsiniz orası site kalmış.
|
case 'silmek':
|
mysql_query("DELETE FROM habers WHERE id=$_GET[id]");
|
js_redirect('main.php?module=newsduzenle',3);
|
echo '<pre>';
|
echo 'Haber Silindi yönlendiriliyorsunuz.';
|
print "</pre>";
|
break;
|
|
default:
|
|
break;
|
}}
|
|
?> |
|
bu projemde firmalar da var onlarında çalışma mantığı haberlerdeki gibidir. resimler hariç sadece form verileri yollar. geriye ne kaldı kraldan tacı almak yani çıkış yapmak
bunun içinde logout.php yani çıkış dosyamızı kullanacağız
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
|
<?php |
|
|
session_start();
|
include 'functions.php';
|
$_SESSION["admin"] = $user; |
$ranx = genRandStr(10, 40) ;
|
|
setcookie("cook", $ranx, time() - 3600);
|
session_unset();
|
session_destroy();//sezonumuzu yok ediyoruz . yeni bir cookie çerez oluşturup değerimizi -3600 vererek çerezimizi bitmiş gibi gösteriyoruz ve çerezde bitiyor index.php ye yönlendirince sezon ve çerez olmadığı için index.php de bizi login.php ye yönlendiriyor.
|
header('location:index.php');
|
?> |
|
mümkün olduğunca herkese anlatabilmek için basit olarak düz makarna kod şeklinde yazdım. php yi iyi bilen kullanıcılar class ve fonksiyon lar ile daha az kod ile buna benzer bir panel yazabilir. umarım yardımcı olabilmişimdir. aşağıda çalışan hali ile PHP ve SQL dosyalarını bulabilirsiniz.