2017-07-15 2 views
1

J'ai 2 bouton dans une forme. Lorsque je clique sur le premier ou le deuxième bouton, les deux écrivent par exemple une alerte, mais la requête Ajax ne s'exécute pas. J'ai besoin d'un formulaire, parce que je voudrais télécharger des images. Je ne sais pas quel est le problème.jQuery Ajax forme deux soumettre le bouton sous une forme

page.php

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery Ajax two submit in one form</title> 
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
</head> 
<body> 

<form id="animal-upload" method="post" enctype="multipart/form-data"> 

    <span>Name:</span> 
    <input type="text" name="animalname" id="animalname"> 

    <span>Image:</span> 
    <input type="file" name="imagefile" id="imagefile"> 

    <button type="submit" name="publish" id="publish">Publish</button> 
    <button type="submit" name="save" id="save">Save</button> 

</form> 

<script> 

$(document).ready(function() { 

$('#animal-upload').on('submit', function() { 

    return false; 

}); 

$('#publish').click(function() { 

    alert("Test"); 

}); 

$('#save').click(function(e) { 

    e.preventDefault(); 

    $.ajax({ 

     url: "animal-upload.php", 
     type: "POST", 
     data: new FormData(this), 
     contentType: false, 
     processData: false, 
     success: function(data) { 

      alert(data); 

     } 

    }); 

}); 

}); 

</script> 

</body> 
</html> 

animal upload.php

<?php 

$connect = mysqli_connect("localhost", "root", "", "test"); 

mysqli_set_charset($connect,"utf8"); 

$status = ''; 

$animalname = $connect->real_escape_string($_POST["animalname"]); 

if ($_FILES['imagefile']['name'] != '') { 

    $extension = end(explode(".", $_FILES['imagefile']['name'])); 
    $allowed_type = array("jpg", "jpeg", "png"); 

    if (in_array($extension, $allowed_type)) { 

     $new_name = rand() . "." . $extension; 
     $path = "animals/" . $new_name; 

     if (move_uploaded_file($_FILES['imagefile']['tmp_name'], $path)) { 

      mysqli_query($connect, "INSERT INTO animals (animalname,image) VALUES ('".$animalname."','".$path."')"); 

      $status = 'Successful!'; 

     } 

    } else { 

     $status = 'This is not image file!'; 

    } 

} else { 

    $status = 'Please select image!'; 

} 

echo $status; 

?> 
+0

Essayez en spécifiant votre type de données. Puisque vous ne spécifiez pas, c'est juste deviner. – Difster

+0

Quel est le message d'erreur, car la requête ajax s'exécute avec succès – user10089632

Répondre

0

Après le procès et les erreurs que j'ai trouvé le travail de script si vous changez cette ligne:

data: new FormData($("#animal-upload")[0]), 

Parce que sélectionne l'objet de formulaire.

Vous pouvez envisager quelques conseils de sécurité:

  • Ne divulguez pas votre mot de passe en public
  • Ne laissez pas vos utilisateurs de bases de données se connecter sans mot de passe
  • Faire un utilisateur avec des privilèges strict minimum juste pour le but de se connecter à votre base de données à partir de scripts PHP (ça s'appelle le principe des moindres privilèges)
  • Renommez votre fichier téléchargé

Pour le téléchargement de fichiers à travailler:

  • Assurez-vous d'avoir les permissions sur le répertoire pointé par upload_tmp_dir dans le fichier php.ini
  • Vous devrez peut-être vérifier que la taille de votre fichier ne dépasse pas la directive memmory_limit trop

bonne chance,

+0

Merci! :) :) – patesz

+0

@patesz, de rien – user10089632