2017-09-25 9 views
0

Je ne parviens pas à télécharger le fichier image dans la base de données mysql après l'envoi du formulaire. Je reçois le message d'erreur:Je ne suis pas en mesure de télécharger le fichier image dans la base de données mysql en utilisant ajax jquery en php

Uncaught TypeError: Illegal invocation

dans mon onglet de console d'élément d'inspection.

<!DOCTYPE html> 

<html> 
<head> 
    <title>Ajax Test</title> 
    <style> 
     .error{ 
      color: red; 
     } 
     .success{ 
      color: green; 
     } 
     .input-error { 
      box-shadow: 0 0 5px red; 
     } 
     .input-success { 
      box-shadow: 0 0 5px green; 
     } 
    </style> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> 
    <script> 
     $(document).ready(function() { 
      $('form').submit(function (event) { 
       event.preventDefault(); 
       var inp = $("#t_input").val(); 
       var file = $("#t_file").val(); 
       var sub = $("#t_submit").val(); 
       $(".test_msg").load("hello_ajax.php", { 
        inp: inp, 
        type: "POST", 
        url: "hello_ajax.php", 
        file: new FormData($(file)[0]), 
        contentType: false, 
        cache: false, 
        processData: false, 
        success: function(feedback){ 
         $("#t_file").val(""); 
        }, 
        sub: sub 
       }); 
      }); 
     }); 
     </script> 

</head> 
<body> 
    <h2>Testing Ajax</h2> 
    <form action="hello_ajax.php" method="POST"> 
     <input id="t_input" type="text" name="tst_input" placeholder="Hello" /> 
     <input id="t_file" type="file" name="tst_file"/><br/> 
     <input id="t_submit" name="submit" type="submit" value="submit" /><br/> 
     <p class="test_msg"></p> 
    </form> 
</body> 
</html> 

Voici le code php pour télécharger le fichier à la base de données mysql ci-dessous après la redirection

<?php 
    $host = "127.0.0.1"; 
    $id = "root"; 
    $pass = ""; 
    $db = "test_mysql"; 

    try{ 
     $conn = new PDO("mysql:host=$host; dbname=$db", $id, $pass); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    }catch(PDOException $e){ 
     echo "Error" . $e->getMessage(); 
    } 

    if (isset($_POST['sub'])){ 


     if(isset($_FILES["t_file"])){ 
      $file = $_FILES['t_file']; 
      $sql = "ISERT INTO uploadimage (imgName) VALUES (:img)"; 
      $stmt->prepare($sql); 
      $stmt->bindValue(":img", $file, PDO::PARAM_STR); 
      $stmt->execute(); 
     }else{ 
      echo "<span class='error'> Unable to input file </span><br/>"; 
     } 

     $in = $_POST["inp"]; 

     $blk = false; 

     if (empty($in)){ 
      echo "<span class='error'>Field must not be empty! </span>"; 

      $blk = true; 
     }else{ 
      echo "<span class='success'>" . $in . "Successfull</span>"; 

     } 
    }else{ 
     echo "<span class='test_msg'>There is some Error </span>"; 

    } 
?> 
<script> 
    $("#test_input").removeClass("input-error"); 
    var blk = "<?php echo $blk; ?>"; 

    if(blk == true){ 
     $("#t_input").addClass("input-error"); 
     $("#t_input").val(""); 
    } 
    if(blk == false){ 
     $("#t_input").val(''); 
    } 
</script> 
+2

Copie possible de [Comment puis-je télécharger des fichiers de façon asynchrone?] (Https://stackoverflow.com/questions/166221/how-can-i-pload-files-asynchronously) –

Répondre

0

Le tableau $_FILES contient des métadonnées sur le fichier, pas le fichier lui-même. Le fichier réel est stocké dans un fichier temporaire au $_FILES['t_file']['tmp_name']. Vous pouvez obtenir le contenu en utilisant

$file = file_get_content($_FILES['t_file']['tmp_name']); 

Vérifiez la documentation pour la structure complète du tableau.

+0

Vous devriez vérifier '$ _FILES ['t_file '] [' error '] 'avant d'essayer d'utiliser le fichier aussi. – solarc