• 18-12-2012, 06:41:24
    #1
    Herkese merhabalar,
    Elimdeki verileri for döngüsü içinde sayfada listeliyorum.
    For döngüsünden çıkmadan bu verileri veritabanına da kaydetmek istiyorum.
    Eğer veritabanında aynı kişiye ait bir veri varsa mevcut verinin güncellenen değerlerini düzenlemek eğer veritabanında o kişiye ait daha önceden veri yoksa da veritabanına yazdırmak istiyorum.
    İlgili işlemle ilgili kodları yazdım, aşağıda görebilirsiniz.
    While ile sorgu gerçekleştirip varsa düzenle yoksa yaz dediğimde işlem yapmıyor.
    While döngüsünü silip yaz dediğimde yazıyor; ya damevcut değerler varsa sadece düzenle dediğimde düzenliyor. Nerede hata yaptığımı anlayamadım yardımcı olursanız sevinirim. Saygılar


    for($i = 0; $i < count($atclist); $i++)
    		{
    			$atcLogin=$atclist[$i][37];
    			$atcID=$atclist[$i][1];
    			$atcName=$atclist[$i][2];
    			if (substr($atclist[$i][0],-4,4) == "ATIS" || substr($atclist[$i][0],-3,3) == "OBS") continue;
    			
    			$tabloAdi="".date('Y').strtolower(date('F'));
    			$tabloYap="CREATE TABLE IF NOT EXISTS $tabloAdi (`onlineid` int(11) NOT NULL AUTO_INCREMENT,`onlinevatsimid` int(11) NOT NULL,`onlinename` varchar(50) NOT NULL,`onlinetime` int(11) NOT NULL,`onlinelogin` varchar(14) NOT NULL,PRIMARY KEY (`onlineid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
    			if (date('j')=="1") mysql_query($tabloYap);
    			$tabloYaz="insert into $tabloAdi (onlinevatsimid,onlinename,onlinetime,onlinelogin) values ('$atcID','$atcName','$atcOnline','$atcLogin')";
    			$tabloDuzenle="update $tabloAdi set onlinetime='$atcOnline' where onlinevatsimid='$atcID' and onlinelogin='$atcLogin'";
    			
    			$kontrol=mysql_query("SELECT * FROM $tabloAdi ORDER BY onlineid");
    			while ($atcKontrol=mysql_fetch_array($kontrol))
    				{
    					if ($atcKontrol[onlinevatsimid]==$atcID && $atcKontrol[onlinelogin]==$atcLogin) mysql_query($tabloDuzenle);
    					else mysql_query($tabloYaz);
    				}


    Not: güvenlik sebebiyle veritabanı bağlantı satırı silinmiştir.
  • 18-12-2012, 10:31:08
    #2
    $kontrol satırı ve altındakileri sil, buraya veritabanında ilgili kayıt var mı sorgusu ekle, varsa güncelle, yoksa ekle..

    $atcKontrol[onlinevatsimid] böyle yazma! tırnak kullan..

    süslü parantez kullanmaya özen göster, vs,vs...
  • 18-12-2012, 18:37:28
    #3
    kontrol satırı altındakiler zaten ilgili sorgular değiller mi sorguyu yanlış mı yazmışım demek istediğinizi tam anlayamadım.


    			$tabloYaz="insert into $tabloAdi (onlinevatsimid,onlinename,onlinetime,onlinelogin) values ('$atcID','$atcName','$atcOnline','$atcLogin')";
    			$tabloDuzenle="update $tabloAdi set onlinetime='$atcOnline' where onlinevatsimid='$atcID' and onlinelogin='$atcLogin'";
    			
    			$kontrol=mysql_query("SELECT * FROM $tabloAdi ORDER BY onlineid"); 
                while ($atcKontrol=mysql_fetch_array($kontrol)) 
                    { 
                        if ($atcKontrol['onlinevatsimid']==$atcID && $atcKontrol['onlinelogin']==$atcLogin) mysql_query($tabloDuzenle); 
                        else mysql_query($tabloYaz); 
                    }


    Bu şekilde yazdığımda sonsuz bir döngüye giriyor.
  • 18-12-2012, 19:51:02
    #4
    oradaki veriyi okumana ihtiyacın yoksa; $tabloDuzenle = ... satırından sonraki kısımları sil ve şunu ekle;

    mysql_query($tabloDuzenle);         
    if (mysql_affected_rows()==0) {
        mysql_query($tabloYaz);
    }
  • 19-12-2012, 04:55:45
    #5
    Mevcut oturum açılmış id ve login saatinin varlığı kontrol ederek eğer oturum devam ediyorsa saatini güncellemek amacım. Eğer oturum kapatılıp tekrar açıldıysa da yeni veri yazmak.

    Bu nedenle veritabanındaki değeri okumam gerek. Bunu nasıl yazabiliriz.
    Neden sonsuz döngüye giriyor anlamadım. Affected rows fonksiyonu ile kontrolünü sağlamamız mümkün mü ya da başka bir yolla?
  • 19-12-2012, 13:01:58
    #6
    bide böyle bir dene bakalım
    for($i = 0; $i < count($atclist); $i++) 
    { 
    	$atcLogin=$atclist[$i][37]; 
    	$atcID=$atclist[$i][1]; 
    	$atcName=$atclist[$i][2]; 
    	if (substr($atclist[$i][0],-4,4) == "ATIS" || substr($atclist[$i][0],-3,3) == "OBS") continue; 
    	 
    	$tabloAdi="".date('Y').strtolower(date('F')); 
    	$tabloYap="CREATE TABLE IF NOT EXISTS $tabloAdi (`onlineid` int(11) NOT NULL AUTO_INCREMENT,`onlinevatsimid` int(11) NOT NULL,`onlinename` varchar(50) NOT NULL,`onlinetime` int(11) NOT NULL,`onlinelogin` varchar(14) NOT NULL,PRIMARY KEY (`onlineid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1"; 
    	if (date('j')=="1") mysql_query($tabloYap); 
    	$tabloYaz="insert into $tabloAdi (onlinevatsimid,onlinename,onlinetime,onlinelogin) values ('$atcID','$atcName','$atcOnline','$atcLogin')"; 
    	$tabloDuzenle="update $tabloAdi set onlinetime='$atcOnline' where onlinevatsimid='$atcID' and onlinelogin='$atcLogin'"; 
    	 
    	$kontrol=mysql_num_rows(mysql_query("SELECT * FROM $tabloAdi  where onlinevatsimid='$atcID' and onlinelogin='$atcLogin'")); 
    
    			if ($kontrol>0){
    				mysql_query($tabloDuzenle); 	
    			}
    			else{
    				mysql_query($tabloYaz); 
    			}
  • 19-12-2012, 18:06:37
    #7
    Bu şekilde yaptım sorun yok ilgilenmen herkese çok teşekkürler.


    $kontrol=mysql_query("SELECT * FROM $tabloAdi WHERE onlinevatsimid='$atcID' AND onlinelogin='$atcLogin' ORDER BY onlineid"); 
    			$atcKontrol=mysql_fetch_array($kontrol);
    			if ($atcKontrol['onlinevatsimid']==$atcID && $atcKontrol['onlinelogin']==$atcLogin) mysql_query($tabloDuzenle);
    			else mysql_query($tabloYaz);