как определить '. $ файл.' в качестве ключевого POST-массива - PullRequest
0 голосов
/ 11 июня 2019

У меня была проблема с моим PHP-скриптом. Я использую php, чтобы показать все мои изображения в папке «gambar», а затем я хочу добавить команду кнопки в каждое изображение, которое я показал, в другую папку, которую я уже сделал. Я использую синтаксис POST и имел проблемы с ним. кнопка появляется, но не выполняет команду для перемещения файла, который я выбрал. это сценарий, который я использую, кто-нибудь может мне помочь с этим?

    <?php

    $folder = "gambar"; //folder tempat gambar disimpan
    $handle = opendir($folder);
    echo '<table cellspacing="5" cellpadding="10" width="90%" >';
    echo '<tr>';
    $i = 1;
    while(false !== ($file = readdir($handle))){
    if($file != '.' && $file != '..'){
    echo '<td style="border:1px solid #000000;" align="center" >

      <div class="hvrbox">
      <img src="gambar/'.$file.'" alt="Mountains" class="hvrbox-layer_bottom" 
      width="100%" />
      <div class="hvrbox-layer_top">
      <div class="hvrbox-text"> '.$file.'.</div>
      </div>
      </div>
      <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
      <script type="text/javascript" src="js/hover-box.js"></script>    
            </select>
            <form method="post">
            <input type="hidden" select name="datae" value="'.$file.'" /> 

            >>> <input type="submit" name="upload" value="Upload" />
            --- 
            <input type="submit" name="delete" value="Delete" /><<<
            </form>
            <br /><b>NAMA FILE:</b>   '.$file.'</td>';

      if(($i % 1) == 0){
      echo '</tr><tr>';
      }
      $i++;
      }
      }
      echo '</tr>';
      echo '</table>';
      ?>

и прогрессировать POST im используя этот скрипт

            <?php
            // Turn off all error reporting
            error_reporting(0);

            if (isset($_POST['upload']) && isset($_POST['datae'])) {
            rename('gambar/'.$_POST['datae'], 'Upload/'.$_POST['datae']);
            echo "<meta http-equiv='refresh' content='1'>";
            }

            if (isset($_POST['delete']) && isset($_POST['datae'])) {
            rename('gambar/'.$_POST['datae'], 'delete/'.$_POST['datae']);
            echo "<meta http-equiv='refresh' content='1'>";
            }
            ?>

cz при использовании

      <form method="post">
      <input type="hidden" select name="datae" value="'.$file.'" />

так же

     ($_POST['datae']

по-прежнему не перемещает файлы в другую папку, похоже, что скрипт работал, но в целевую папку файлы не перемещались.

PS. Извините, мой английский - ПЛОХО. но я бы хотел, чтобы вы поняли, о чем я.

1 Ответ

0 голосов
/ 11 июня 2019

Вы забыли включить <form>. Поэтому, когда вы нажимаете кнопку «Отправить», вам нечего отправить. Оберните элемент формы вокруг кнопок и добавьте ввод для имени файла:

echo '
    ...
    <form method="post">
        <input type="hidden" name="file" value="'.$file.'" />
        >>> <input type="submit" name="upload" value="Upload" />
        --- 
        --- <input type="submit" name="delete" value="Delete" /><<<
    </form>
    ...';

Также в вашем серверном коде вы неправильно получаете значение из массива POST:

$_POST['.$file.']

Синтаксис нарушен, и кажется, что вы пытаетесь использовать само имя файла в качестве ключа в массиве POST. Отправленные данные в парах ключ / значение. Вы хотите использовать name значения для получения значения. Обратите внимание на атрибут name в моем скрытом вводе выше. Вот что вы бы использовали:

$_POST['file']
<ч />

Следует отметить несколько важных вещей, которые выходят за рамки задаваемого вопроса, но, безусловно, имеют отношение к этому:

  1. Если ваш код на стороне сервера находится на другой странице, вам нужно указать это в атрибуте action элемента <form> и обрабатывать переход между страницами назад и вперед.
  2. Если ваш код на стороне сервера находится на той же странице, но данные изменены после , вывод выводится, тогда вы не увидите обновлений, пока не перезагрузите страницу снова. Выполните запрошенные действия перед построением вывода.
  3. ПРЕДУПРЕЖДЕНИЕ: Вы разрешаете пользователям указывать имя файла , которое они хотят изменить на вашем сервере. Пользователи могут злоупотреблять этим доступом. Вы захотите добавить некоторую защиту, чтобы убедиться, что пользователю разрешено изменять этот файл. В его нынешнем виде ничто не мешает пользователю вручную указывать важные системные файлы, и ваш код будет слепо перемещаться / удаляться / и т.д. те файлы, которые могут повредить ваш сервер. Как правило, лучше всего хранить записи ваших файлов в базе данных и использовать идентификатор из базы данных для взаимодействия с пользователем, поэтому пользователь никогда не знает или не взаимодействует с файловой системой, а просто указывает идентификаторы. Это также позволяет управлять разрешениями, связывая определенные файлы с определенными пользователями и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...