PHP ile mysql de DB işlemleri ile ilgili soru.

Başlatan ecarpar, 27 Haziran 2011 - 15:25:13

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

ecarpar

Basit düzeyde bir html sayfa oluşturucak bir php yapayım dedim kendimi sınamak için.

Yalnız data base ve tablolarıda sistem üzerinden oluşturucak yani bir çeşit setup'u olucak

Şİmdi bunu için algoritmaya ihtiyacım var tam mantığını kuramıyorum yardımlarınızı bekliyorum,


1. My sql e balanılıcak
2. DB formdan gelen veri ile oluşturulucak
3. Oluşturulan DB de tablo oluşturulucak
4. Tabloda Alanlar oluşturulucak.

buraya kadar tamam manuel bir şekilde bu kısmı yaptım. Mqsql e bağlanıp istediğim isimde ve içinde istediğim tablolar olan bir DB oluşturdum.

Şİmdi bu db ye veri eklemem gerekli ve sornasındada o verileri çekmem gerekli, fakat sorunum burada başlıyor veriyi xml olarakmı oluşturduktan sonramı okuyayım yoksa doğrudan DB denmi okuyayım?

Daha sonra verileri silmek gerekir ise Db de sıralama değişirmi ? Mİsal haber sitesi olduğunu düşünürsek ilk haberi sildiğimde ikinci haber birincinin yerine geçermi ki geçmesini isterim.

oluşabilicek olayların bir senaryosunu oluşturmaya çalışıyorum işin bu kısmı galiba kod yazmaktan daha zor :)  bunu anladım, flash olsaydıbenim için dah kolay olurdu işim doğrusu ama html ve php ile yapıcam inad ettim :)
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

6ng4n

Xml ile veritabanı alakasını çözemedim verileri xmlden mi okuyorsunuz? Haber sitesi senaryonsundan gidersek mysqle tarih saat bilgisi ile haber kaydedip tarih zamana göre ters sıralarsanız sql ile silinenlerin yerini sıralamada ondan sonrakiler alır

ecarpar

#2
Haber sitesi üzerinden gitmeyelim :)

o sadece sıralama için örnek olabilir diye düşünmüştüm fakat olamazmış siz tarih saat i söyleyince fark ettim.

verileri nereden okuyacağımın kararını vermiş değilim henüz işte sorulardan biriside bu ama cümle kurup sormayı becerememişim :)

diyelim tablom var oluşturdum

yazılar adlı tablomdaki verileri  sitemde  yayınlıyacağım, bir yazıyı yayınlamak için neler gerekir ?
1. Yazının kendisi
2. yazının ön izlemesi 40 - 50 karakterlik bir kısmı
3. yazının sayfa linki.

BU 3 ü hatalıda olabilir bu kısmı ve xml denmi yoksa db denmi okumam gerektiğini çözemiyorum şu an .

Mesela mysql de oluşturulmuş haberin linkine tıklandığında nerden neyin nasıl geleceğine ne yardımı ile karar vermeliyim? İD mi oluşturmalı acaba ?
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

6ng4n

id oluşturmak en mantıklı çözüm.
ayrıca yaznının linkini içeren bir alana ihtiyacınız yok tabloda
şöyle ki
listele.php bizim listelem sayfamız olsun

<?
//mysqle baglan verileri çek
$id=dbdenokunandeger;
$ozet=dbdenokunandeger2;
?>
...
<? echo $ozet ?>
<a href='oku.php?id=<? echo $id;?>tıklayın</a>
...




oku.php ise yazıyı okuyan sayfa

<?
$id=$_GET['id'];
//mysqle bağlan db seç SELECT yazininkendisi FROM WHERE id=$id ile gelen veriyi çek
$yazi=okunandeger;

?>
...
içerik bölümü :
<? echo $yazi; ?>


tabloyu da
id, yaziminkensisi, özet olarak biçimlendirebilirsiniz

ecarpar

#4
SÜper yazı linkine ihtiyaç olmayışı çok iyi oldu, ID den doğrudan yazıya ulaşabiliyorum demekki hmm iyi fikir oldu bak bu ekstra bir alandan kurtulmuş oldum, hemde tek tek link oluşturma derdimde kalmamış oldu.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 27 Haziran 2011 - 23:53:23

