• 11-03-2013, 14:11:35
    #1
    Merhaba üstadlar,

    Nerede araştırdıysam bulamadım.

    Benim sıkıntım formdaki değerlerin tümünü ajax ile bir php dosyasına yollamak.
    İşin içine input type="file" girince herşey alt üst oldu.

    Kullandığım form:
    <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1" onsubmit="return false">
    
    <input type="text" name="video_adi" id="video_adi" class="kat_text">
    
    <input type="text" name="video_yili" id="video_yili" class="kat_text">
    
    <input type="text" name="video_basrol" id="video_basrol" class="kat_text">
    
    <input type="text" name="video_imdb" id="video_imdb" class="kat_text">
    
    <input type="text" name="video_etiket" id="video_etiket" class="kat_text">
    
    <textarea name="video_aciklamasi" id="video_aciklamasi" class="kat_textarea"></textarea>
    
    <select name="video_dili" id="video_dili" class="kat_select">
                <option value="0">Lütfen Video Dilini Seçiniz</option>
                <option value="1">Türkçe Dublaj</option>
                <option value="2">TR Altyazılı</option>
                <option value="3">Orjinal Dili</option>
    </select>
    
    <select name="video_kategorisi" id="video_kategorisi" class="kat_select">
              	<option value="0">Aksiyon</option>
                    <option value="0">Macera</option>
    </select>
    
    <input type="file" name="video_afis" id="video_afis" class="kat_file" size="27" />
    
    <input type="file" name="video_video" id="video_video" class="kat_file" size="27" />
    
    <input type="submit" name="submit" id="submit" value="Videoyu Ekle" class="kat_submit" onclick="videoekle()">
    
    </form>
    gönderdiğim fonksiyonda bu verileri alıp degerler adında bir değişkene atıyorum.

    function videoekle() 
    {
    
    var video_adi = $("input[name=video_adi]").val();
         video_adi = jQuery.trim(video_adi);
    
    var video_yili = $("input[name=video_yili]").val();
         video_yili = jQuery.trim(video_yili);
    		
    var video_basrol = $("input[name=video_basrol]").val();
         video_basrol = jQuery.trim(video_basrol);
    	
    var video_imdb = $("input[name=video_imdb]").val();
         video_imdb = jQuery.trim(video_imdb);
    
    var video_etiket = $("input[name=video_etiket]").val();
         video_etiket = jQuery.trim(video_etiket);
    
    var video_aciklamasi = $("textarea[name=video_aciklamasi]").val();
         video_aciklamasi = jQuery.trim(video_aciklamasi);		
    	
    var video_dili = $('#video_dili option:selected').val();	
    	
    var video_kategorisi = $('#video_kategorisi option:selected').val();
    	
    var afis = $('#video_afis').val(); 
    	
    var film = $('#video_video').val();
    
    var degerler = "video_adi="+video_adi+"&video_yili="+video_yili+"&video_basrol="+video_basrol+"&video_imdb="+video_imdb+"&video_etiket="+video_etiket+"&video_aciklamasi="+video_aciklamasi+"&video_dili="+video_dili+"&video_kategorisi="+video_kategorisi+"&afis="+afis+"&film="+film;
    
    	$.ajax({
    		type:"POST",
    		url:"Include/video_ekle_in.php",
    		data:degerler,
    		success: function(sonuc){
    				$("#upload_prog").empty();
    				$("#upload_prog").html(sonuc)
    		}		
    	});
    }
    video_ekle_in.php bunları
    $video_adi = $_POST['video_adi']; olarak alıyorum.

    sonra denemek için aldığım değerleri ekrana yazdırıyorum.

    Sonuç olarak

    $film_adi = $_FILES['film']['name'];
    $film_tmp = $_FILES['film']['tmp_name'];
    $afis_adi = $_FILES['afis']['name'];
    $afis_tmp = $_FILES['afis']['tmp_name'];

    olarak aldığım file dosyaları hata verdiriyor.

    Sanırım ajax ile çekip gönderdiğimde bu şekilde alamıyorum.


    Ne kadar araştırdıysam da bulamadım.
    Yardımlarınızı bekliyorum.

    Konuyu yanlış yere açtıysam özür dilerim

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:11:35 -->-> Daha önceki mesaj 13:52:30 --

    Tekrar merhaba üstadlar,
    Biraz deneme yanılma yoluyla

    Javascript ile

    file inputlarını
    var film = $("input[name=video_video]").val(); olarak aldım.

    Ajax ile değeri gönderdim.
    karşı taraftan
    $film_adi = $_POST['film'];

    olarak aldım.
    ve bunu explode ile düzenledim.

    karşıma fakepath diye bir şey çıktı.

    $film_adii = explode('\\',$film_adi);
    $son_film_tmp = $film_adii['0']."\\".$film_adii['1']."\\";
    $son_film_adi = end($film_adii);

    $son_film_tmp = C:\fakepath\
    $son_film_adi = video ismi

    Bu fakepath'ten nasıl kurtulabilirim?
  • 11-03-2013, 14:23:50
    #2
    İkilik (binary) aktarımı AJAX üzerinden, standart yollarla yapamazsınız. Tarayıcı destekliyorsa File API'larını, desktelemiyorsa iframe yöntemini kullanmalısınız.

    File API'larıyla ilgili bilgi: http://www.html5rocks.com/en/tutorials/file/dndfiles/
  • 11-03-2013, 14:37:12
    #3
    Hkan adlı üyeden alıntı: mesajı görüntüle
    İkilik (binary) aktarımı AJAX üzerinden, standart yollarla yapamazsınız. Tarayıcı destekliyorsa File API'larını, desktelemiyorsa iframe yöntemini kullanmalısınız.

    File API'larıyla ilgili bilgi: http://www.html5rocks.com/en/tutorials/file/dndfiles/
    Hocam sağolasın.

    Tekli yaparsam yapabilirmiyim bu şekilde.

    Eğer tekli yaparsam fakepathden nasıl kurtulabilirim.

    Tek amacım şu ajax ile diğer php dosyasına yollayabilmek.
  • 11-03-2013, 14:41:54
    #4
    jquery ile form göndermeye başlamış herkesin yaşadığı ilk sıkıntı
    öyle yaparsın olmaz, böyle yaparsın olmaz, burada mı sorun var dersin düzelmez... uğraşır durursun. Çünkü jquery ye öyle bir güvenmişiz ki her şeyi yapacak sanırız

    @Hkan'ın da dediği gibi ya flash ya iframe kullanman gerekiyor.

    bu konuda malsup'un jquery form classını kullanmanı tavsiye ederim; http://www.malsup.com/jquery/form/#download
  • 11-03-2013, 15:32:35
    #5
    fatihsarac adlı üyeden alıntı: mesajı görüntüle
    jquery ile form göndermeye başlamış herkesin yaşadığı ilk sıkıntı
    öyle yaparsın olmaz, böyle yaparsın olmaz, burada mı sorun var dersin düzelmez... uğraşır durursun. Çünkü jquery ye öyle bir güvenmişiz ki her şeyi yapacak sanırız

    @Hkan'ın da dediği gibi ya flash ya iframe kullanman gerekiyor.

    bu konuda malsup'un jquery form classını kullanmanı tavsiye ederim; http://www.malsup.com/jquery/form/#download
    Hocam oturdum düşündüm.
    Sonunda şöyle bir şey buldum.

    Madem ajax ile file değeri gönderemedim.
    Çalış saksı çalış dedim ve şunu buldum.

    Ben formumunun tüm elemanlarını text'e dönüştürürsem !

    daha sonra bu textleri form.serialize() methodu ile göndersem belki sorunu çözerim dedim.

    Sonuç olarak ilk doldurulan form'a submit yapıldığında
    işe ajax bulaştırmadım.
    php ile tüm bilgilerini aldım ve hiddenlardan oluşan yeni forma sıralarıyla hidden value'lerine atadım.

    Örn:
    $video = $_FILES['video_video']['name'];
    $video_tmp = $_FILES['video_video']['tmp_name'];
    
    <form action="" method="post" onsubmit="return false" name="form2" id="form2">
    
    <input type="hidden" name="item1" value="'.$video.'">
    <input type="hidden" name="item2" value="'.$video_tmp.'">
    
    <input type="submit" value="gönder" onclick="java()">
    
    </form>
    Video tmp lerde hiddenların valuesi oldu.

    sonra hiddenlardan olusan bu formda güzel bir buton belirttim.
    Bu ikinci buton ile ajaxa gönderdim.
    Ajaxdan serialize ile formdaki tüm hiddenların valuelerini upload yapacağım forma cektim.

    Şuan da aldığım tüm bilgiler tmp ler dahil düzgün çıkmakta.

    Ben bu hiddenlardan oluşan formu araya soktuğumda ve ilk submiti yaptığımda işlemde gecikme yaşarmıyım.
  • 11-03-2013, 15:52:33
    #6
    Ben iframe yöntemini şöyle kullanıyorum. Sayfada iki form elementi oluşturuyorum. <input type="file"> elementini ikinci forma tek başına koyuyorum. O formun target değerine sayfada oluşturduğum iframe'in name değerini veriyorum. Resmi kullanıcıya yükletip asıl formu resim yüklendikten kaydedebilmesini sağlıyorum.

    Bu arada resim yüklenince Javascript ile ilk formdaki <input type="hidden" name="resim"> elementinin değerini yüklenen resmin FTP'deki yeri olarak atıyorum. Bu şekilde, ilk form post edildiğinde PHP'yle yüklenen dosyanın yerini kolayca bulabiliyorum.
  • 11-03-2013, 17:12:01
    #7
    bence bu kadar uğraşılmasına gerek yok. yukarıda linkini verdiğim malsup'un form js'sini sayfaya dahil edin;

    <script type="text/javascript">
    $(document).ready(function(e) {
        
    	$("#submitbutonunidsi").click(function(){
    		
    		$("#formunidsi").ajaxForm({
    			target: '#gelencevabinereyeyazdirsin'
    		});
    			
    	});
    	
    });
    
    </script>
    şeklinde bir fonksiyonla file dahil her şeyi normal post eder gibi gönderebilirisiniz. sizin yapmış olduğunuz ikinci frame olayını malsup sayfaya gizliden ekliyor, ikinci bir uğraşa gerek kalmıyor. tabii bu benim tavsiyem. her coder'ın yoğurt yiyişi farklıdır en nihayetinde.