xls to mysql

Kodla Büyü

acelayir

Aktif Üye
Mesajlar
143
excel dosyasındaki verileri mysql veritabanına kaydetmek istiyorum. ancak excel dosyasında hücreler birleştirilmiş olduğunda problem çıkıyor. birleştirilmiş hücreleride dahil edip veritabanına boş yazdırıyor. bu sorunu nasıl çözebilirim.örnek xls dosyasını yükledim yardımcı olabilirseniz sevinirim.
 

Ekli dosyalar

xls dosyasını nasıl mysql'e aktarıyorsunuz. Phpmyadmin ile mi yoksa kendi yazdığınız bir script ile mi?
Bütün veriler örnekteki gibi ise birleştirilmiş hücrelerdeki fazlalık sütunları seçip, silebilirsiniz. Yani A ve B sütunları birleşmişse B sütununu seçip, sağ tıklayıp, silin.
 
hocam dediğiniz şekilde oluyor ama site yönetimi ben olmayacağım için site yönetiminin excel dosyasını direk upload ederek mysqle aktarması lazım.
bu siteyi dershane için hazırlıyorum.dershane sınav sonuçlarının çıktısını excel formatında alabiliyor.bizde bu excel dosyasını mysqle aktarıp öğrenci siteye giriş yaptığında sonucunu öğrenmesini istiyoruz.
Kod:
<?



if(isset($_FILES['dosya'])) {
	
 
   $hata = $_FILES['dosya']['error'];
   if($hata != 0) {
       echo "<script>";
		echo "alert('Hata oluştu');";
		echo "window.location='deneme.php'";
		echo "</script>";
   } else {
      $boyut = $_FILES['dosya']['size'];
      if($boyut > (1024*1024*2000)){
		   echo "<script>";
		echo "alert('Dosya 20MB den büyük olamaz.');";
		echo "window.location='deneme.php'";
		echo "</script>";
             } else {
         $isim = $_FILES['dosya']['name'];
         $uzanti=end(explode(".",$isim));
		 $dosyaadi=explode(".",$isim);
		 $dosyadi2=$dosyaadi[0];
		 function replace_tr($text) {
$text = trim($text);
$search = array('Ç','ç','Ğ','ğ','ı','İ','Ö','ö','Ş','ş','Ü','ü',' ');
$replace = array('c','c','g','g','i','i','o','o','s','s','u','u','-');
$new_text = str_replace($search,$replace,$text);
return $new_text;
}  
         if($uzanti!='xls' && $uzanti!='xlsx') {
			  echo "<script>";
		echo "alert('Bu dosya uzantsına izin verilmiyor');";
		echo "window.location='deneme.php'";
		echo "</script>";
			}
         else {

           
	$dosyadi3 = replace_tr($dosyadi2);
			$yeniisim	="$dosyadi3.$uzanti";
            copy($dosya, 'dersler/' . $yeniisim);
			 
         }
      }
   }

} else {
 		echo "<script>";
		echo "alert('Dosya Seçilmemiş');";
		echo "window.location='deneme.php'";
		echo "</script>";
}



require_once 'reader.php'; 
 
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('ISO-8859-9');
    $data->read('dersler/' . $yeniisim);

for ($row = 2; $row <= $data->sheets[0]['numRows']; $row++)
    {
        
 
        $tc_no = mb_convert_encoding( $data->sheets[0]['cells'][$row][1],"UTF-8","ISO-8859-9");
        $ad = mb_convert_encoding( $data->sheets[0]['cells'][$row][2],"UTF-8","ISO-8859-9");
        $soyad = mb_convert_encoding( $data->sheets[0]['cells'][$row][3],"UTF-8","ISO-8859-9");
        $dogru = mb_convert_encoding( $data->sheets[0]['cells'][$row][4],"UTF-8","ISO-8859-9");
		$yanlis = mb_convert_encoding( $data->sheets[0]['cells'][$row][5],"UTF-8","ISO-8859-9");
        $net = mb_convert_encoding( $data->sheets[0]['cells'][$row][6],"UTF-8","ISO-8859-9");
        $puan = mb_convert_encoding( $data->sheets[0]['cells'][$row][7],"UTF-8","ISO-8859-9");

               
        veriekle($tc_no,$ad,$soyad,$dogru,$yanlis,$net,$puan,$row);    
    
    }
	

function mysql_conn(){
    $username = "root";
    $password = "12345678";
    $database = "tahmaz";
    $hostname = "localhost"; 
 
    $db = mysql_connect($hostname,$username,$password) or die ("MYSQL BAĞLANTI HATASI");
    mysql_select_db($database,$db) or die("MYSQL VERİTABANI HATASI");    
    return $db;
}
	
	
	function veriekle($tc_no,$ad,$soyad,$dogru,$yanlis,$net,$puan,$row){
                //bilgileri saklayacağım tablom : ogrenci_kimlik_bilgileri
                //ID otomatik artacağı için null diyo
        $query = "insert into deneme (id , tc_no ,ad ,soyad ,dogru ,yanlis ,net ,puan)
        values ( NULL , '$tc_no', '$ad', '$soyad', '$dogru', '$yanlis', '$net', '$puan')";
        //verileri ekle eğer hata olursa satır numarasını belirterek ekrana yazdır.
        mysql_query($query,mysql_conn()) or print(mysql_error())."Satir : $row \n";    
 
        if($row == $data->sheets[0]['numRows']) //en son veri eklendikten sonra bağlantıyı kapat
        mysql_close(mysql_conn());

}

		echo "<script>";
		echo "alert('Excel Dosyanız Başarıyla Yüklenmiştir.');";
		echo "window.location='deneme.php'";
		echo "</script>";










