Как отправить из js в переменную php

400
10 декабря 2016, 10:15
<input type="file" onChange="var fr = new FileReader(); fr.readAsDataURL(this.files[0]); fr.onload = function(e){ window._img.src=e.target.result; console.log(e.target.result); }" />
<img id="_img" src=""/>

вот есть скрипт который берет из фото base64 и пихает его в src как сделать что бы base64 отправлялся в переменную php код на этой же странице?

Answer 1

PHP и JavaScript (jQuery) вообще не имеет общего между собой, передать переменный можно только посредством AJAX.

$.ajax({
    url: "",//файл который обрабатывает скрипт
    type: "POST",// метод 
    data: {'image': imageValue }, // переменная которая передается в PHP
    success: function (response) {}, // если успешно выполнено
    error: function (jqXHR, textStatus, errorThrown) // если ошибка
          { console.log(textStatus); }
     });

Ну а в PHP делаем так:

if (!empty($_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) &&
    strtolower($_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest') 
{
    if (isset($_POST[ 'image' ])) 
       {  //делаем то что нам нужно
          //если скрипт что то возвращает, и надо выводить эту инфу, 
          //то делаем так echo json_encode($printThisText);   }
}  die(); //забыл добавить сначала. Нужно для того чтобы прекратить 
          //выполнение после нужных действий

UPDATE: Примерное внедрение для твоего проекта

Я сейчас напишу небольшой пример, а ты уже подстроишь под себя: К сожалению, я никогда еще не работал с base64и с загрузкой файлов через AJAx, но принцип будет примерно одинаковый.

HTML:

Форма с инпутом:

 <form method="post" action="file.php"  enctype="multipart/form-data">
     <input type="file" name="uploadImage" value="" />
     <input type="submit" value="Загрузить изображение" name="uploadImage">
 </form>

enctype="multipart/form-data" - атрибут нужен если форма будет загружать файлы.

Атрибут input'a - name может для одного изображения указывается так: name="uploadImage", а если ты хочешь принимать несколько изображений, тогда указываешь name="uploadImage[]" - теперь будет принимать целый массив. Блок где это изображение будет выводиться:

<div> 
  <img id="dinamycImage" src=""/>
</div>

Например, пользователь выбирает файл, нажимает кнопку "Загрузить". Для начала, чтобы тебе получить base64 этого изображения, тебе его надо загрузить на свой сервер (если только ты не предоставляешь возможность выбора изображений этому пользователь).

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

Дальше, очень надеюсь что ты не пишешь весь код PHP и разметку HTML в одном файле. В файле, в котором находится PHP код (можешь сделать новый файл для обработки именно этого запроса) примерно будет так:

if (!empty($_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) &&
    strtolower($_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest') 
{
    if (isset($_POST[ 'image' ])) {  
         $uploadFile = $_FILES['uploadImage'];//Если ты хочешь принимать
         $imageUpload = uploadImageFunction($UploadFile); 
                      //функция загрузки изображений на сервер
                      //которая додэна возвращаться твой base64      
         echo json_encode($imageUpload); 
                      //после того как изображение обработалось, и                                       
                      //загрузилось, ты возвращаешь это всё дела в AJAX,
                      //та оно само примется, как результат выполнения 
                      //выше указаной ф-ции.
      }
}  die();

В фуннкции uploadImageFunction($UploadFile) в конце обработки должно быть следующее, ты должен вернуть этот шифр в AJAX:

$path = 'myfolder/myimage.png'; // путь к файлу
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
return $image = $base64;

Теперь на счет AJAX:

$.ajax({
        url: "",//файл который обрабатывает скрипт
        type: "POST",// метод 
        data: {'image': imageValue }, // переменная которая передается в PHP
        success: function (response) {
                 //здесь будет функция загрузки изображений
                 //которая возвращает этот base64
                if(response.imagePath){
                   $('#dinamycImage').attr('src', response.imagePath);
                      //и так вставляется фотография
                  }
              }, // если успешно выполнено
        error: function (jqXHR, textStatus, errorThrown) // если ошибка
              { console.log(textStatus); }
         });

Работоспособность я не проверял, но примерно так это должно происходить. Без загрузки изображения на сервер, у тебя это не получится. Я бы не рекомендовал делать загрузку посредством AJAX, но если нужно только так, тогда разбирайся.

READ ALSO
Как с помощью XPath достать текст

Как с помощью XPath достать текст

Есть путь к элементу

344
Symfony 1.4 include_component(&hellip;) Как вызвать асинхронно?

Symfony 1.4 include_component(…) Как вызвать асинхронно?

Друзья есть старый проект работающий на symfony 14

237
Несколько одинаковых полей, yii2

Несколько одинаковых полей, yii2

Здраствуйте, у меня есть таблица User и UserPhoneУ одного пользователя может быть несколько номером

458