2016-04-18 16 views
0

Hier ist mein Problem. Ich habe versucht, ein Bild hochzuladen, und ich speichere Bilder in einem entsprechenden Ordner und Bildpfad in der Datenbank mit Hilfe dieser URL.Bild mit Ajax und PHP hochladen

http://www.lionblogger.com/how-to-upload-file-to-server-using-php-save-the-path-in-mysql/.

Wenn ich auf diese Weise versucht habe, bekomme ich die richtige Antwort. Nachdem ich den gleichen Code mit AJAX versucht habe funktioniert nicht richtig. Ich weiß nicht, was ich falsch gemacht habe. Unten ist mein Code.

HTML-Code

<div class="input-group form-group"> 
<label> Upload Your Photo </label>        
<input type="file" name="upload_photo" id="upload_photo"> 
</div> 
<div class=""> 
<input type="submit" class="btn btn-success btn-lg " name="upload_files" id="upload_files" value="UPLOAD" > 
</div> 

AJAX Code

$("#upload_files").click(function(event){ 
     event.preventDefault(); 
     var upload_photo1 = $('#upload_photo').val(); 
     var photo= upload_photo1.split('\\').pop().split('/').pop(); 
     var datas="photo="+photo; 
    alert(datas); 
    if(photo==''){ 
     sweetAlert({ 
     title: "WARNING!!!", 
     text: "Please Upload All Corresponding Documents And Try Again !!!!", 
     type: "warning" 
     }); 
    } else { 
    $.ajax({ 
     type: "POST", 
     url: 'php/upload_files.php', 
     data:datas 
     }).done(function(data) { 
      alert(data); 
     }); 
    } 
}); 

Und meine PHP-Datei Upload_files.php

<?php 
    $fileExistsFlag = 0; 
    $fileName = $_POST['photo']; 
    var_dump($fileName); 
    $link = mysqli_connect("localhost","root","","spark") or die("Error ".mysqli_error($link)); 

    $query = "SELECT filename FROM filedetails WHERE filename='$fileName'"; 
    $result = $link->query($query) or die("Error : ".mysqli_error($link)); 
    while($row = mysqli_fetch_array($result)) { 
     if($row['filename'] == $fileName) { 
      $fileExistsFlag = 1; 
     }  
    } 

    if($fileExistsFlag == 0) 
    { 
     $target = "files/";  
     $fileTarget = $target.$fileName;  
     $tempFileName = $_FILES["fileName"]["tmp_name"]; 
     $fileDescription = $_POST['Description']; 
     $result = move_uploaded_file($tempFileName,$fileTarget); 
     $ext = end(explode('.', $fileName)); 
     if ($_FILES["fileName"]["size"] > 2097152) 
     { 
     echo "Sorry, your file is too large."; 
     $uploadOk = 0; 
     } 
     else if($ext != "jpg" && $ext != "png" && $ext != "jpeg"&& $ext != "gif") 
     { 
     echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
     $uploadOk = 0; 
     } 
    else 
    { 
     if($result) { 
      echo "Your file <html><b><i>".$fileName."</i></b></html> has been successfully uploaded";  
      $query = "INSERT INTO filedetails(filepath,filename,description) VALUES ('$fileTarget','$fileName','$fileDescription')"; 
      $link->query($query) or die("Error : ".mysqli_error($link));    
     } 
     else {   
      echo "Sorry !!! There was an error in uploading your file";   
     } 
    } 
     mysqli_close($link); 
    } 

    else { 
     echo "File <html><b><i>".$fileName."</i></b></html> already exists in your folder. Please rename the file and try again."; 
     mysqli_close($link); 
    } 
?> 

Fehler, was im immer ist enter image description here

Bitte bear meine Zweifel .. Anfänger von PHP.Kindly Helfen Sie mir aus diesem Problem heraus.

+0

