【问题标题】:How to prevent the set of a get variable?如何防止设置一个get变量?
【发布时间】:2013-05-09 12:17:09
【问题描述】:

我有一个问题。让我用一个例子来解释这一点。 我有这段代码:

<form action="vehicles.php" method="get">
   <span>Marca:
       <select name="brand">
           <option value="null" selected="selected"></option>
           <option value="Volkswagen">Volkswagen</option>
           <option value="Renault">Renault</option>
           <option value="Peugeot">Peugeot</option>
           <option value="Fiat">Fiat</option>
       </select>
   </span>
   <span>Modelo: 
       <select name="model">
           <option value="null" selected="selected"></option>
           <option value="206">206</option>
           <option value="Suran">Suran</option>
           <option value="Passat">Passat</option>
           <option value="Punto">Punto</option>
        </select>
   </span>
   <input type="submit">
</form>

如果选择的选项是“null”选项,有什么方法可以阻止这些变量的赋值?

例如,如果我选择 brand="Renault" 和 model="null",则 url 是

http://mywebpage.com/vehicles.php?brand=Renault&amp;model=null

但应该是的

http://mywebpage.com/vehicles.php?brand=Renault

我知道如何在使用 PHP 提交表单后取消设置“null”值的变量。在提交之前和变量设置为“null”之后有什么方法可以做到这一点。 我想要一个更简洁的网址,没有“variable=null”的结果。

P/D:我的母语不是英语,所以请随时编辑我的问题。我希望你能理解我。