Karşıma çıkan şeye bak :)

Db tamam
tablo 1 tamam
tablo 2 yi yapamıyorum?

Yapmaya çalıştığım şey kullanıcının daha önce giröiş olduğu bilgiler ile yeniden bir tablo oluşturmak.
mysql_query($ornek,$dbaglanti);
mysql_query($ornek_iki,$dbaglanti);
şeklinde iki sefer yollamayı denedim ama olmadı bunun doğru olmadığını tahmin ediyorum artık :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 28 Haziran 2011 - 15:16:10

Farklı bir şekilde sorayım.
Kullanıcıdan setup da localhost bilgilerini istedim, ilk tablomu oluşturdum fakat ikinci bir tabloyu oluşturmak için tamamlanan sayfa içinden yönlendirdiğim sayfa mysql bağlantı hatası veriyor hata kullanıcı adı ve şifresi yanlış sesion denedim ama nedense 3. bir sayfaya gitmedi sesion ile yolladığım değişkenler.
Bunu yapmak için nasıl bir yol izlemeliyim.
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

6ng4n

kullanıcıyı nasıl oluşturuyosunuz? ayrıca her sayfada mutlaka mysql_connect(); demeniz lazım.
session_start(); da sayfa başı zorunlulğu var ilk kod <? session_start(); ?> olmalı
echo mysql_error(); çıktısını alabilir miyiz daha ayrıntılı hata bilgileri lazım?

canosayan

sanki sizin biraz kafanız karışmış. olayları bir kaç parçaya bölelim.

Şimdi veritabanı ve phpyi iki ayrı öğe olarak düşünün. tablonuzu phpmyadmin gibi bir araçla oluşturun hatta deneme verisi girin.
diğer tarafta ise php ile yapacaklarınızı düşünün. link yada karakter kısıtlama(en azından şimdilik) sadece php tarafından uğraşacağınız şeyler.

php ve mysqli şu şekilde düşünün. ikisi farklı iki tepe ve aralarında bir köprü var. siz sorgularınızla bu aradaki köprüden veri taşıyacaksınız.

session kısmına gelince buna veritabanı süresince ihtiyacınız olmayacak. aynı anda değil paralel bir şeylerde öğrenmeye çalışın.

ufak bir tavsiyede bulunayım. bence önce veritabanı sistematiği nasıl işliyor bunu öğrenin. veri tipleri, ilişkili tablolar gibi kavramları araştırın. bu yapıları bilmeden elde edeceğiniz yapı fazlasıyla hantal olacaktır.
Chmod bizim işimiz.

ecarpar

#7
canosayan cevabın için teşekkür ederim, zaten konuyu başlatma amacımda şu söylediklerin içindir, PHP kod bir şekilde yazılır internet kaynak dolu biraz kod bilgisi ve yılmayan bir merak ile gerekli kodlar bulunup yapılır, bu keisnlikle sorun değil, (Yazının sonunda bulduğum yöntemi anlatacağım)

Ozaman konuyu sıfırlıyalım ve ben en baştan ne yapmaya çalıştığımı anlatayım,

data base üzerinden verileri okuyarak sayfa oluşturucam, Konu budenli basit :)

nelere ihtiyacım var (kodlama bilgisi dışında mantığı, algoritması nasıl kurulur bu tip bir sistemin?)
Kaldığım nokta aslında burası,

Buyrun buda ikinci bir tabloyu oluşturma yöntemim. Elbette bir form sayfasından kullanıcıdan gerekli verileri istedikten sonra bu sayfa çalıştırılıyor.


<?

$user = $_POST["user"];
$pass =  $_POST["pass"];

$baglanti = mysql_connect('localhost', $user, $pass);
if (!$baglanti) {
    die("MySQL bağlantısı sağlanamadı");
}
$sql = 'CREATE DATABASE Yazilar';

