2017-03-08 21 views
0

私はファイルのアップロードとフォームがあります。私は2つのタスクに実行したい:1つは、データをデータベースに提出し、AJAXを介してファイルをアップロードし、AJAXが成功した後にもう1つはaction.ajaxが正しく動作するようになるだろうが、AJAXの成功後にフォームアクションはうまくいきません。フォームアクションは、Ajax成功後に動作しません

userClass.php

main.php

<!doctype html> 
<html> 
    <head> 
     <!-- Latest compiled and minified CSS --> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

     <!-- Optional theme --> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 

     <!-- Latest compiled and minified JavaScript --> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 

     <script type="text/javascript"> 
      function mycall() { 

       //disable the default form submission 
       event.preventDefault(); 

       //grab all form data 
       var formData = new FormData(document.getElementById('data')); 

       $.ajax({ 
        url: 'addToMySQL.php', 
        type: 'POST', 
        data: formData, 
        async: false, 
        cache: false, 
        contentType: false, 
        processData: false, 
        success: function (returndata) { 
         alert(returndata); 
        } 
       }); 

       return false; 
      } 
     </script> 
    </head> 
    <body> 
     <form method='post' enctype="multipart/form-data" id="data" action="try.php" > 
      <div class="form-input"> 
       <label for="exampleSelect1" class="col-md-3 control-label">Type of Paper</label> 
       <div class="col-md-9"> 
        <select class="form-control" id="Otop" name="Otop" required> 
         <option value="1">1</option> 
         <option value="2">2</option> 
         <option value="3">3</option> 
         <option value="4">4</option> 
         <option value="5">5</option> 
        </select> 
       </div> 
      </div> 

      <div class="col-md-12"> 
       <div class="form-input"> 
        <label for="exampleSelect1" class="col-md-3 control-label">Paper upload</label> 
        <div class="col-md-9"> 
         <input type="file" id="file" name="profileImg" > 
        </div> 
       </div> 
      </div> 
      <div class="form-input"> 
       <div class="col-sm-12"> 
        <input type="submit" class="btn btn-primary btn-lg btn-block" onclick="mycall()" name="OrderSubmit" value="Order"> 
       </div> 
      </div> 
     </form> 
    </body> 
</html> 

addToMySQL.php

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
include("dbconfig.php"); 
include('class/userClass.php'); 

$userClass = new userClass(); 

$Otop   = $_POST['Otop']; 
$Odiscipline = $_FILES['profileImg']['name']; 

$target   = "uploads/";  
$fileTarget  = $target.$Odiscipline; 

$result   = move_uploaded_file($_FILES['profileImg']['tmp_name'], "uploads/".$_FILES['profileImg']['name']); 

$id    = $userClass->userOrderInfo($Otop,$Odiscipline, $fileTarget); 

if ($id) { 
    echo "done"; 
} else { 
    echo "Notdone"; 
} 

userOrderInfoののfuction私の頭の中で、これは明確な得るために[OK]を

/* User Payment */ 
    public function userOrderInfo($Otop, $Odiscipline, $fileTarget) 
    { 
      try { 
       $db = getDB(); 

       $stmt = $db->prepare("INSERT INTO orderinfo(Otop, Odiscipline, fileTarget) VALUES (:Otop, :Odiscipline, :fileTarget)"); 
       $stmt->bindParam("Odiscipline", $Odiscipline) ; 
       $stmt->bindParam("Otop", $Otop) ; 
       $stmt->bindParam("fileTarget", $fileTarget) ; 
       $stmt->execute(); 
       $db = null; 

       return true; 

      } catch(PDOException $e) { 
       echo '{"error":{"text":'. $e->getMessage() .'}}'; 
      } 
    } 
+0

あなたはそれがうまくいかないということを意味しますか?特定の詳細を教えてください –

+0

@CamiloGo ya ajaxが成功した後は、フォームアクションであるtry.phpには行かない。 –

+0

id = dataの要素は表示されません。 – scaisEdge

答えて

0

、どのようなあなたのコードがやっていることはこれです:

  1. フォームを記入し、あなたが提出されてからフォーム デフォルトのアクションを防止する「提出」をクリックします。その代わり、このフォームに データを取り、addToMySQL.php
  2. addToMySQL.phpにAJAXを経由して、それを提出し、その後、ファイルのアップロードを処理し、userOrderInfo()userOrderInfo
  3. userClass.php上を呼び出すPHPがため true扱いとさせていただきますどちらも (string)または (boolean) trueのいずれかを返します。 if()ステートメントの目的。
  4. addToMySQL.phpmain.php
  5. から(string) "done"の応答を返すAJAX呼び出しmain.phpaddToMySQL.phpからの応答を受け取り、"done"の内容とjavascriptのアラートをトリガーします。

これが書かれている方法で、フォームが、それはあなたがevent.preventDefault();を使用しているので、ちょうど絶えずaddToMySQL.phpにフォームの内容をAJAXしようとする行動特性だと代わりに使用することは決してありませんので。

ソリューション

は、迅速な解決にはJavaScriptがAJAX成功メソッドにリダイレクトする、またはあなたが、その後移入し、それを送信するために、ユーザーを送信するアクションを隠し<form>を追加するかだろうファイルがアップロードされたらjavascript。

どうすればいいですか?addToMySQL.phpを固定して、常に"done"を返信しないようにしてください。

+0

多くの方々....助けてくれてありがとうございました –

+0

probs @ManojMali。これが助けられた場合は、必ずアップホートして回答を受け入れてください。それは私の評判を高めるのに役立つだろう;) – Spholt

関連する問題