2014-01-30 4 views
0

Я пытаюсь загрузить файл с помощью ajax и php без обновления страницы и для отправки. мой код может запускать и предупреждать действительное сообщение, если я просто делаю preg_match, но когда я добавлю остальную часть проверки, которая должна использовать $_FILES[$filrec]["tmp_name"], она не сообщит мне действительное сообщение.Как загрузить файл без отправки формы?

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

Существует множество различных предложений и примеров с более сложными методами javascript или jquery, но я стараюсь просто ajax и оставляю остальное для PHP. возможно ли это с помощью моей функции ajax?

Javascript:

var fileselected = $("#browse").val().replace(/C:\\fakepath\\/i, ''); 
    setTimeout(function() { 

        $.ajax({ 
        type: 'POST', 
        url: "ajax/extval.php", 
        data: {fileprs: fileselected}, 
        dataType: 'json', 
        cache: false, 
         success: function(resuval) { 
          // file validation result 
          if (resuval === "valid"){ 
            alert ("valid") 

PHP:

<form id="upload" method="post" class="<?php echo $orvalue."<separator>".$user_id ?>" action="" enctype="multipart/form-data"> 
     <div id="formcontent"> 
     <label class="required" for="unitprice" title="Unit price"><input type="text" id="unitprice" name="unitprice" />Unit price</label> 
     <label class="required" for="qty" title="How many pcs"><input type="text" id="qty" name="qty" />Quanity</label> 
     <label class="required" for="express" title="Express within China"><input type="text" id="express" name="express" />Express</label> 
     <label class="required" for="linkURL" title="Insert a full URL http:\\"><input type="text" id="linkURL" name="linkURL" />Link</label> 
     <label for="yourdesc" title="Describe your need clearly"><textarea id="yourdesc" name="yourdesc"></textarea>Description<li><font size="-2">You can type 400 letters only, you typed :</li><li id="lettercounter"></li>letters</font></label> 
     <label for="formsubmit" class="nocontent"><input type="button" id="submitButton" href="#" class="progress-button" value="Add to order" /><strong>Note:</strong> Items marked <img src="../../images/required.jpg" alt="Required marker" width="20" height="20" /> are required fields</label> 

     </div> 
    </form> 

PHP:

$filrec =mysql_real_escape_string($_POST['fileprs']); 

    if(preg_match("/\.(gif|png|jpg|JPG|jpeg|bmp|BMP)$/", $filrec)) 
    { 

    $fileType = exif_imagetype($_FILES[$filrec]["tmp_name"]); 
     $allowed = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); 
    $allin = "valid"; 
     echo json_encode($allin); 
} 

Оценил

+0

именно поэтому вы делаете побег mysql на 'fileprs'? Вы делаете это только тогда, когда буквально собираетесь использовать escape-строку в запросе sql. Использование его для каких-либо других целей не является хорошей идеей. –

+0

- единственная проблема? –

+1

'fileselected' также не существует в любом месте ИСКЛЮЧЕНИЕ, где вы набиваете его в вызов ajax ... –

ответ

0

Вы можете использовать следующий PHP-код, чтобы получить файл получил от Ajax:

$ данных = раскол ("", file_get_contents ('PHP: // ввод'));

$ img_data = base64_decode ($ data [1]);

file_put_contents ('uploads /'. $ _SERVER ['HTTP_X_FILENAME'], $ img_data);

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