?>
 
Sayın hocam her şey aşağıdaki kodda bitiyor.
Kod:
        $tc_no = mb_convert_encoding( $data->sheets[0]['cells'][$row][1],"UTF-8","ISO-8859-9");
        $ad = mb_convert_encoding( $data->sheets[0]['cells'][$row][2],"UTF-8","ISO-8859-9");
        $soyad = mb_convert_encoding( $data->sheets[0]['cells'][$row][3],"UTF-8","ISO-8859-9");
        $dogru = mb_convert_encoding( $data->sheets[0]['cells'][$row][4],"UTF-8","ISO-8859-9");
      $yanlis = mb_convert_encoding( $data->sheets[0]['cells'][$row][5],"UTF-8","ISO-8859-9");
        $net = mb_convert_encoding( $data->sheets[0]['cells'][$row][6],"UTF-8","ISO-8859-9");
        $puan = mb_convert_encoding( $data->sheets[0]['cells'][$row][7],"UTF-8","ISO-8859-9");
Kodda geçen $data->sheets[0]['cells'][$row][1] ifadeleri excel belgesinden alınacak hücreleri ifade ediyor. Bu koddaki [1] 1. sütundaki bilgi demek. Yani yapmanız gereken hangi bilgi hangi sütuna denk geliyorsa onu yukarıdaki kodda sütun numarasını değiştirerek elde etmek. Gönderdiğiniz dosyada sütun başlıkları yazılı olmadığı için ben tahmini olarak kodları aşağıdaki gibi değiştirdim. Gerçi değişkenlere uygun sütunları (örneğin $soyad) tespit edemedim, o yüzden salladım. Anlayacağınız yapmanız gereken ilgili sütunun sayısın kod içerisinde uygun şekilde değiştirmek.
Kod:
        $tc_no = mb_convert_encoding( $data->sheets[0]['cells'][$row][1],"UTF-8","ISO-8859-9");
        $ad = mb_convert_encoding( $data->sheets[0]['cells'][$row][7],"UTF-8","ISO-8859-9");
        $soyad = mb_convert_encoding( $data->sheets[0]['cells'][$row][8],"UTF-8","ISO-8859-9");
        $dogru = mb_convert_encoding( $data->sheets[0]['cells'][$row][10],"UTF-8","ISO-8859-9");
      $yanlis = mb_convert_encoding( $data->sheets[0]['cells'][$row][11],"UTF-8","ISO-8859-9");
        $net = mb_convert_encoding( $data->sheets[0]['cells'][$row][13],"UTF-8","ISO-8859-9");
        $puan = mb_convert_encoding( $data->sheets[0]['cells'][$row][15],"UTF-8","ISO-8859-9");
 
yakuphan hocam. bende sizin dediğiniz gibi düşündüm ama olmadı. Aslında mantıken olması lazım sonuçta A - B hücreleri birleştiğinde bu hücreye tıkladığında A1 hücresi olarak gözüküyor. C-D-E hücreleri birleştiğinde ilk satıra tıkladığında da C1 görünüyor. bende buna göre aşağıdaki gibi yaptım olmadı. acaba birleştirilmiş hücere olunca kafası mı karışıyor. ben bi daha deneyeyim bakalım.
Kod:
 $tc_no = mb_convert_encoding( $data->sheets[0]['cells'][$row][1],"UTF-8","ISO-8859-9");
        $ad = mb_convert_encoding( $data->sheets[0]['cells'][$row][3],"UTF-8","ISO-8859-9"); --->
 
Öncelikle 10 öğrenciye ait bir excel dosyası hazırlayın. Yani 10. satırdan sonraki öğrencileri silin.
Ardından koddaki $data->read('dersler/' . $yeniisim); satırından sonra
echo "<pre>";
print_r($data);
echo "</pre>";
yazıp, deneyin. Böylece excel dosyasından okunmuş bilgilerin tutulduğu $data değişkenini ekrana yazdırmış olursunuz. Çıktıyı buraya eklerseniz ya da siz incelerseniz, verileri nasıl okuduğunu görebilir, bilgilerin dizi değişkene ne şekilde aktarıldığını görebilirsiniz. Ona göre önceki mesajımdaki kodları düzenlersiniz.
 
php ile com nesneleri çoğu zaman problem çıkarıyor linux server larda daha önce bende sonuç öğrenme üzerine bir script yazmıştım çok problem oluyor excel den okuyup mysql e yazmak.
 
BBNET
Geri
Üst