Mögliche Duplikat von [ jquery ajax Dateiupload php] (http://stackoverflow.com/questions/23980733/jquery-ajax-file-upload-php) – Shadow

+0

Sie senden nur den Namen der Datei (falls vorhanden) in Ihrer Ajax-Anfrage, nicht den Inhalt der Datei. Im verknüpften Thema finden Sie einen Beispielcode zum Hochladen von Dateien. – Shadow

Antwort

1

Sie haben schwerwiegende Probleme mit Ihrem Code in js und PHP. Sie haben die Datei überhaupt nicht hochgeladen. Sie haben gerade den Dateinamen hochgeladen. Es gibt keine Beschreibung als Eingabe, aber in Ihrem PHP-Code haben Sie eine Beschreibungsvariable unbehandelt. Sie haben die Datei mit dem falschen Namen bearbeitet.
Versuchen Sie, die Datei mit FormData hochzuladen. Zuerst verwenden Sie das Formular-Tag mit einem id

<form id='myform'> 
<div class="input-group form-group"> 
<label> Upload Your Photo </label>        
<input type="file" name="upload_photo" id="upload_photo"> 
</div> 
<div class=""> 
<input type="submit" class="btn btn-success btn-lg " name="upload_files" id="upload_files" value="UPLOAD" > 
</div> 
</form> 

und in den js,

formData = new FormData($("#myForm")[0]); 
    formData.append("photo", photo);//your photo name 

und in der Anfrage AJAX, schreiben

data: formData, 

und in Ihre PHP-Datei

<?php 
$fileExistsFlag = 0; 
$fileDescription ='No idea where this came from'; 
$fileName = $_POST['photo']; 
$link = mysqli_connect("localhost","root","","spark") or die("Error ".mysqli_error($link)); 

$query = "SELECT filename FROM filedetails WHERE filename='$fileName'"; 
$result = $link->query($query) or die("Error : ".mysqli_error($link)); 
while($row = mysqli_fetch_array($result)) { 
    if($row['filename'] == $fileName) { 
     $fileExistsFlag = 1; 
    }  
} 

if($fileExistsFlag == 0) 
{ 
    $target = "files/";  
    $fileTarget = $target.$fileName;  
    $tempFileName = $_FILES["upload_photo"]["tmp_name"]; 
    $result = move_uploaded_file($tempFileName,$fileTarget); 
    $ext = end(explode('.', $fileName)); 
    if ($_FILES["upload_photo"]["size"] > 2097152) 
     { 
     echo "Sorry, your file is too large."; 
     $uploadOk = 0; 
     } 
    else if($ext != "jpg" && $ext != "png" && $ext != "jpeg"&& $ext != "gif") 
    { 
     echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
     $uploadOk = 0; 
    } 
else 
{ 
    if($result) { 
     echo "Your file <html><b><i>".$fileName."</i></b></html> has been successfully uploaded";  
     $query = "INSERT INTO filedetails(filepath,filename,description) VALUES ('$fileTarget','$fileName','$fileDescription')"; 
     $link->query($query) or die("Error : ".mysqli_error($link));    
    } 
    else {   
     echo "Sorry !!! There was an error in uploading your file";   
    } 
} 
    mysqli_close($link); 
} 

else { 
    echo "File <html><b><i>".$fileName."</i></b></html> already exists in your folder. Please rename the file and try again."; 
    mysqli_close($link); 
} 
?> 
+0

in js Datei was dieses Foto bedeutet .. Ich habe Fehler in dieser Zeile –

+0

Uncaught ReferenceError: Foto ist nicht definiert Dies ist der Fehler –

+0

@KavyaShree 'var photo = upload_photo1.split ('\\'). Pop(). Split ('/'). pop(); 'Es ist von Ihrem eigenen Code. Der Code ist unvollständig. Sie müssen den vollständigen Code selbst schreiben – khandelwaldeval

0

Das Problem ist, dass Sie nicht p sind Assing die Datei Daten - nur der Name. In dem Beispiel von Ihrem Link wird ein Formular gesendet (mit enctype = "multipart/form-data", was bedeutet, dass Sie binäre Daten übergeben).

Der PHP-Code greift auf die Dateidaten über die Variable $ _FILES ["Dateiname"] ["tmp_name"]; Denn beim Hochladen einer Datei wird sie in einem temporären Ordner mit einem temporären internen Namen gespeichert (das ist das Element tmp_name). Durch einfaches Ändern von "Dateiname" in "Dateiname" im Index erhalten Sie nicht Ihre tatsächlichen Dateidaten.

So eine schnelle Lösung ist, das Eingabefeld in einer acutal Form (mit dem enctype = "multipart/form-data") zu wickeln, fangen Sie das Submit-Ereignis und übergeben Sie die gesamten Formulardaten im Ajax-Aufruf - also statt

data:datas 

Sie passieren

data: new FormData(this) 

Check-out am Beispiel hier: http://www.formget.com/ajax-image-upload-php/

EDIT: @khandelwaldeval mich zum einen schlagen swer ;-)

