web-dev-qa-db-fra.com

Mon URL d'action de formulaire est ajouté à un répertoire qui n'existe pas

J'essaie de permettre aux utilisateurs de télécharger de l'audio via un formulaire et une requête HTTP POST.

Voici le code de formulaire approprié, extrait de mon page-profile.php:

<form method="post" action="wp-content/themes/freelanceengine-child/audio_upload.php" enctype="multipart/form-data">
                              <input type="file" name="file" id="file" accept="audio/*">

Mais le navigateur n'atteint jamais mon fichier php. Le message d'erreur suivant s'affiche: La ressource demandée /profile/wp-content/themes/freelanceengine-child/audio_upload.php est introuvable sur ce serveur.

Ce répertoire profile ne se trouve nulle part sur mon site, je ne sais donc pas pourquoi il est ajouté à l'URL. J'ai essayé de redémarrer le serveur et d'expérimenter avec différentes URL et navigateurs, mais/profile est systématiquement ajouté.

Si vous avez un aperçu, aidez-moi à comprendre pourquoi cela se produit. Je peux probablement le réparer si je sais pourquoi il est cassé.

Sur une note de côté, je suppose qu'un plugin serait la meilleure façon de faire quelque chose comme ça, mais honnêtement je n'ai jamais travaillé avec des plugins wordpress, donc je m'en tiens à ce que je sais pour le moment.

1
Keenan Diggs

Vous ne devriez pas utiliser d'URL relative. J'ai déjà écrit un certain nombre de réponses à ce sujet Les URL relatives sont relatives à la page sur laquelle vous vous trouvez comme le navigateur le voit. Avec de jolis permaliens activés, cela fonctionnera presque toujours mal. Ce problème/erreur est si courant que j'ai deviné la réponse simplement en regardant votre titre.

Deuxièmement, vous ne devriez pas vous soumettre à un fichier de thème autonome comme celui-ci. Utilisez l'API AJAX (même si ce n'est pas réellement une demande AJAX). C'est très très simple:

function my_ajax_wpse_213294() {
  // your upload code

  exit();
}
add_action('wp_ajax_my_ajax', 'my_ajax_wpse_213294'); // logged in only
add_action('wp_ajax_nopriv_my_ajax', 'my_ajax_wpse_213294');

Soumettre à /wp-admin/admin-ajax.php qui peut être créé avec admin_url('/admin-ajax.php'); avec le paramètre URL ?action=my_ajax.

1
s_ha_dum