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!
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
Où se trouve test.php? Quelles redirections se produisent selon les outils de développement de votre navigateur? – janh
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