t(>_<t)
Öğrenci
- Katılım
- 3 Ekim 2009
- Mesajlar
- 44
- Reaksiyon puanı
- 3
- Puanları
- 0
Merhaba;
Bütün gece oturdum php'de classlar ve mysql olayını kurcaladım. Sebebini çözemediğim çok garip bir noktaya takıldım. Yardımcı olursanız çok sevinirim.
Önce ne yaptığım :
MYSQL:
======
Accounts Tablosu : id,username,password
chkUser prosedürü :
getUserInfo prosedürü :
HTML:
=====
İçinde 2 Field'i olan bir form action'i do.php methodu post.
PHP :
====
SQL.php
Bu SQL.php yi kendim yarattım, bi class. Constructor a bağlantı parametrelerini yolluyorum. Bunun dışında 2 method tanımladım, bunlarlada yukarda bahsettiğim stored procedureleri çekiyorum.
do.php
Bu dosya formdan veriyi aliyor. Eğer kullanıcı 2 kutucuğuda doldurmuşsa;
sql objesi yaratıyor.
chkUser fonksiyonunu çağırıp, user|pass db de varmı kontrol ediyor.
eğer bu ikili varsa fonksiyon 1 dönüyor, yoksa 0 dönüyor.
eğer dönen sonuç 1 ise bu sefer, bu kullanıcının bilgilerine bakıyorum.
bunuda getUserInfo fonksiyonunu çağırıp yapıyorum.
buda kısaca select * from accounts where username = .. and password = ... sorgusunun sonucunu dönüyor.
şimdi sorunuma geleyim
do.php de sadece fonksiyonların bir tanesi çalişiyor
Mesela :
$s = new SQL("db_adresi","db_user","db_pass","db_adi"); tanımladıktan sonra
$s->chkUser($un,$pw) yi çağırırsam çalişiyor. fakat arkasından
$s->getUserInfo($un,$pw) yi çağırırsam çalışmıyor.
Aynı şekilde;
Önce
$s->getUserInfo($un,$pw) yi çağırırsam çalışıyor. fakat arkasından
$s->chkUser($un,$pw) yi çağırırsam bu sefer bu çalışmıyor
2 saattir bu niye oluyor diye kıvranırken bişeyi keşfettim.
SQL.php ye bi method eklersem eğer;
misal:
ve bu methodu 2. methodu çağırmadan önce çağırırsam , bu sefer istediğim gibi sonuç alıyorum yani
$s = new SQL(...)
$s->chkUser(...);
....
$s->set(...);
$s->getUserInfo();
Şimdi soru;
Ben bu class i oluşturduğumda;
bağlantı ayarlarını bi kere yaptığımda;
Veritabanıyla bir kere işlem yaptıktan sonra, niye bağlantı ayarları uçuyor, niye tekrar yapılandırmak zorundayım?
php ile mysql e diğer bağlanma şekillerini biliyorum,
mysql, mysqli_connect, ... o yüzden bu şekillerle dene diye tavsiye etmeyin lütfen, bu oop tarzi bağlanti olayini çok sevdim ben
Şimdiden teşekkürler (^^)
Bütün gece oturdum php'de classlar ve mysql olayını kurcaladım. Sebebini çözemediğim çok garip bir noktaya takıldım. Yardımcı olursanız çok sevinirim.
Önce ne yaptığım :
MYSQL:
======
Accounts Tablosu : id,username,password
chkUser prosedürü :
Kod:
select count(id) as cnt from accounts where username = UN and password = PW;
getUserInfo prosedürü :
Kod:
select * from accounts where username = UN and password = PW;
HTML:
=====
İçinde 2 Field'i olan bir form action'i do.php methodu post.
PHP :
====
SQL.php
Bu SQL.php yi kendim yarattım, bi class. Constructor a bağlantı parametrelerini yolluyorum. Bunun dışında 2 method tanımladım, bunlarlada yukarda bahsettiğim stored procedureleri çekiyorum.
PHP:
<?php
class SQL
{
private $sql;
private $h;
private $u;
private $p;
private $t;
function SQL($host, $un, $pw, $tbl) // constructor içine 4 parametre alıyor
{
$this->h = $host; // adres
$this->u = $un; // db_kullanici_adi
$this->p = $pw; // db_sifre
$this->t = $tbl; // db_adi
// mysqli olustur $this->sql e ata
$this->sql = new mysqli($this->h,$this->u,$this->p,$this->t);
}
// bunun ne oldugundan tam olarak emin degilim (^^)
function __destruct(){ }
// kendisine verilen $user, $pass parametreleriyle proseduru calistiriyor.
// outputu return ediyor
public function chkUser($user,$pass)
{
$result = $this->sql->query("call chkUser('".$user."','".$pass."')");
$cnt = $result->num_rows;
if ($cnt > 0) { $row = $result->fetch_object(); return $row; }
}
// kendisine verilen $user, $pass parametreleriyle proseduru calistiriyor
// outputu return ediyor
public function getUserInfo($user,$pass)
{
$result = $this->sql->query("call getUserInfo('".$user."','".$pass."')");
$cnt = $result->num_rows;
if ($cnt > 0) { while($row = $result->fetch_object()) { return $row; } }
}
}
?>
do.php
Bu dosya formdan veriyi aliyor. Eğer kullanıcı 2 kutucuğuda doldurmuşsa;
sql objesi yaratıyor.
chkUser fonksiyonunu çağırıp, user|pass db de varmı kontrol ediyor.
eğer bu ikili varsa fonksiyon 1 dönüyor, yoksa 0 dönüyor.
eğer dönen sonuç 1 ise bu sefer, bu kullanıcının bilgilerine bakıyorum.
bunuda getUserInfo fonksiyonunu çağırıp yapıyorum.
buda kısaca select * from accounts where username = .. and password = ... sorgusunun sonucunu dönüyor.
PHP:
$un = $_POST['username'];
$pw = $_POST['password'];
if ($un != "" && $pw != "")
{
$s = new SQL("db_adresi","db_user","db_pass","db_adi");
$tmp = $s->chkUser($un,$pw);
$res = $tmp->cnt;
if ($res == 1)
{
$nfo = $s->getUserInfo($un,$pw);
echo "Merhaba ".$nfo->ad." ".$nfo->soyad."<br>";
}
?>
şimdi sorunuma geleyim
do.php de sadece fonksiyonların bir tanesi çalişiyor
Mesela :
$s = new SQL("db_adresi","db_user","db_pass","db_adi"); tanımladıktan sonra
$s->chkUser($un,$pw) yi çağırırsam çalişiyor. fakat arkasından
$s->getUserInfo($un,$pw) yi çağırırsam çalışmıyor.
Aynı şekilde;
Önce
$s->getUserInfo($un,$pw) yi çağırırsam çalışıyor. fakat arkasından
$s->chkUser($un,$pw) yi çağırırsam bu sefer bu çalışmıyor
2 saattir bu niye oluyor diye kıvranırken bişeyi keşfettim.
SQL.php ye bi method eklersem eğer;
misal:
PHP:
function set($adres,$dbadi,$dbpass,$dbname)
{
$this->sql = new mysqli($adres,$dbadi, $dbpass, $dbname);
}
ve bu methodu 2. methodu çağırmadan önce çağırırsam , bu sefer istediğim gibi sonuç alıyorum yani
$s = new SQL(...)
$s->chkUser(...);
....
$s->set(...);
$s->getUserInfo();
Şimdi soru;
Ben bu class i oluşturduğumda;
bağlantı ayarlarını bi kere yaptığımda;
Veritabanıyla bir kere işlem yaptıktan sonra, niye bağlantı ayarları uçuyor, niye tekrar yapılandırmak zorundayım?
php ile mysql e diğer bağlanma şekillerini biliyorum,
mysql, mysqli_connect, ... o yüzden bu şekillerle dene diye tavsiye etmeyin lütfen, bu oop tarzi bağlanti olayini çok sevdim ben
Şimdiden teşekkürler (^^)