簡體   English   中英

如何解析PHP URL查詢字符串並獲取參數值

[英]How to parse a PHP URL Querystring and get the param values

好的,所以我在PHP中搜索HIGH和LOW來查找非常簡單的內容,但沒有任何效果。

我去過這里: 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;
}

如您所見,INCOMING URL只有兩個參數:firstname和email像這樣:

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的“ NOTED”)。

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是查詢字符串中的值。 有什么想法嗎?

您正在尋找的是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM