Как сделать, чтобы кнопка html предназначалась для определенного индекса массива в php? - PullRequest
2 голосов
/ 05 июня 2019

Я работаю над кодом html / php , как показано ниже. В нем по нажатию кнопки из HTML-кода он идет внутри блока foreach в строке # B в php .

<?php 
     $mp4_files = array_values($mp4_files); 
     print_r($mp4_files);  // Line #A
     if($_SERVER['REQUEST_METHOD'] == "POST")
    {       
     foreach ($mp4_files as $f)  // Line#B
     { 
            // conversion of mp4 into mp3 is happening, not pasting the full code. 
     }
    }
?> 

<form action="" method="POST">
 <table>
       <tr>
          <th>MP4 Name</th>
          <th>Action</th>
       </tr>
      <?php
        $mp4_files = array_values($mp4_files);
        foreach ($programs as $key => $program)  { 
       $file = $mp4_files[$key];     
       print_r($file);   // Line#B
       ?> 
       <tr>
          <td><?php echo basename($file); ?></td>
          <td><button type="submit" name="go-button" value="Go">Go</button</td>
       </tr>
   <?php } ?>
</table>
</form>

Приведенный выше html / php код отображает следующее содержание:

enter image description here

На скриншоте выше представлен список файлов mp4 с соответствующими кнопками.

Строка # A печатает следующий массив из кода html / php, приведенного выше :

Array ( [0] => 36031P.mp4 [1] => hello.mp4 ) 

И строка № B:

36031P.mp4 hello.mp4

В этот момент при нажатии кнопки «Перейти» из любой строки таблицы начинается преобразование всех файлов mp4 в mp3 (это не мое требование)

Постановка задачи:

Мне интересно, какие изменения я должен внести в приведенный выше код html / php, чтобы, если я нажму кнопку Go из 1-й строки выше на скриншоте, преобразование 1-й ряд Должен появиться файл mp4 в mp3, и наоборот

Ответы [ 3 ]

1 голос
/ 07 июня 2019

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

PHP / HTML

<?php foreach ($files as $key => $file) : ?>
    <tr>
        <td>
            <span class="file-name" data-id="<?php echo $key; ?>">
                <?php echo basename($file); ?>
            </span>
        </td>
        <td>
            <button type="submit"
                    class="go-btn"
                    name="go-button"
                    value="Go"
                    data-id="<?php echo $key; ?>"  >
                Go
            </button
        </td>
    </tr>
<?php endforeach; ?>

JavaScript (jQuery)

jQuery(document).ready(function($)
{
    $('.go-btn').click(function(e)
    {
        //pass in e(vent) to prevent the default behaviour of type="submit"
        e.preventDefault();

        let target = $(this).attr('data-id'),
            spanEl = $('.file-name[data-id='+ target +']');
        //do whatever with the spanEl - e.g. .text() to get value

        //send the file / ID - depending on how you're retrieving these files
        $.ajax({
            data: {key: 'value'}, //change to what you want
            type: 'post',
            url: '/path/to/script.php',
            success: function(res)
            {
                alert(res)
            },
            error: function(res)
            {
                //log the response for debugging
                console.log(res);

                //tell the user it failed
                alert('The dark elves have been here.. they broke it!')
            }
        })
    })
});

script.php

<?php
    # worth nothing that if you're posting a file (with intention of using $_FILES)
    # that you need to change your ajax, add `processData: false, contentType: false, cache: false`
    # and add `enctype="multimedia/form-data"` as an attribute to your form
    $value = $_POST['key']; # key: = index name

    # run conversion on the file
    # here we can add a success/error msg
    echo ($success ? 'It converted!' : 'Conversion failed');

К концу этого у вас должна быть файловая структура, похожая на (или, по крайней мере, я бы сделал это так):

Project_Root
----app
--------convert.php
----index.php
----pub
--------js
------------main.js
0 голосов
/ 06 июня 2019

Сделайте это, используя Ajax-запрос.

создайте функцию javascript convert_video внизу вашего html-файла

function convert_video(video_id){

    $.ajax({
        url: 'server.com/converttomp3.php',
        type: 'POST',
        data: {video_id:video_id},
        beforeSend: function(){
            //
        },
        success: function(data)
        {

            var crude = JSON.parse(data);

            if(crude.status){
                alert('Success message');
                window.location.href = window.location.href;
            } else {

                alert(crude.message);
            }


        },
        error: function (jqXHR, textStatus, errorThrown)
        {
            //Error

        }

Затем из HTML-кода в качестве зацикленного видео

<td><button type="submit" onclick="return convert_video('<?php echo $array['video_id'] ;')" name="go-button" value="Go">Go</button</td>

наконец в вашем серверном коде

if($_SERVER['REQUEST_METHOD'] == "POST")
{    
  $video_id = $_POST['video'];
  // processs your video here .
 }
0 голосов
/ 06 июня 2019

Грязный способ сделать это - добавить атрибут имени к каждой кнопке с соответствующим именем файла, к которому вы хотите прикрепить эту кнопку. При публикации вы получите ключ массива с именем файла, который необходимо преобразовать. Вам просто нужно перебрать свой массив MP4, чтобы получить совпадение по ключу.

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

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

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