Как объединить два входа, которые находятся в разных формах - PullRequest
1 голос
/ 25 июня 2019

У меня есть страница индекса, которая загружает файл. Кнопка ввода выполняет загрузку файла, а другая импортирует оценки во внешнюю систему. Чтобы импортировать оценки, пользователь должен пройти аутентификацию. Из-за этого я создал две формы, и каждая кнопка находится в форме. Тем не менее, это не работает, потому что в первый раз, когда вы загружаете оценку и нажимаете на импортируемые оценки, она работает просто отлично. Во второй раз, когда я нажимаю кнопку «Загрузить файл», он одновременно выполняет оценку импорта. Как мне разделить эти действия или, лучше, добавить эти два действия в одну и ту же кнопку?

Я уже пытался объединить обе формы, добавив action="authenticateUser.php" к первой form и удалив вторую form, но это не работает.

<title>Import Grades Widget</title>

<form action="" method="POST" enctype="multipart/form-data">
  <labeL class="tool-actions"> <span>Choose CSV File:</span></labeL>

  <input class="tool-actions" type="file" accept="text/csv" id='uploadfile' name="userfile" />
  <p>
    <!--add space btw buttons -->
    <br>
    <input class="btn-primary" type="submit" name="send" id="btnSend" value="Upload file" />

    <labeL class="tool-actions"> <span></span></labeL>
    <?php
       require_once "upload.php";                
     ?>
    <p id="info-message-crn" style="color:red"></p>
</form>

<form method="POST" enctype="multipart/form-data" action="authenticateUser.php" id="configForm">
  <input class="btn-primary" type="submit" id="btnImport" name="btnImport" value="Import Grades" />
  <?php 
  if(file_exists("uploads/uploadFile.csv") AND isset($_POST['btnImport'])) {  
      require_once ('apiCalls.php');  
  }else {
      ?>
  <p style="color:grey" id="info-message">
    <?php echo "Select a csv file.";?>
  </p>

  <?php
  }
  ?>
</form>

1 Ответ

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

Я бы изменил способ размещения вашей логики, потому что в настоящее время она слишком сложна.Сохраняйте вещи очень простыми с 3 простыми файлами.

  • index.php - основной файл «отображения», который отображает только формы.Больше ничего не делает.
  • upload.php - обрабатывает часть загрузки и перенаправляет обратно на index.php
  • process.php - аутентифицирует пользователя, обрабатывает все ожидающие файлы, затем перенаправляет обратно на индекс.php

Обратите внимание, что каждая форма отправляет данные в собственный обработчик ( upload.php и process.php ).Это делается с помощью атрибута action формы.Этот обработчик отвечает за фактическую логику загрузки или обработки ожидающего файла.

После того, как обработчик завершил свою работу, он перенаправляет обратно в index.php, который будет отображать форму загрузки и, при необходимости, также отображать форму процесса.

index.php

// Notice the actions on the forms. Each form sends data to its own handler
<form name="upload" method="post" action="upload.php" enctype="multipart/form-data">
    ...
    // Don't include any logic in here - only inputs and buttons.
    // All the upload logic is in upload.php
</form>

// Only show this form if there are pending files to process
// ** Side note - this could just be a link which points to process.php
// ** It does not need to be a form. 
if (exists (pending file(s) to process) {
    <form name="process" method="post" action="process.php">
        ...
        // Don't include any logic in here - only inputs and buttons.
        // All the processing logic is in process.php
    </form>
}

upload.php

<?php
if (request method === POST) {
    upload file logic
}

redirect back to index.php

process.php

<?php
if (request method === POST) {
    authenticate user - if !authenticated > redirect to login
    process the file 
}

redirect back to index.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...