if (mysql_query($sql, $baglanti)) {

//önce db ye bağlanalım.

mysql_select_db("Yazilar", $baglanti);
//veri tabanı oluşturuldu ise içine tabloları oluşturmalı.


//burada bir tablo daha oluşturup oradanda kullanıcı girişini kontrol etmek lazım

$sqlim = "CREATE TABLE haberler
(
YaziId INT(50) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (YaziId),
icerik text(500),
link text(500),
Baslik text (500),
resim text (500)
)";
/*
mysql_query($sqlim,$baglanti);

Kullanıcılar içinde bir tablo gerekli
$sqlim_iki = "CREATE TABLE kullanicilar
(
UserId INT(50) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserId),
UserName varchar(25),
Name varchar(25),
sifre varchar (25),
mail varchar (30)
)";

mysql_query($sqlim_iki ,$baglanti);
// her nedense sırası ile yollamama rağmen sadece ilk yolladığım tablo oluşuyor ?

*/
//değişken ile kontrol edelim ozaman.
$yukle = mysql_query($sqlim,$baglanti);
if ($yukle) {

$sqlim_Kullanici_Tablo = "CREATE TABLE kullanicilar
(
UserId INT(50) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserId),
UserName varchar(25),
Name varchar(25),
sifre varchar (25),
mail varchar (30)
)";
$yukle = mysql_query($sqlim_Kullanici_Tablo ,$baglanti);

echo 'Olmuş bu artık2'. '<br>';
} else {echo 'Tablo var ama neden göremedik ?';}
//mysql_close($baglanti);
//sesion başlattık


   echo 'İşlem tamamlandı <a href="uyeleriOlustur.php">Buradan</a> devam edebilirsiniz.';


echo "<br> sesion nerde : " . $_SESSION['User'];
echo "<br> Sesion nerede : " . $_SESSION['Pass'];
}
else
{
    echo "hata oluştu";
}
//MySQL bağlantısını kapat
/*
eğer dil kodlamasında sorun çıkarsa bu kısmı açarsın

setlocale(LC_COLLATE, 'turkish');
mysql_query("SET NAMES 'latin5'");
*/

?>



Buradan sonrasını üstadların okumasına gerek yok : Belki sorunu merak eden birileri olursa diye ufak bir açıklama yazayım dedim.

Data Base oluşturulduktan sonra tablo ekleme kodları hep aynı olduğu için öncelikle ikisini sırayla oluşturayım dedim ve ilk veriyi oluşturup yolladıktan hemen sonra ikincisini de yolladım, fakat  sadece ilk tablo oluştu bu durumda benim ilk tablonun oluşup oluşmadığını bilmem gerekliydi bende
mysql_query($sqlim,$baglanti); şeklinde doğrudan daldığım oluşturma işlemini kontrole debilmek amaçlı bir değişkene atıyıp sonrada oluşup oluşmadığını kontrol ettim.
$yukle = mysql_query($sqlim,$baglanti); şeklinde bir değişkene aldım ve if ile kontrole ttim buna göre eğer ilk oluşmasını istediğim tablo oluşmuş ise bir diğeride oluşucak.. Mantık hatalı olabilir, tam emin değilim internetteki serverde çalışmaya bilir sadece local host üzerinde denedim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 29 Haziran 2011 - 13:47:39


Al işte bir sorun daha,
Kullanıcı giriş  yaparken mysql den kontrol edeceksek eğer ana kullanıcının bilgilerini bir yerde tutmamız gerekliymiş yoksa mysql e sorgu felan atmaıyıoruz şifre olmadığı için elimize Bende eskiden kullanmış olduğum bir olayı deniyorum, kullanıcıya en başa sorduğum bilgileri işlemler tamamlanırsa bir yerde tutuyorum adınıda php yapıyorumki okunamasın :) Mantık doğrumudur ?

$MySqlUserName = '$MySqlUserName';
$MySqlPass = '$MySqlPass ';
$mysqlConnection =
"<?
$MySqlUserName = $user ;
$MySqlPass = $pass ;
?>";

$yaz=fopen("../MysqlConnection.php", "w"); //en başta belirlediğimiz isimde bir dosya yaratıyoruz.
fwrite($yaz,$mysqlConnection);   //veritabanından gelen bilgileri açtığımız dosyaya yazdırıyoruz.
fclose($yaz);   //yazma işlemini kapatıyoruz.