【问题讨论】:

  • 你不喜欢这个丑陋的 url,但是如果它在那些 get vars 中有值,你可以接受这个 url?除此之外,您可能希望在您选择的选项中添加一个值参数。
  • 对,我只希望 url 中的 get vars 有值。
  • 您可以使用 javascript 取消设置所有选择的名称属性,在提交时使用 null 或 - 值
  • @Orangepill 我必须在什么时候这样做?因为我用 PHP 成功尝试过,但 url 仍然相同,因为未设置是在页面加载之后。
  • 这将在提交信息之前在客户端完成......这里有一些 jquery 代码(未经测试),可能会让你到达那里。 $(form).on("submit", function(){$('select').filter(function(){ $(this).val() != "-"; }).each(function(){ $(this).removeProp("name")});

标签: php html forms get


【解决方案1】:

在您的option 标记中包含value 属性。

<option value="" selected="selected">-</option>

你真的应该为你的所有选择都这样做。

【讨论】:

  • 我认为没有值属性的值将是内部的值。我将编辑代码。无论如何,如果我设置 value="" 那么 url 将几乎相同-->(mywebpage.com/vehicles.php?brand=&model=)。如果 URL 中的变量品牌和型号具有空白值,我不希望它们。
  • 当然会,这就是为什么它们被设置为“-”。现在它们被设置为空。
【解决方案2】:

你应该为&lt;select&gt;的选项标签设置值:)

【讨论】:

  • 这适合评论,但不适合回答
【解决方案3】:

您缺少选项标签的设置值。您应该在选择标签中设置选项标签的值。使用空白值,您可以将其分配给特殊值,例如零(0)

         <select name="model">
           <option value="0" selected>-</option>
           <option value="1">206</option>
           <option value="2">Suran</option>
           <option value="3">Passat</option>
           <option value="4">Punto</option>
        </select>

编辑: 好的。我明白你的意思了。如果选择框的值为空,您可以将 jquery 导入您的页面并在提交之前通过 javascript 进行检查。你可以删除它。

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$.ready(function(){
   $("form").submit(function(){
      if($("select[name='model']").val() == "0") $("select[name='model']").remove();
       return true;
   });
})
</script>

【讨论】:

  • 谢谢,但这不能解决我的问题。如果我选择第一个选项,则 url 仍然会有“model=-”。
  • 那是陌生人。我做了一个简单的演示,网址看起来像这样 vihicle?model=0 。检查您是否已经为 _blank 选项设置了值。 。或者你可以使用 POST 来代替
  • 对不起,你是对的,“model=0”。但这并不能解决我的问题。如果值是“0”或“-”之类的特殊值,我想从 url 中隐藏“variable=value”。
  • 您应该使用 POST 而不是 GET:您可以像这样更改表单的定义
  • 你不懂我。首先,我想要使用 GET。我想显示在 url 中选择的选项,但只显示那些没有空白值的选项。例如,如果我选择 brand=Volkswage 和 model="",则 url 应该是:mywebpage.com/vehicles.php?brand=Volkswagen 和 not mywebpage.com/vehicles.php?brand=Volkswage&model =
【解决方案4】:

如果您不想使用 $_GET superglobal 因为它附带的 url 扩展名,请尝试改用 $_POST。它没有 url 扩展名,它仍然可以存储您以后可以检索的值。请务必将您的method 更改为等于POST 而不是GET

所以表单标签的代码会变成:

<form action="vehicles.php" method="POST">

您以后可以通过(例如)访问它:

echo $_POST['brand'];

echo $_POST['model'];

同样,您可能希望将值参数添加到 option 标记中的值。

编辑- 我添加了这个新部分,因为您不想使用 POST,即使我认为您应该这样做。

您可以通过执行这行代码继续使用GET 方法:

<form action="vehicles.php" method="GET">
   <span>Marca:
       <select name="brand">
           <option value="none" selected>-</option>
           <option value="Volkswagen">Volkswagen</option>
           <option value="Renault">Renault</option>
           <option value="Peugeot">Peugeot</option>
           <option value="Fiat">Fiat</option>
       </select>
   </span>
   <span>Modelo: 
       <select name="model">
           <option value="none" selected>-</option>
           <option value="206">206</option>
           <option value="Suran">Suran</option>
           <option value="Passat">Passat</option>
           <option value="Punto">Punto</option>
        </select>
   </span>
   <input type="submit">
</form>

如果有帮助请告诉我

【讨论】:

  • 我想要 url 扩展名,但只显示那些值不为空的变量(例如“-”或“”)。
  • 请查看我的新答案
  • 我想使用 GET,并且我想要一个没有空白变量的 url。例如:如果我选择 brand=Volkswagen 和 model="",则 url 应该是:mywebpage.com/vehicles.php?brand=Volkswagen
  • 如果您在上面使用那行代码,它将显示名称。现在如果该人为两者都选择空白怎么办,您是否希望 url 只显示车辆.php?或vehicles.php?brand=&model=
【解决方案5】:

恐怕你可能需要 javascript 来实现你想要的。
看看这段代码:

<form action="vehicles.php" id="carForm" method="GET">
   <span>Marca:
       <select name="brand" id="brand">
          <option value="none" selected>-</option>
          <option value="Volkswagen">Volkswagen</option>
          <option value="Renault">Renault</option>
          <option value="Peugeot">Peugeot</option>
          <option value="Fiat">Fiat</option>
       </select>
   </span>
   <span>Modelo: 
      <select name="model" id="model">
         <option value="none" selected="selected">-</option>
         <option value="206">206</option>
         <option value="Suran">Suran</option>
         <option value="Passat">Passat</option>
         <option value="Punto">Punto</option>
      </select>
   </span>
   <input type="button" value="Submit" onclick="submitFormFilter();" />
</form>

Javascript:代码将是这样的:

<script>
function submitFormFilter(){
   var myForm = document.getElementById("carForm");
   var carBrand = document.getElementById("brand");
   var carModel = document.getElementById("model");

   if(carBrand.value === "none" || null){
       carBrand.parentNode.removeChild(carBrand);
   }

   if(carModel.value === "none" || null){
       carModel.parentNode.removeChild(carModel);
   }

   myForm.submit();
}
</script>

http://jsfiddle.net/7xzKP/1/

你可以在这里试试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多