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
。 10function 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'>×").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的值。思考?
在那裏做,從PHP.NET並沒有快樂!它不會拆分查詢字符串,因爲我在上面用「@」符號的%40顯示它,如果您注意到,AJAX正在用「&」符號推動字符串,這兩個Params都會「?」標記爲「第一」參數。我在PHP中並沒有那麼多,但可以很好地解決我的問題。我所知道的是parse_str沒有發生,並且Google控制檯中的結果爲NULL。 –
你的意思是這樣的:void parse_str(string $ str [,array&$ arr]) –
That do it ....這是簡單的事情....我的朋友謝謝。 –