0

Ihr Code sieht kompliziert versuchen diese Vorlage für

  <form id="picupload"> 
      <input type="file" accept="image/png, image/jpeg, image/gif" id="upload_photo" name="upload_photo" Required/> 
      <button type="submit" name="save" class="btn btn-theme step6"></button> 
      </form> 

mit Hilfe von Javascript

 <script> 
     $("#picupload").submit(function(e) { 

       $.ajax({ 
        url: "php/upload_files.php", 
         type: "POST",    
         data: new FormData(this), 
         contentType: false,  
         cache: false,    
         processData:false,  
           success: function(data) 
           { 
           alert(data); 
           } 

           }); 
     e.preventDefault(); 
     }); 

     </script> 

für Ihre PHP-Code verwenden, der Verarbeitung der Datei

 <?php 
     $fileExistsFlag = 0; 
     $fileDescription ='No idea where this came from'; 
     $fileName = $_POST['upload_photo']; 
     $link = mysqli_connect("localhost","root","","spark") or die("Error ".mysqli_error($link)); 

     $query = "SELECT filename FROM filedetails WHERE filename='$fileName'"; 
     $result = $link->query($query) or die("Error : ".mysqli_error($link)); 
     while($row = mysqli_fetch_array($result)) { 
      if($row['filename'] == $fileName) { 
       $fileExistsFlag = 1; 
      }  
     } 

     if($fileExistsFlag == 0) 
     { 
      $target = "files/";  
      $fileTarget = $target.$fileName;  
      $tempFileName = $_FILES["upload_photo"]["tmp_name"]; 
      $result = move_uploaded_file($tempFileName,$fileTarget); 
      $ext = end(explode('.', $fileName)); 
      if ($_FILES["upload_photo"]["size"] > 2097152) 
       { 
       echo "Sorry, your file is too large."; 
       $uploadOk = 0; 
       } 
      else if($ext != "jpg" && $ext != "png" && $ext != "jpeg"&& $ext != "gif") 
      { 
       echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
       $uploadOk = 0; 
      } 
     else 
     { 
      if($result) { 
       echo "Your file <html><b><i>".$fileName."</i></b></html> has been successfully uploaded";  
       $query = "INSERT INTO filedetails(filepath,filename,description) VALUES ('$fileTarget','$fileName','$fileDescription')"; 
       $link->query($query) or die("Error : ".mysqli_error($link));    
      } 
      else {   
       echo "Sorry !!! There was an error in uploading your file";   
      } 
     } 
      mysqli_close($link); 
     } 

     else { 
      echo "File <html><b><i>".$fileName."</i></b></html> already exists in your folder. Please rename the file and try again."; 
      mysqli_close($link); 
     } 
     ?> 
+0

Nein ich bekomme Fehler mit diesem Code –