2014-10-22 2 views
1

Я работаю над проектом, где я могу выбрать изображение (простой выбор файла) и отправить его через JSON на страницу вставки PHP MySQL.Декодировать Base64 строку в PHP, полученную от сообщения JSON

Загрузить страница выглядит следующим образом:

if (input.files && input.files[0]) { 
       var FR = new FileReader(); 
       FR.onload = function(e) { 
        $('#img').attr("src", e.target.result); 
        var Naam = $('input[type=file]').val(); 
        $('#base').text(e.target.result); 
        var Foto = e.target.result; 
        var Barcode = $('#barcode').val(); 
        obj['Barcode'] = Barcode; 
        obj['Naam'] = Naam; 
        obj['Foto'] = Foto; 

        //execute ajax send 

        $.ajax({ 
         url : 'insert.php', 
         type : 'POST', 
         data : obj, 
         dataType : 'json', 
         success : function(msg) { 
          alert("msg"); 
         } 
        }); 

        //$.post("insert.php", obj, function (data) {}, "json"); 
        //alert("msg"); 
       }; 
       FR.readAsDataURL(input.files[0]); 

и мой PHP страница:

$Barcode = $_POST["Barcode"]; 
$Naam = $_POST["Naam"]; 
$Name = preg_replace('/^.+[\\\\\\/]/', '', $Naam); 
$Foto = base64_decode($_POST["Foto"]); 

$query = "INSERT INTO voorraad_foto (barbody, location, foto) VALUES ('$Barcode','$Name','{$Foto}')"; 
$results = mysqli_query($db,$query); 

И мой стол поле является BLOB.

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

Я попытался с удалением

preg_replace('#data:image/[^;]+;base64,#', '', $Foto) 

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

Что я делаю неправильно, или есть что-то очевидное, что я не получаю?

Thx.

+2

Вы уязвимы для [SQL инъекций атаки] (http://bobby-tables.com), и Ваш запрос не будет в какой-то момент, потому что данные сырые бинарные изображения (если он загружен вообще/правильно) WILL естественно содержит '' 'и другие метасимволы SQL, нарушая ваш запрос. –

+0

Из любопытства, что такое SQL вашей таблицы voorraad_foto? –

+0

Я буду уточнять и защищать его от инъекций, когда он работает. просто пытаясь заставить его работать. И я проверил, запрос работает нормально, с этим изображением нет кавычек. Пробовал это с добавлением, тот же результат. И это моя таблица запроса: CREATE TABLE 'voorraad_foto' ( ' barbody' Int (8) неподписанных NOT NULL по умолчанию '0', ' location' VARCHAR (255) набор символов latin1 сверять latin1_bin по умолчанию NULL, ' foto' blob, ПЕРВИЧНЫЙ КЛЮЧ ('barbody') ) ENGINE = MyISAM DEFAULT CHARSET = latin1 –

ответ

0

Я решил это в какой-то образом:

Я написал функцию, которая получает строку Base64, декодирует его и записывает его в файл Temp. Затем я снова прочитал этот файл и загрузил его в свою базу данных. Когда удастся, удалите файл.

Это может быть не самый эффективный способ, но он работает!

function WriteToImageAndGetData($base64_string, $File) { 
//Write to file 
$ifp = fopen($File, "wb"); 
$data = explode(',', $base64_string); //Split Base64 string 
fwrite($ifp, base64_decode($data[1])); //Decode Base64 string 
fclose($ifp); 

//Read from file 
$fp = fopen($File, 'r'); 
$data = fread($fp, filesize($File)); //Read file contents 
$data = addslashes($data); 
fclose($fp); 
return $data; 

}

+0

Если вы идете таким образом, вы должны использовать реальный временный файл, используя память php: // temp или php: //. Для получения дополнительной информации см. Http://php.net/manual/en/wrappers.php.php –

Смежные вопросы