[ Paticik.com | Forum | Kullanici Sozlesmesi | Üye Ol ]
» Forum Gezgini ... Üye Ol / Giris Yap
FORUM.PATICIK.COM
[ FORUM ANASAYFA ]  

[ Yeni Konu ] [ Mesaj Yaz ]
bagli degilsiniz: | Giris Yap | Üye Ol |
|+ Paticik.com Forumları
|-- |+ Pati Tech / Programlama
|-- |-- |+ PHP soruları...
Yazar RSS Konu: PHP soruları {542}
  [ A ]
Üye
ID § 02 May 2017, 22:29    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Selamlar,

PHP hakkındaki sorularımı buradan sorayım istedim. Lafı dolandırmadan anlatayım;

Şimdi Windows sunucusundan kullanıcıları alıcam. (Active Directory var ama yönetimi yabancı bir firmada. ldap kullanarak bağlanmak sıkıntılı oldu biraz. Bende text dosyasına export etmelerini istiyorum. Düzenli olarak export yapacaklar istediğim şekilde.) Text dosyasına export yapılırken şu şekilde istedim;

isim|soyisim|email

bu üç sütun yetiyor bana. Şöyle bir şey yaptım;

$handle = @fopen("users.txt", "r");
while (!feof($handle))
{
    $buffer = fgets($handle, 4096); 
    list($name,$surname,$email)=explode("|",$buffer);

    $query = $db->insert('users')
    ->set(array(
         'name' => $name,
         'surname' => $surname,
         'email' => $email
    ));
    
}

if($query){
	echo 'veriler eklendi';
}

bu tayfunerbilen 'den basicdb sınıfını kullanıyorum. Verileri ekleme de sıkıntı yok. Lakin script her çalıştığında aynı verileri tekrar tekrar ekliyor. Kontrol kısmını nereye ve nasıl koyacağımı bilemedim.

Şimdilik soru bu :D bu script ilerledikçe takıldığım noktaları buradan sorarım artık.

AHAHAHAHAHAHAHA ok.
Üye
medal 1k medal 5k
ID § 02 May 2017, 22:31    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
$db->insert('users') satırından hemen once veritabanını sorgula, olmayan kayıtlar icin insert calıstır sadece.

bnet: bonesoul#2655
steam: raistlinthewiz
Üye
ID § 03 May 2017, 00:04    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
işte onun mantığını kuramadım. text'den gelen email 'i database de sorgulayıp if koyabilirim ama lakin nasıl devam edecek? Atıyorum;

if($email == $row['email']) {
    echo 'Bu kayıt mevcut';
} else {
    // insert kodu
}

fakat kayıt olduğunda insert etmeyecektir. Çok ahım şahım bir PHP bilgim yok smiling smiley

AHAHAHAHAHAHAHA ok.
Üye
medal 1k medal 5k
ID § 03 May 2017, 00:17    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Ee tamamm db de ayni emaille kayit varsa insert etmemesini istiyorsun zaten?
Üye
ID § 03 May 2017, 00:31    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Hayır istediğim şey o kaydın atlanıp olmayan kayıtların eklenmesi. Bir register formu olamayacağı için yeni bir kullanıcı eklendiğinde var olan users.txt 'nin en altına eklenecek.

Bunun mantığını kuramıyorum bir türlü.

AHAHAHAHAHAHAHA ok.
Yörünge Disi
ID § 03 May 2017, 01:53    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Iki secenegin var;

1 - Once kayit DB'de var mi diye bakmak, calisacak query sayisini ikiye katlamak.
2 - INSERT IGNORE kullanarak tek sorgu yapip, isi MySQL'e devretmek.

Ikinci opsiyon icin BasicDB.php'ye asagidaki fonksiyonu ekleyip, $db->insertIgnore(..) olarak kullanabilirsin.

    /**
     * Used for insert operation
     *
     * @param
     *            $tableName
     * @return $this
     */
    public function insertIgnore($tableName)
    {
        $this->sql = 'INSERT IGNORE INTO ' . $tableName;
        return $this;
    }

Ha tabi bu degisikligi kendi fork'ladigin repo'da yapip, sonra kutuphanenin yaraticisina PR gondersen de degisiklikler esas repo'da da yerini alsa daha iyi.

Afyon'dan vekilime taze taze kaymak lazim.
Üye
medal 1k medal 5k
ID § 03 May 2017, 17:42    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
DB'de email unique ise bu kontrolü yapmana gerek yok. Değilse'de unique yap. Di' nin dediği gibi INSERT IGNORE ile çözersin.

Eğer Unique yapamıyorsan, diğer bir yol olarak DB'de kayıtlı olanları tek SELECT ile çekip array de tutman daha sonra da insert edeceklerin ile karşılaştırıp ( array_diff ) olmayanları ayıklayarak INSERT sorgusunu ayıklananlara uyarlaman.

Tabi bu olay sağ kulağını sol elinle tutmak gibi birşey oluyor ama fikir olsun diye belirteyim dedim.

Elan Realms - A Tale That Goes On
A.k.a Neme, Tysre Freewave
Üye
ID § 04 May 2017, 13:06    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
neyse bunu bir şekilde hallletmeye çalışacağım. Olmazsa sürekli bir veri eklenişi olmayacağı için tableyi truncate edip bir daha çalıştırırım.


