2017-10-08 3 views
0

J'ai un problème avec la proposition d'un fichier à sauvegarder (csv) en cliquant sur un bouton sur un site wordpress que je suis en train de créer. J'ai simplifié mon code au strict minimum et cela ne fonctionne toujours pas.PHP rediriger au lieu de proposer le téléchargement

Mon code modèle de page:

<?php 
/* 
Template Name: My Awesome Custom Page 
*/ 

get_header(); ?> 
<html> 
<form style= "text-align:center;" name="getcsv" action="test.php"  method="post"> 
<select id="ddl"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> <br/> 
<input name= "export_excel" type="submit" value="Extraire"/> 
</form> 
</html> 
<?php get_footer(); 

Et le fichier test.php a:

<?php 

if(isset($_POST["export_excel"])) 
{ 
header('Content-type: application/xls'); 
header('Content-Disposition: attachment; filename="test.xls"'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
$headers = array('Type of Activity', "Number of Activities", "Hours of   Instruction"); 
$row_1 = array($_POST['ddl'], $_POST['ddl'], $_POST['ddl']); 
$output = implode(',',$headers); 
$output.= "\n"; 
$output.= implode(',',$row_1); 
$output.= "\n"; 
} 
?> 

Lorsque je clique sur le bouton, il me redirige de http://localhost/test/pagedetest à http://localhost/test/pagedetest/test.php et je bien sûr obtenir un 404 puisque cette page n'a jamais été créée.

Ceci est juste un cas de test donc je peux construire dessus pour faire quelque chose d'un peu plus compliqué mais même cela ne fonctionne pas.

J'ai essayé d'utiliser la fonction fputcsv plutôt sur juste un simple écho en php: // sortie et en utilisant un appel ajax à la place d'une forme, mais qui ne m'a rien donné (pas d'erreur ou quoi que ce soit)

Si quelqu'un a une idée de la raison pour laquelle cela se passe, merci d'avance!

Désolé si c'est une question stupide, mais mon google-fu ne se sont pas quoi que ce soit et je ne joue soit avec ou PHP pour wordpress longtemps ...

Cheers!

Répondre

0

action="test.php" soumettra le formulaire à un fichier appelé test.php dans le répertoire en cours. Je suppose que votre test.php est au http://localhost/test/test.php ou http://localhost/test.php. Utilisez le chemin absolu (/test.php ou /test/test.php) comme action et voyez si cela vous aide.

+0

Merci pour la réponse. J'ai essayé votre solution mais pas de dés. Je reçois http: //localhost/test/pagedetest/test/test.php ou http: //localhost/test.php en tant que redirection. Ce que je ne comprends pas, c'est pourquoi il essaie de changer mon URL. Si je fais un appel Ajax il traiterait simplement les données que je l'ai envoyé et retournerai ce que je veux. Pourquoi le ferait-il différemment ici? – GunslingerPanda

+0

Où se trouve test.php? Quelles redirections se produisent selon les outils de développement de votre navigateur? – janh

+0

Ok, ce que vous avez dit m'a mis sur la bonne voie, wordpress a apparemment besoin que vous ayez explicitement besoin de spécifier le chemin avec la fonction get_template_uri. Une fois que vous ajoutez cela au nom de fichier, cela fonctionne très bien. Merci beaucoup! – GunslingerPanda