如何避免使用$ _GET从URL中提取数据

时间:2016-05-10 13:29:30

标签: php html mysql ajax forms

我目前正在处理一个表单,该表单需要用户填写很少的字段,而很少根据用户在上一页上做出的选择。 URL如下所示:

http://localhost:8080/series/dynamics/admin/cleanURL/post.php?subgroup=redapple&adverid=254427035

其中redapple是$ _GET变量。但是,我希望网址看起来像是什么;

http://localhost:8080/series/dynamics/admin/cleanURL/post.php?adverid=254427035

即。没有关于网址中子组选择的信息。但是仍然想让子组字段填充用户做出的选择。

我的php看起来像这样:

    <?php require('../config/connection.php'); 

              if(isset($_POST['variable'])){
                $values = mysqli_real_escape_string($dbc, $_POST['variable']);
                $query = "SELECT * FROM prdct_categories WHERE product = '$values'";
                $result = mysqli_query($dbc, $query);
                $rand = rand(0, 1000000);
                $html = '<ul>';
                while($row = mysqli_fetch_assoc($result)){
                $clickable_url = 'post.php?subgroup='.$row['subgroup'].'&advertid='.$rand;
                $html .= '<li class="nav">';
                $html .= '<a href="'. $clickable_url .'">'.$row['subgroup'].'</a>';
                $html .= '</li>';
                } 
                $html .='<ul/>';
                echo $html;

                mysqli_close($dbc);
                }       

2 个答案:

答案 0 :(得分:1)

如果您不想在网址中传递信息,那么您需要使用Cookie或会话。将表单发布到收集发布数据的页面,然后在将用户重定向到正确的页面之前设置会话或cookie。

http://php.net/manual/en/features.cookies.php

或者

http://php.net/manual/en/features.sessions.php

答案 1 :(得分:0)

您也可以使用POST请求,例如,如果我创建了一个表单:

<form action="form_url.php" method="get">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>

在form_url.php中,我可以像这样访问变量:

<?php
    var_dump($_POST);

使用POST over GET的好处是可以通过SSL加密,而GET请求中的所有参数都在URL中编码并可见。此外,由于URL最多只能是265个字符,这也是数据大小的限制。

如果您想上传某些内容,例如图片,则需要在表单字段中使用文件输入(如上图所示),以便可以通过文件流而不是网址发送数据。 / p>

编辑:

如果您想要另一种获取网址数据的方式,则不必使用get。完整的URL可以通过以下方式给出:

<?php
    var_dump($_SERVER['HTTP_HOST']);
    var_dump($_SERVER['REQUEST_URI']);

虽然REQUEST_URI可能是你想要的。请注意,通过此处传递的任何数据也可以从GET获得,但您不必使用GET来获取数据。然后,您需要使用以下内容解析URL:

<?php
    var_dump(explode('\', $_SERVER['REQUEST_URI']));