Показать информацию о файле?

Благодаря моим предыдущим сообщениям, некоторые из yall помогли мне установить этот фрагмент кода прямо здесь. :). В нем перечислены файлы в текущей папке.

<?php
foreach (glob("*") as $filename) {
echo "<th class=\"icon\"><img src=\"/Home/.res/save.png\"></th><th><a href=\"{$filename}\">{$filename}</a><th class=\"desc\"><a href=\"#open-modal\" onclick=\"loadDoc()\"><img src=\"/Home/.res/info.png\"></a></th></tr>";
}
?>

Теперь я хочу добавить кнопку «Информация» в конце каждого имени файла. Я имел успех. :) Единственное, что он может отображать только статический текст - я хочу, чтобы на этой вкладке информации отображалась информация о выбранном файле. Затем я провел небольшое исследование AJAX. Я придумал этот код:

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("info").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", ".info.php", true);
  xhttp.send();

Этот код успешно загружает динамически страницу с именем ".info.php". Вот сложная часть: как я могу заставить AJAX передавать переменную (имя файла) в .info.php - чтобы info.php мог отображать информацию о выбранном файле?

======= Обновлено: придумал этот код AJAX:

function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("info").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/Home/.info.php?filename=<?php echo "{$filename}" ?>", true);
  xhttp.send();
}

Теперь я могу передавать переменные! (Спасибо, Джефф) К сожалению, переданная переменная всегда устанавливается как последний файл в списке, а не устанавливается выбранным файлом. Какие-нибудь советы?

========= РЕДАКТИРОВАТЬ # 2 =========== Мой код прямо сейчас: Во-первых, это PHP

<?php
foreach (glob("*") as $filename) {
    echo "<th class=\"icon\"><img src=\"/Home/.res/save.png\"></th><th><a href=\"{$filename}\">{$filename}</a><th class=\"desc\"><a href=\"#open-modal\" onclick=\"loadDoc(<?php echo $filename ?>)\"><img src=\"/Home/.res/info.png\">                </a></th></tr>";
}
?>

Теперь о AJAX:

function loadDoc(filename) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("info").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/Home/.info.php?filename = " + filename, true);
  xhttp.send();
}

Ваше здоровье.

либо вы добавляете его в info.php?file=thename, либо изменяете свой ajax на запрос POST и добавляете это имя файла в данные POST через xhttp.send(parameters);

Jeff 09.12.2018 23:58

Нет, запрос POST через ajax не приведет к перезагрузке страницы. GET / POST / PUT / .. - это только глаголы протокола http.

Jeff 10.12.2018 00:02
«Как я могу поместить туда переменную?» -> добавить его как параметр к вызову loadDoc: onclick=\"loadDoc('$filename')\"
Jeff 10.12.2018 00:04
осторожность: вы попадаете в критическую ситуацию, когда позволяете пользователю получать информацию о вашей файловой системе, особенно когда вы принимаете ввод данных пользователем для имен файлов. будьте осторожны, чтобы имя файла не было таким, как ../../xy. Сделайте белый список.
Jeff 10.12.2018 00:08

Я все изменил, как ты сказал. Последнее, что вы сказали изменить, выглядит следующим образом: xhttp.open("GET", "/Home/.info.php?filename = " + filename, true); - Теперь я не получаю вывода.

user10736793 10.12.2018 01:57

Просто проверил мою консоль, прежде чем опубликовать это. Надо было сделать это раньше, лол. С вашими исправлениями он теперь что-то выводит (ура!), Но переменные отсутствуют. Между прочим, файл PHP, который принимает переменные, не неисправен - я его тестировал, он работает.

user10736793 10.12.2018 02:21

На этот раз в консоли нет абсолютно никаких ошибок ... Просто кажется, что он не отправляет переменную "filename" в другую мою php штуку ..

user10736793 10.12.2018 02:24

НАШЛИ ЭТО! В переменной, которую мы только что отладили, была еще одна ошибка: я заменил loadDoc('<?php echo $filename ?>') на loadDoc('{$filename}'). По неосторожности мы дважды указали, что выводим строки PHP.

user10736793 10.12.2018 02:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо передать конкретное имя файла в качестве параметра на вашу страницу PHP.

Проблема с вашим первым обновлением заключается в том, что foreach выполняет итерацию по массиву, присваивая значение «временной» переменной.

foreach (glob("*") as $filename) {

После завершения итерации эта переменная ($filename, которую следует рассматривать как временную) содержит только последнее значение этого массива. Итак, ваша функция JS просто имеет статически определенное имя файла.

Вызов JS должен передавать имя файла, а функция JS должна принимать значение и использовать его при выполнении вызова.

PHP:

onclick=\"loadDoc('{$filename}')\"

JS:

function loadDoc(filename) {
....
     xhttp.open("GET", "/Home/.info.php?filename = " + filename, true);

Другие вопросы по теме