Kod istediğim gibi bir php dosyasına istediğim isimlerde istediğim bilgileri yazıyor bu sayede connection yapacağım yerlerin tümüne iclude edeceğim bu sayfayı. Uygunmudur Doğru bir şekildemi düşünmüşüm.?
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

6ng4n


<?

$user = "testuser";
$pass =  "testpass";

$baglanti = mysql_connect('localhost', $user, $pass);
if (!$baglanti) {
    die("MySQL bağlantısı sağlanamadı");
}
$sql = 'CREATE DATABASE Yazilar';
if(mysql_error()!="") echo "4";
if (mysql_query($sql, $baglanti)) {

//önce db ye bağlanalım.

mysql_select_db("Yazilar", $baglanti);
//veri tabanı oluşturuldu ise içine tabloları oluşturmalı.


//burada bir tablo daha oluşturup oradanda kullanıcı girişini kontrol etmek lazım

$sqlim = "CREATE TABLE haberler
(
YaziId INT(50) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (YaziId),
icerik text(500),
link text(500),
Baslik text (500),
resim text (500)
)";

mysql_query($sqlim,$baglanti);
if(mysql_error()!="") echo "2";
//Kullanıcılar içinde bir tablo gerekli
$sqlim_iki = "CREATE TABLE kullanicilar
(
UserId INT(50) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserId),
UserName varchar(25),
Name varchar(25),
sifre varchar (25),
mail varchar (30)
)";

mysql_query($sqlim_iki ,$baglanti);
if(mysql_error()!="") echo "3";
// her nedense sırası ile yollamama rağmen sadece ilk yolladığım tablo oluşuyor ?

}

mysql_close($baglanti);

?>


şu haliyle yazınızdaki kod çalışıyor
$_POST[] ile gelen veriyi kontrol ettiniz mi
ayrıca $_POST[] ile gelen verinin başına (string) eklerseniz daha iyi olur sanırım
yani $pass=(string)$_POST['pass'];
çünkü normal sayı olarak mysql kabul etmiyor parolanız sadece sayıysa sayı oalark girilir
mysql sunucunuzu da kontrol etmenizi öneririm.

$MySqlUserName = '$MySqlUserName';
$MySqlPass = '$MySqlPass ';


$mysqlConnection =
            "<?
            $MySqlUserName = $user ;
            $MySqlPass = $pass ;             
            ?>";
şeklinde değişkeni kendi değerine yazdırısınız

yani string bir ifade içinde $ kullanırsanız değişken çağrısı yaparsınız kaçış ifadesi kullanın \$ olarak yoksa $MySqlUserName değişkeni çağrılır ve veri yazılır yerine

canosayan

şimdi olaya bir bakalım.
$sql = 'CREATE DATABASE Yazilar';

şunu kavrayalım. veritabanı oluşturmak pek programınızın çalışması süresince olacak bir şey değildir. aynı şekilde tablo oluşturmakta. bunun için php ile uğraşıp yazmanıza gerek yok. hani sorun bende olabilir ama neden post ile gönderdiğiniz veriler ile veritabanına bağlanıyorsunuz çözemedim.

öncelikle bir mysql veritabanı yönetebileceğini bir araç seçin. mesela phpmyadmin.
Bu araç ile istediğinz veritabanını ve tabloları oluşturun. mesela sizin örneğinizde kullanıcı ve yazılar tablosu olsun. eğer başka bir tablonuz yoksa create ile işiniz burada bitti demektir. aslında bu noktaya kadar veri tanımla dili kullandınız.

bu noktadan sonra elinizde içinde gerekli tabloları barındıran bir veritabanı, sunucu, kullanıcı adı ve şifresi var. bundan sonra bu veritabanında veri alıp yazacaksınız. tekrar tablo tanımlamayacaksınız. örneğin.

//veritabanına bağlanın
mysql_connect("localhost","user","pass");
//doğru veritabanını seçin.
mysql_select_db("veritabanı");

