Jump to content
TNC-TR
coder_falcon

Veritabanı Resim Yükleme Gösterme

Recommended Posts

Veritabanı Resim Yükleme Gösterme

 

merhaba arkadaşlar bu kodda nerede yanlışlık var  veritabanın'dan  secili olan resimi  programa  cekemiyorum   ve Resim yüklerken  de  [BLOB - 64 B] seklinde yükleniyor normal de [BLOB - 10.6 KiB]  böyle olması gerekiyor veritabanın da. Yardımcı Olurmusunuz  ? 

 

 

resim yükleme kodu bu :

secim = Dialog.FileBrowse(true, "Profil Resmi Seçiniz",_DesktopFolder, "Profil Fotoğrafı (.jpg, .png )|*.jpg;*.png|", "", "dat", false, true);
if (secim[1] ~= "CANCEL") and (secim ~= nil) then
Input.SetText("sayi",secim[1]);
MySQLConnection, err = MySQL:connect('photo', 'root', '', 'localhost', '3306'); -- Conecta a la base de datos
foto = Input.GetText("sayi");
MySQLConnection:execute("insert  into img (foto) values('"..foto.."')");
end

---------------------------------------------------------------------------------------------------------------------------------

 resim gösterme kodu bu 

MySQLConnection, err = MySQL:connect('photo', 'root', '', 'localhost', '3306'); -- Conecta a la base de datos
id = Input.GetText("sayi");
MySQLCursor = MySQLConnection:execute("SELECT * FROM img  where id='"..id.."'")
local id,foto = MySQLCursor:fetch();

if (String.Lower(foto) > 256) then
TextFile.WriteFromString(_TempFolder.."\\encoded.b64",foto);
error = Application.GetLastError();
if (error ~= 0) then
Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
else
Crypto.Base64DecodeFromFile(_TempFolder.."\\encoded.b64", _TempFolder.."\\decoded.png");
if (error ~= 0) then
Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
else
Image.Load("prof", _TempFolder.."\\decoded.png");
if (error ~= 0) then
Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
end
end
File.Delete(_TempFolder.."\\decoded.png");
end
File.Delete(_TempFolder.."\\encoded.b64");
end            

 

sql dosyası : 

 

photo.sql

Edited by coder_falcon

Share this post


Link to post
Share on other sites

Blob alanlarda resim saklamak yerine veritabanınızda string bir alan yaratıp resmini yolunu saklayıp, gerektiğinde kod ile buradan çağırmanızı şiddetle tavsiye ederim.  Çünkü blob alanda resim sakladığınızda veritabanı boyutunu çok büyür ve buda yavaşlığa ve çökmelere sebep olur.

Share this post


Link to post
Share on other sites

hocam dediginiz guzel  resim sadece kendi bilgisyarmda cikack karsıma ben uyeler arası mesajlaşma sistemi yapyorum uyerin profil sistemini yapmak istiyrm   uyeler bir birlerinin fotogrsflarnı goreckler  :)

Share this post


Link to post
Share on other sites

Veritabanının senin veya başka bilgisayarda olması farketmez. Blob alan kullandığında , örnek vertabanı boyutun normalde 2 mb ise  resim ekledikçe 10-20 mb çıkar.  Buda veritabanını şişirir uygulaman geç cevap verir. :)  Karar senin fakat ileride sorun yaşamak istemiyorsan bunu göz ardı etme derim . Editor arkadaşımızın dediği gibi kaydederken foto alanına  alıyor fakat okurken id alanından okumaya çalışıyorsun.  id=input.get.text başındaki id yerine  foto=   olmalıydı

Edited by Lord_Ares

Share this post


Link to post
Share on other sites

foto = Input.GetText("sayi");

MySQLCursor = MySQLConnection:execute("Select * From img Where id='1'");

Local id,foto = MySQLCursor:fetch();

 

 

 

hocam böyle yaptm if (string.length(foto) >256) then     scriptte hata veriyor kodlarda hata var :)

Share this post


Link to post
Share on other sites
coder_falcon, 25.09.2018 - 20:54 yazdı:

yardımcı olacak olan yokmu ? 

yardımcı olacak olan yokmu ? 

@coder_falcon iyi güzel hoş azimlisin birşeyler yapmak istiyorsun fakat bu iş ams yi gidip temelinden öğrenmedikten sonra programlama mantıgını geliştirmedikten sonra , buraya gelip parça parça kod sorup yazdırmaya çalışmayla olmaz.

Şimdi ben burda senin bu kodunu düzenlesem versem , yarın başka biryerde benzer bi kod ihtiyacın oldugunda yine buraya yazıp yine yardım isteyeceksin.

Ben ams yi askerde öğrendim düşün JNetten internete çıkamıyorduk anca jandarmanın sitesine bakabiliyorduk. Ama noldu ams nin help dosyasını aldım okudum denemeler yaptım mantık kurdum geliştirdim.

Benden sana nacizane tavsiyem. Ams eğitimleri ile önce ams yi öğren zaten bu projeyi yapabilecek seviyede olursun.

Share this post


Link to post
Share on other sites
coder_falcon, 52 dakika önce yazdı:

hocam haklsn da benm ihtiyacm olan bu koddu diğerlerini yapyrum :)

Koduna gelecek olursakta yol göstermişim 😉. aldıgın sayi inputundaki değeri veritabanına atarken img kolonuna atıyorsun ama okurken id kolonundan okumaya çalışıyorsun.

