2015-05-18 58 views
0

好吧,所以我搜索了高和低的東西在PHP中很簡單,並沒有得到任何效果。如何解析PHP URL查詢字符串並獲取參數值

心中已經在這裏:http://php.net/manual/en/function.parse-url.php

,我已經在PHP嘗試這些功能:

function parse_query($var) 
{ 
    /** 
    * Use this function to parse out the query array element from 
    * the output of parse_url(). 
    */ 
    $var = parse_url($var, PHP_URL_QUERY); 
    $var = html_entity_decode($var); 
    $var = explode('&', $var); 
    $arr = array(); 

    foreach($var as $val) 
    { 
    $x   = explode('=', $val); 
    $arr[$x[0]] = $x[1]; 
    } 
    unset($val, $x, $var); 

    print "Name: " . $arr[0] . "\n"; 
    print "Email: " . $arr[1] . "\n"; 

    return $arr; 
} 

,正如你看到的,輸入的URL只得到了兩個參數:名字和電子郵件一樣所以:

if (isset($_POST['dataObj'])) { 
    $json = $_POST['dataObj']; 

    var_dump(json_decode($json, true)); 

    $strJSON = proper_parse_str($json); 
    $strJSON1 = parse_query($json); 

    echo "Here's the JSON OBJ: " . $strJSON; 
    echo "Here's the JSON OBJ with a simple parser: " . $strJSON1; 

} else { 

    echo json_encode(
      array("data" => $errors, 
       "success" => false, 
       "errMsg" => "Oh, Snap! The Data coming in died!", 
       "errNbr" => "500")); 
    exit(); 
} 

然後我嘗試這個功能(在上面指出填充$ strJSON

。 10
function proper_parse_str($str) { 

    print $str . "\n\n"; 

    # result array 
    $arr = array(); 

    # split on outer delimiter 
    $pairs = explode('&', $str); 

    # loop through each pair 
    foreach ($pairs as $i) { 
     # split into name and value 
     list($firstname, $value) = explode('=', $i, 2); 
     list($email, $value) = explode('=', $i, 2); 

     # if name already exists 
     if (isset($arr[$firstname]) and isset($arr[$email])) { 
      # stick multiple values into an array 
      if (is_array($arr[$firstname]) and is_array($arr[$email])) { 
       $arr[$firstname][] = $value; 
       $arr[$email][] = $value; 
      } else { 
       $arr[$firstname] = array($arr[$firstname], $value); 
       $arr[$email] = array($arr[$email], $value); 
      } 
     } 
     # otherwise, simply stick it in a scalar 
     else { 
      $arr[$firstname] = $value; 
      $arr[$email] = $value; 
     } 
    } 

    # return result array 
    return $arr; 
} 

再次,我只是用引號中的「TEXT」得到的消息....這東西是從PHP.net的權利。

這裏是我的查詢字符串從AJAX來是這樣的:

 var formData = { 
      "firstname": $('input[name=firstname]').val(), 
      "email": $('input[name=email]').val() 
     }; 
     formData = $(this).serialize() + "&" + $.param(formData); 

     var headers = { 
      'Access-Control-Allow-Origin': '*', 
      'Access-Control-Allow-Methods': ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], 
      'Access-Control-Allow-Headers': 'Content-Type', 
      //'Content-Type': 'application/json', 
      'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' 
     } 

     $.ajax({ 
      url: "webServices/saveCommInfo.php", 
      type: "POST", 
      crossDomain: true, 
      headers: headers, 
      //async: false, 
      //jsonpCallback: 'jsonpCallback', 
      //dataType: 'json', 
      //cache: false, 
      //encode: true. 
      data: {"dataObj": formData} 

     }).success(function (data) { 

      console.log("This is coming back from the server: ", data); 

      // ALL GOOD! just show the success message! 
      $('form').append('<div id="success" class="alert alert-success">' + data.status + '</div>'); 

      // Success message 
      $('#success').html("<div class='alert alert-success'>"); 
      $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;").append("</button>"); 
      $('#success > .alert-success').append("<strong>You joined... Welcome!</strong>"); 
      $('#success > .alert-success').append('</div>'); 
      //clear all fields 
      $('#contactForm').trigger("reset"); 
      console.log('AJAX SUCCESS!'); 

     }).complete(function (data, textStatus, jqXHR){ 

      console.log('AJAX COMPLETE'); 

     }); 

它進入php的文件,但這樣的:

&firstname=John&email=john%40someemail.net 

所有我想做的事情是這樣的:

$sqlA = "INSERT INTO " . $sTable . " (fname, username, password, active, datCreated, userCreated, email, newUser) 
      VALUES ('" . $fname . "','" . $username . "','" . $password . "',0,'" . date("Y-m-d") . "','webformuser','$email','" . $_SESSION['sessionid'] . "',1)"; 

    $result = mysqli_query($con, $sqlA); 

其中$ fname和$ email是來自querystring的值。思考?

回答

1

你在找什麼是parse_str

$queryString = "test=1&foo=bar"; 
parse_str($queryString, $out); 
echo '<pre>'.print_r($out, 1).'</pre>'; 

輸出:

Array 
(
    [test] => 1 
    [foo] => bar 
) 

演示:http://codepad.viper-7.com/pQ7Bx6

+0

在那裏做,從PHP.NET並沒有快樂!它不會拆分查詢字符串,因爲我在上面用「@」符號的%40顯示它,如果您注意到,AJAX正在用「&」符號推動字符串,這兩個Params都會「?」標記爲「第一」參數。我在PHP中並沒有那麼多,但可以很好地解決我的問題。我所知道的是parse_str沒有發生,並且Google控制檯中的結果爲NULL。 –

+0

你的意思是這樣的:void parse_str(string $ str [,array&$ arr]) –

+0

That do it ....這是簡單的事情....我的朋友謝謝。 –

相關問題