JavaScript içinde dış. Php dosyasından PHP değişken,?

4 Cevap php

Ben (bu "upload.js" adlı) benim sunucuya dosya yükleme için bu JavaScript kodu var:

function startUpload(){
    document.getElementById('upload_form').style.visibility = 'hidden';
    return true;
}

function stopUpload(success){
    var result = '';
    if (success == 1){
        result = '<div class="correct_sms">The file name is [HERE I NEED THE VARIABLE FROM THE EXTERNAL PHP FILE]!</div>';
    }
    else {
        result = '<div class="wrong_sms">There was an error during upload!</div>';
    }
    document.getElementById('upload_form').innerHTML = result;
    document.getElementById('upload_form').style.visibility = 'visible';
    return true;
}

. Ve Ben ("process_file.php" olarak adlandırılır), ve sonuç almak için upload.js ile tekrar bağlanır yüklenen dosyaları yeniden adlandırma ile yüklenenler işlemek basit bir php dosyası var:

<?php
    $file_name = $HTTP_POST_FILES['myfile']['name'];

    $random_digit = rand(0000,9999);

    $new_file_name = $random_digit.$file_name;

    $path= "../../../images/home/smsbanner/pixels/".$new_file_name;
    if($myfile !=none)
    {
        if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
        {
            $result = 1;
        }
        else
        {
            $result = 0;
        }
    }
    sleep(1);
?>

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>

Ne gerek yükleme işlemi doğru olmuşsa upload.js bir cevap olarak yüklenen dosyanın yeni adını görselleştirmek için içerde? Ben yeni ismi cevap koymak gereken yere tam olarak yukarıdaki JavaScript kodu içinde yazdı.

4 Cevap

Sen aşağıdakilere kodunuzu değiştirmek zorunda.

<?php
    $file_name = $HTTP_POST_FILES['myfile']['name'];

    $random_digit=rand(0000,9999);

    $new_file_name=$random_digit.$file_name;

    $path= "../../../images/home/smsbanner/pixels/".$new_file_name;
    if($myfile !=none)
    {
        if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
        {
            $result = 1;
        }
        else
        {
            $result = 0;
        }
    }
    sleep(1);
?>

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo "message" ?>');</script>

Ve JavaScript kodu,

function stopUpload(success, message){
    var result = '';
    if (success == 1){
        result = '<div class="correct_sms">The file name is '+message+'!</div>';
    }
    else {
        result = '<div class="wrong_sms">There was an error during upload!</div>';
    }
    document.getElementById('upload_form').innerHTML = result;
    document.getElementById('upload_form').style.visibility = 'visible';
    return true;
}

RageZ cevabı sadece ben sonrası gidiyordu ne oldu, ama biraz daha spesifik olmak için, php dosyanızın son satırı aşağıdaki gibi görünmelidir:

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo $new_file_name ?>');</script>

Javascript ikinci argüman etrafında tırnaklar olmadan hata ve ben $ new_file_name güvende olmak için içeri geçmek istediklerini sayıyorum, muhtemelen hatta dosya adını (bu durumda addslashes çalışacağını düşünüyorum) kaçmak istiyorum.

Aptal bir adam şöyle demiş; "Aptal soru yoktur, sadece aptal cevaplar vardır". O yanlış olmasına rağmen; Orada aptal sorular aslında yükler vardır, ama bu onlardan biri değil.

Besides that, you are stating that the .js is uploading the file. This isn't really true. I bet you didn't post all your code.

Sen PHP ve JavaScript Ajax, ben Ajax için fonksiyonları kullanımı kolay sahiptir çünkü çoğunlukla, bunu gerçekleştirmek için jQuery çerçevesini kullanarak tavsiye, ama kullanarak bu sorun üzerinde birlikte çalışma yapabilirsiniz mükemmel belgelerine sahiptir çünkü.

Nasıl ile arama komut uzatılması hakkında:

window.top.window.stopUpload(
    <?php echo $result; ?>,
    '<?php echo(addslashes($new_file_name)); ?>'
);

(Addslashes ve tırnak PHP dize literal bir JavaScript dizeye kodlanmış çıkıp yapmak için gereklidir.)

Ardından stopUpload() fonksiyonu için bir 'dosya' parametresini ekleyin ve HTML dışarı tükürmek.

$new_file_name=$random_digit.$file_name;

Üzgünüz, bu dosya güvenli hale getirmek için yeterli değildir. $file_name gibi bölümleri içeriyor olabilir 'x /.. /.. / Y', ya da diğer çeşitli yasadışı veya tutarsız destekli karakter. Upload sanitisation göründüğünden çok daha zordur; Eğer tamamen yeni (rastgele) dosya adı oluşturan ve tüm bunun için kullanıcı girişi güvenerek değil daha iyi.