2012-05-10 43 views
0

javascript參數「Step」應該在php中觸發一個開關函數。如果Step是一個比在php中觸發這段代碼並通過JSON返回輸出。將一個javascript變量傳遞給一個php開關case語句

如果我看看螢火蟲的帖子字符串是:Step=one&inputFname=rick&inputLname=bovenkamp我認爲這是正確的。所以問題必須在PHP文件中,我認爲它在$_POST部分...

我在做什麼錯了?任何幫助將非常棒!

javascript代碼:

$(document).ready(function() { 
    $("form#userForm").submit(function() { 
     var inputFname = $('#inputFname').attr('value'); 
     var inputLname = $('#inputLname').attr('value'); 
      var Step = "one"; 
     $.ajax({ 
      type: "POST", 
      url: "main.php", 
      data: {Step: Step,inputFname: inputFname,inputLname: inputLname}, 
      dataType: "json", 
      contentType:"application/json; charset=utf-8", 
       success: function(data) { 
       $("p.succesText").html(data.jsCode); 
        $("form#userForm").hide(); 
       $("div.success").fadeIn(); 
      }, 
      error: function(xhr, status, error) { 
       $("form#userForm").hide(); 
       $("p.errorHead").html("Something went wrong."); 
       $("p.errorText").text("ResponseText: " + xhr.responseText 
             + "Statuscode: " + xhr.status 
             + "ReadyState: " + xhr.readyState); 
       $("div.error").fadeIn(); 
      } 
     }); 
      return false; 
    }); 
});  

PHP文件:引號data : {"Step" : Step,...

<?php header('content-type: application/json; charset=utf-8'); 

    $log = array(); 

    $varStep = htmlspecialchars(trim($_POST["Step"])); 

    switch($varStep) { 

     case "one": 

     $varFname = htmlspecialchars($_POST["inputFname"]); 
     $varLname = htmlspecialchars($_POST["inputLname"]); 

     //Make Database connection 
     $db = mysql_connect("192.168.178.254","root","852456"); 
     if(!$db) die("Error connecting to MySQL database."); 
     mysql_select_db("Ajax" ,$db); 

     //Generate code and check if code already exists in the database 
     do 
     { 
      $varCode = rand(10000, 99999); 
      $dbCheckCode = ""; 
      $dbCheckCode = mysql_query("SELECT * FROM TableAjax WHERE code='$varCode'"); 
     } 
     while (mysql_fetch_array($dbCheckCode) !== false); 

     //Save the Form data in the database 
     $sql = "INSERT INTO TableAjax (fname, lname, code) VALUES (".PrepSQL($varFname) . ", " .PrepSQL($varLname) . ", " .PrepSQL($varCode) . ")"; 
     mysql_query($sql); 

     //Return code to frontend 
     $log['jsCode'] = $varCode; 

     break; 
    } 

    echo json_encode($log); 


    //Clean SQL statement 
    function PrepSQL($value) 
    { 
     if(get_magic_quotes_gpc()) 
     { 
      $value = stripslashes($value); 
     } 
     $value = "'" . mysql_real_escape_string($value) . "'"; 
     return($value); 
    } 

?> 
+0

你檢查了什麼值(**步驟**)php收到? – Dhiraj

+0

我會建議馬上更改您的mysql登錄數據,因爲在網站上發佈它不是一個好主意。 – jeroen

+0

@Jeroen別擔心這是假數據。謝謝你的方式;-) –

回答

1

把步驟。

在這種情況下,您正在傳遞變量的值作爲密鑰,也就是說您實際上正在傳遞data : {"one" : "one",...。你應該這樣做,inputLnameinputFname

編輯 - 解釋

如果你看的contentType選項確實在這裏http://api.jquery.com/jQuery.ajax/什麼,你會看到,默認的是application/x-www-form-urlencoded這是你想要的。基本上你的PHP錯誤指出的是$_POST數組是空的,因爲它不知道如何讀取你的數據由於格式。你希望你的回報數據是jsondataType選項是你所需要的。

您仍然需要按照我在文章的第一部分所述的內容進行操作,但基本上您有兩個錯誤會讓您失望。

我希望這是有道理的!

+0

我的新的數據串is:data:{「Step」:Step,「inputFname」:inputFname,「inputLname」:inputLname},不幸的是它給了我同樣的錯誤未定義的索引:進入/ share/MD0_DATA/Web/test/main。php第6行 –

+0

第6行是varStep = htmlspecialchars(trim($ _ POST [「Step」]));但我無法弄清楚那個代碼有什麼問題。 –

+0

嘗試從JS中刪除contentType和dataType。如果這不起作用,如果你有螢火蟲安裝,你可以發佈標題信息? – marteljn

相關問題