Şimdi users'a eklemeyi yapıyorum. Kullanıcı AD içinde olduğu için php ile get_current_user() ile userini alıyorum ve karşılaştırma yapıyorum.


users tablom;

id  |    isim    |     soyisim     |     email

1        Onur           Kaya             [email protected]
2        Onur2          Kaya             [email protected]



x.com sabit bir domain. Yukarda dediğim gibi;

$logonname = get_current_user() . '@x.com';
$query = $db->prepare("SELECT * FROM users WHERE id=?");
$query->execute(array(1));
$row = $query->fetch(PDO::FETCH_ASSOC);

if($logonname == $row['email']) {
echo 'test';
} else {
echo 'yalnis bi seyler var';
}

bu şekilde sorgulama yaptığımda sürekli else kısmı çalışıyor. Ama != operatörü kullandığımda test cevabı geliyor. Ters çalışıyor kısacası merak ettim neden.

echo $logonname . '<br>';
echo $row['email'] . '<br>';

iki echo da aynı sonucu veriyor: [email protected]


bu arada evet basicdb kullanmaktan vazgeçtim. Elle yazayım hemde pratik yapıp öğrenmiş olurum diye :p

-- düzeltme --

if kontrolü hiç çalışmıyormuş. execute'deki array id değiştirdiğimde çıktılar aynı olmasa bile != test sonucunu veriyor.

-- düzeltme 2 --

sorunun kaynağını buldum. users.txt 'den veritabanına yazdırırken en sonuna boşluk koyuyormuş. trim ile silip düzelttim :D

AHAHAHAHAHAHAHA ok.

4 defa güncellendi. Son güncelleme 04/05/2017 13:44 tarihinde khazadum tarafindan yapilmistir.
Yörünge Disi
ID § 04 May 2017, 13:53    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Kulagi tersten de degil baya baya bacak arasindan tutuyon.

1 - Ilk mesajda bahsettigin DB class'i yerine dumduz PDO kullaniyosun, ikisini karistiriyosun. Bad practice.
2 - Madem DB class'ini kullanmican, direkt sorgu gondericen, once SELECT edip sonra INSERT etmek yerine, direkt INSERT IGNORE kullan, sorgu sayisi da yazdigin kod da yariya dussun, if-else hepsi kaybolsun.

Afyon'dan vekilime taze taze kaymak lazim.

1 defa güncellendi. Son güncelleme 04/05/2017 13:53 tarihinde di tarafindan yapilmistir.
Üye
ID § 04 May 2017, 20:15    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Yukardaki postta belirtmiştim abi class kullanmadığımı kızma hemen grinning smiley

başka bir problemim var. Şu aşağıdaki kod;

$logonname = get_current_user() . '@x.com';

Ağdaki diğer bilgisayarlarda da benim kullandığım user'i gösteriyor.

AHAHAHAHAHAHAHA ok.

1 defa güncellendi. Son güncelleme 04/05/2017 20:21 tarihinde khazadum tarafindan yapilmistir.
Yörünge Disi
ID § 05 May 2017, 01:13    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Alinti

bu tayfunerbilen 'den basicdb sınıfını kullanıyorum.

e bu?

[php.net]

get current user cok alakasiz yapmaya calistigin is ile.

Afyon'dan vekilime taze taze kaymak lazim.
Üye
ID § 05 May 2017, 08:46    [ Alintila ] [ Özel Mesaj ] [ Albüm ]
Alinti

bu arada evet basicdb kullanmaktan vazgeçtim. Elle yazayım hemde pratik yapıp öğrenmiş olurum diye :p

yanlış yazmışım smiling smiley evet get_current_user() çok alakasız ve saçma olmuş. Dünden beri araştırıyorum da bir yol bulamadım internette. Siteye bağlanan kullanıcının bilgisayar adını almayı.

Bilgisayar adı, C:/Users/k.adı ya da regedit ten bir şekilde almam lazım oldu smiling smiley

AHAHAHAHAHAHAHA ok.

1 defa güncellendi. Son güncelleme 05/05/2017 09:17 tarihinde khazadum tarafindan yapilmistir.
  [ Y ]
[ Forum ] / [ Konu ]
=o=
[ Yeni Konu ] [ Mesaj Yaz ]
*Bu sayfadaki içerik, yazanların kiŞisel görüŞlerini belirtmektedir. KiŞiler, üye anlaŞmasında var olan Şartların bilincinde olmak yükümlülüğündedir. Üye anlaŞmasına göre, gönderilen her türlü içerik, içeriği göndermiŞ olarak görünen üye rumuz ismi ve üyenin kendisine aittir. Paticik.com ve yetkilileri, üyelerimizin göndermiŞ olduğu iŞ bu sayfada yazılı olarak bulunan içerik hakkında hiçbir yasal sorumluluk kabul etmemektedir. Yükümlülük altında olmasa dahi, var olan site içeriğinin bütünü veya bir kısmının site kurallarına uygunsuzluğu durumunda, iletiŞim sayfamızdan bize eriŞebilir, gereken düzenlemeleri yapmamızı sağlayabilirsiniz.
[ Paticik.com | Forum | Kullanici Sozlesmesi | Üye Ol ]
Iletisim : info [at] paticik.com
Secereli Dobermann | Londra Rehberi Copyright 2001-2015 @ Paticik.com
This forum is powered by Phorum