//şimdi veri sorgulamaya geldi sıra
$sorgu=mysql_query("SELECT * FROM tablonuz");
while($tek=musql_fetch_array($sorgu))
{
    echo $tek["sutunadi"];
}

//eğer veri ekleyeceksek
mysql_query("Insert Into tablo (sutun1,sutun2) VALUES (deger1,deger2)");


genel olarak baktığımızda biraz daha kaynaklara göz atmalısınız. ğer ingilizceniz varsa http://www.w3schools.com/php/php_mysql_intro.asp adresini öneririm.
Chmod bizim işimiz.

ecarpar

setup yapmaya çalışıyorum hani joomla da vs varya özendim bakalım oluyormu diye ve lakin yaptım o kısmını en azından localde sorunsuz çalışıyor (Umarım siteye upload ettiğimdede çalışıcak),
şu an üye girişinide yaptım, db den üyeyi kontrol ediyorum, üye giriş yaptıktan sonra yönlendirdiğim sayfaya üyenin giriş yapıp yapmadığının kontrolünü eklemeye çalışıyorum, malum herhangi birisi doğrudan siteye bilmemne.com/klasöradi/girikYapildi.php me doğrudan ulaşmaya çalışabilir , işte bu yüzden üye girişinin olup olmadığına dair bir kontrol koymaya çalışıyorum, Malum zaman az akşamları evde 1-2 saat uğraşabiliyorum hal böyle olunca yavaş oluyor.

canosayan amacım kendime göre yeni şeyler yapıp biraz olsun gelişebilmek yoksa myadminden güçlü bir arayüz yapabileceğimi hiç sanmıyorum :).

Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

6ng4n

#11
Alıntı Yapşu an üye girişinide yaptım, db den üyeyi kontrol ediyorum, üye giriş yaptıktan sonra yönlendirdiğim sayfaya üyenin giriş yapıp yapmadığının kontrolünü eklemeye çalışıyorum, malum herhangi birisi doğrudan siteye bilmemne.com/klasöradi/girikYapildi.php

session ya da cookie kullanın
en basiti session
atıyorum giris.php:

<?
session_start();
if(kullanici_adi_ve_parola_dogru)
{
$_SESSION['oturum_acik']=true;
echo "oturum aç girisYapildi.php sayfasına yönlendir";
}
else
{
echo "kullanıcı adı ve parola yanlış uyarı göster vs.";
}
?>


girisYapildi.php:

<?
session_start();
if($_SESSION['oturum_acik'])
{
echo "kullanıcı giriş yapmış sayfayı göster";

}
else
{
echo "giriş yapılmamış uyarı gönder ve ya giriş formu yarat";
}


1 sayfadaki $_SESSION değişken kullanıcı pencereyi kapatmadıkça veya zaman aşımı olmadıkça session_start(); verilen sayfalarda kullanılabilir olacaktır.

süreyi session_cache_expire ile oyanayabiliyorsunuz
http://www.php.net/manual/tr/function.session-cache-expire.php
buarada ayrıntılı bilgi var

ecarpar

6ng4n  Teşekürler session ile sorunumu giderdim fakat işleyiş benim düşündüğümden çok farklı oldu :) data base ve tablo kısmı hariç üye kısmını baya bi değiştirdim son hali ile ilk hali arasında hiç bir benzerlik yok :) ..neyse bunuda yaptım,


Şifreli sayfaya girişi kontrol e ttiğim kodlar.
eğer işlem tamam ise bir sayfa çağırıyor değil ise login olunamadı diye bir sayfa çağırıyor.

session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
include ("LoginOlamadi.php");

}
else {
include ("loginOk.php");
}
?>



BU günlük olmuş bir şey ile konuyu kapatıyorum fakat çalışmalara yarın devam edeceğim

bundan sorna kalan işlerim.

Kullanıcının bir başka kullanıcı ekliye bilmesi ve silebilmesi gerekiyor, birde kullanıcının siteye eklemek için yazıları yüklemesi gerekiyor tabi bunları data base üzerinden yapıcak Baklalım onu yaparken ne sorunlar çıkıcak :). arkası yarın gibi oldu :)
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.