Düzeltmen gereken yer neresi sence ?.

  • Haha 1

Share this post


Link to post
Share on other sites

-----------------------------yükleme kodu 

secim = Dialog.FileBrowse(true, "Profil Resmi Seçiniz",_DesktopFolder, "Profil Fotoğrafı (.jpg, .png )|*.jpg;*.png|", "", "dat", false, true);
if (secim[1] ~= "CANCEL") and (secim ~= nil) then
Input.SetText("Input1",secim[1]);
MySQLConnection, err = MySQL:connect('photo', 'root', '', 'localhost', '3306'); 
foto = Input.GetText("Input1");
MySQLCursor = MySQLConnection:execute("insert  into img (foto) values('"..foto.."')");
end

 

--------------------------------------------------------------------------------------------------------------------------resim gösterme kodu

MySQLConnection, err = MySQL:connect('photo', 'root', '', 'localhost', '3306'); 
id = Input.GetText("sayi");
local MySQLCursor = MySQLConnection:execute("SELECT * FROM img  Where id='"..id.."'") 
local id,foto = MySQLCursor:fetch();


            if (String.Length(foto) > 200) then
            
                TextFile.WriteFromString(_TempFolder.."\\encoded.b64",foto);
                error = Application.GetLastError();
                if (error ~= 0) then
                    Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
                else
                
                    Crypto.Base64DecodeFromFile(_TempFolder.."\\encoded.b64", _TempFolder.."\\decoded.png");
                    if (error ~= 0) then
                        Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
                    else
                    
                        Image.Load("Image1", _TempFolder.."\\decoded.png");
                        if (error ~= 0) then
                            Dialog.Message("Error", _tblErrorMessages[error], MB_OK, MB_ICONEXCLAMATION);
                        end
                    end
                    File.Delete(_TempFolder.."\\decoded.png");
                end
                File.Delete(_TempFolder.."\\encoded.b64");
            end                        


yalnız yine olmadı :D resimi göstermiyor

Share this post


Link to post
Share on other sites

Boş bir metin belgesi oluştur, farklı kaydet diyerek profile_img.db şeklinde kaydet (ana dizinde olsun yani source folder) ve yazdığım kodları yazdığım yerlere yaz. Plugins bölümünden SQLite seçili olsun.

On Startup

img_db = SQLite.Open(_SourceFolder.."\\profile_img.db");
SQLite.Query(img_db, "create table Profile_Photo (Path text)");

Resim Ekle Butonu

local secim = Dialog.FileBrowse(true, "Profil Resmi Seçiniz",_DesktopFolder, "Profil Fotoğrafı (.jpg, .png )|*.jpg;*.png|", "", "dat", false, true);
if secim[1] ~= "CANCEL" then
    Input.SetText("Input1", secim[1]);
    local encoded_img = Crypto.Base64EncodeToString(secim[1]);
    SQLite.Query(img_db, "DELETE FROM Profile_Photo");
    SQLite.Query(img_db, "insert into Profile_Photo values('"..encoded_img.."')");
end

Resmi Göster Butonu

local connect = SQLite.QueryToTable(img_db, "SELECT * FROM Profile_Photo");
Crypto.Base64DecodeFromString(connect.Data[1]["Path"], _TempFolder.."\\profile_img.jpg");
Image.Load("Image1", _TempFolder.."\\profile_img.jpg");
os.remove(_TempFolder.."\\profile_img.jpg");

On Shutdown

SQLite.Finalize(img_db);
collectgarbage();

 

Edited by Dark_Angel
  • Thanks 1

Share this post


Link to post
Share on other sites

Resim Ekle Butonu 

local secim = Dialog.FileBrowse(true, "Profil Resmi Seçiniz",_DesktopFolder, "Profil Fotoğrafı (.jpg, .png )|*.jpg;*.png|", "", "dat", false, true);
if secim[1] ~= "CANCEL" then
    Input.SetText("Input1", secim[1]);
    MySQLConnection, err = MySQL:connect('test', 'root', '', 'localhost', '3306');
    local profil= Crypto.Base64EncodeToString(secim[1]);

    MySQLCursor = MySQLConnection:execute("insert  into photo (profil) values('"..profil.."')");
end

Resim ekle kodları    calışıyor yalnız resim göster  kodları calışmıyor hocam ? 

Resmi Göster Butonu

MySQLConnection, err = MySQL:connect('test', 'root', '', 'localhost', '3306'); 
id = Input.GetText("id");
MySQLCursor = MySQLConnection:execute("SELECT * From photo where id='"..id.."'") -- Conecta la tabla
for i = 1, MySQLCursor:numrows() do  -- Cuenta el numero de registros
local id,profil = MySQLCursor:fetch();
endCrypto.Base64DecodeFromString(bindata[1]["Path"],_TempFolder.."\\profil1.jpg");
Image.Load("Image1", _TempFolder.."\\profil1.jpg");
os.remove(_TempFolder.."\\profil1.jpg");

 

resim gösterme kodunda nerede yanlışlık  yapıyorum ? 

Share this post


Link to post
Share on other sites
coder_falcon, 16 dakika önce yazdı:

sayın  hocalar su koda bi yardmcı olurmusunuz yoksa bilgisayarı  toplayıp  pencereden asa atacam onu. 

Resimi veri tabanına atmak yerine onu web domain altına bir klasöre kullanıcı id ile depola ve oradan çeksen olmaz mı

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×