Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

PHP soruları


khazadum

Öne çıkan mesajlar

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.
Link to comment
Sosyal ağlarda paylaş

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 :)
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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 . '
';
echo $row['email'] . '
';

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
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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


yanlış yazmışım :) 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 :)
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...