2015-07-03 35 views
7

Używam formularza do wysyłania informacji do strony php. (używając "GET") Chciałbym mieć dwa przyciski pod formularzem: jeden do podglądu wygenerowanej strony, a drugi do pobrania wygenerowanej strony.Rozróżnianie przycisków przesyłania w formularzu HTML za pomocą dwóch przycisków przesyłania

Znalazłem rozwiązanie dla części podglądu

<script type="text/javascript"> 
$("form").submit(function() { 
$("form").attr('target', '_blank'); 
return true; 
}); 
</script> 

Który działa świetnie.

Aby wygenerowany strona dostępna do pobrania, ja generalnie stosując normalny przycisk złożyć:

<input type="submit" name="submit" id="submit" onClick="myFunction()" value="Download Bonus Page" > 

i na wygenerowanej stronie php, na samej górze dodałam

<?php 
$filename = 'bonuspage.html'; 
header('Content-disposition: attachment; filename=' . $filename); 
header('Content-type: text/html'); 
// ... the rest of your file 
?> 

I Zastanawiam się, w jaki sposób mogę połączyć obie funkcje, ponieważ gdy klikam jeden z przycisków, zawsze otwiera się podgląd. Nie mogę pobrać pliku do użytku ...

Odpowiedz

0

Umieść dwa bu ttons takie jak ten:

<script type="text/javascript"> 
    function myFunction(el) { 
     $(el).parents('form').first().attr('target','_blank').find('input[name="what"]').val('download'); 
    } 
</script> 

<form method="GET"> 
    <input type="hidden" name="what" value="preview" /> 
    <input type="submit" value="Preview" /> 
    <input type="button" value="Download" onclick="myFunction(this)" /> 
</form> 

ten sposób, dostaniesz dodatkową zmienną o nazwie what wskazuje, który przycisk został naciśnięty.

A w pliku PHP, po prostu zrobić:

<?php 
$filename = '/complete/path/of/the/file.html'; 
if($_GET['what'] === 'preview') { 
    // 
} else { 
    header('Content-disposition: attachment; filename=' . basename($filename)); 
    header('Content-type: text/html'); 
} 

echo file_get_contents($filename); 

?> 

Jest jeszcze inny sposób, z dwoma przedłożyć przyciski z nazwami i różnymi wartościami i można sprawdzić, że w skrypcie PHP, ale nadal trzeba używać JavaScript dla target="_blank" do pobrania.

Niejszym podejściem jest użycie składni HTML5 <a download>. Sprawdź this link.

2

musisz wysłać dodatkowego parametru action i sprawdzić w pliku programu obsługi PHP (ten, wymieniony w <form action=) dla 2 różnych wartości (np. „Pobierz” & „preview”).

Biorąc pod uwagę następujące HTML:

<form method="GET" action="your/handler.php" id="myform"> 
    <input type="hidden" name="action" id="action" value="preview" /> 
    <input type="button" value="preview" id="preview"/> 
    <input type="button" value="download" id="download"/> 
</form> 

można łatwo utworzyć funkcję przełączania ręcznie i wysłać formularz.

function toggleAction(e) { 
    var target = $(e.target); 
    $('#action').val(target.attr('value')); 
    $('#myform').submit(); 
} 
$('#preview').on('click', toggleAction); 
$('#download').on('click', toggleAction); 

Lub jeśli chcesz uniknąć konieczności przeładowania strony (z tym podejściem, bez potrzeby dodatkowego ukrytego pola):

function toggleAction(e) { 
    var target = $(e.target); 
    $.ajax({ url: 'your/handler.php', data: { action: target.attr('value') }) 
    .done(function(data) { 
     // process returned data (from echo statement in handler) 
    });  
} 

W pliku PHP:

<?php if($_GET['action'] === 'preview') { 
    // preview code 
} else { 
    // download code 
} ?>