【问题标题】:PHP: using $_GET to retrieve value from javascript [duplicate]PHP:使用 $_GET 从 javascript 中检索值 [重复]
【发布时间】:2019-08-07 18:22:46
【问题描述】:

我正在制作旅行套餐网站,我想在 php 中使用 GET、POST、REQUEST 检索数据。但我收到一条错误消息说 "数组 ( ) 否 注意:未定义索引:"


Javascript 函数:

通过简单地将“包裹”和“人数”的值相乘来计算总数


下面是我的代码

<script type="text/javascript">

function totalPrice(){

document.getElementById("total").value= "CAD "+ 
(document.getElementById("package").value * document.getElementById("person").value);}   
</script>

<!-- package selection -->

<form action="test.php" method="get">


<select id="package" onchange="totalPrice();" >
      <option value="2300">Wild West (Banff, Jasper)</option>
      <option value="3300">East Coast(St.Johns)</option>
      <option value="1300">Winery Tour(Kelowna, Penticton)</option>
      <option value="2600">Northern Light(Yellowknife)</option>
 </select>

 <select id="person" onchange="totalPrice();">
          <option value="1">1 person</option>
          <option value="2">2 persons</option>
          <option value="3">3 persons</option>
          <option value="4">4 persons</option>
          <option value="5">5 persons</option>
          <option value="6">6 persons</option>
          <option value="7">7 persons</option>
          <option value="8">8 persons</option>

  </select>
  <input type="submit">

  </form>
  <!-- total Amount -->
  <label class="form" >Total Amount</label>
  <input size =40 type="text" name="total" id="total" disabled>

“test.php”

<h1>payment total</h1>

<?php

print_r($_GET);
if(!isset($_GET['total'])){
  echo "no";
}
echo $_GET['total'];
 ?>

【问题讨论】:

  • 您的表单中没有名称为 total 的输入。 (在您的表单之外有一个。)
  • 您必须通过提交表单或使用 Javascript 执行 AJAX 请求来将数据提交给 PHP。
  • 虽然我能理解会员为什么要结束这个问题,但我不明白它怎么会被认为是“离题”?

标签: javascript php


【解决方案1】:

您需要确保在提交时要传输的任何数据都在&lt;form&gt; &lt;/form&gt; 标签内。如果你忽略它,数据将不会被传递...

例如,假设您有两个表单标签(A 和 B),都带有一个提交按钮。如果您在两个表单中都省略了&lt;input size =40 type="text" name="total" id="total" disabled&gt;,那么当您在其中任何一个上按下提交时,会在哪个表单中发送总数?

Definition&lt;form&gt; 标签:

HTML 元素表示包含的文档部分 用于向 Web 服务器提交信息的交互式控件。 (这里是关键词)

我已将输入移至以下正确位置:

function totalPrice(){

document.getElementById("total").value= "CAD "+ 
(document.getElementById("package").value * document.getElementById("person").value);}   
</script>

<!-- package selection -->

<form action="test.php" method="get">


<select id="package" onchange="totalPrice();" >
      <option value="2300">Wild West (Banff, Jasper)</option>
      <option value="3300">East Coast(St.Johns)</option>
      <option value="1300">Winery Tour(Kelowna, Penticton)</option>
      <option value="2600">Northern Light(Yellowknife)</option>
 </select>

 <select id="person" onchange="totalPrice();">
          <option value="1">1 person</option>
          <option value="2">2 persons</option>
          <option value="3">3 persons</option>
          <option value="4">4 persons</option>
          <option value="5">5 persons</option>
          <option value="6">6 persons</option>
          <option value="7">7 persons</option>
          <option value="8">8 persons</option>

  </select>

  <!-- total Amount -->
  <label class="form" >Total Amount</label>
  <input size =40 type="text" name="total" id="total" disabled>

  <input type="submit">

  </form> <-- END OF FORM -->

另外,这是在 PHP 端处理事情的更好方法,因为虽然您可能会检查总数是否已设置,但如果未设置,它仍然会以您的方式出错。

<?php

print_r($_GET);

if(isset($_GET['total'])){
  echo $_GET['total'];
} else {
  echo 'No total';
}
?>

编辑

您还需要使输入不是disabled,因为禁用的输入不会被提交。 如果您想让用户无法编辑输入更改:

<input size =40 type="text" name="total" id="total" disabled>

<input size =40 type="hidden" name="total" id="total">

这也会从页面中隐藏它。如果您仍然希望它可见,可以这样设置:

<input size =40 type="text" name="total" id="total" readonly="readonly">

【讨论】:

  • 感谢您的建议。但是,即使我按照您的建议将 放在“总金额”之后,仍然会收到错误消息“没有总金额”..
  • 另外,您的输入有disabled - 删除它。如果您不希望它可见,请将type 属性设置为hidden
  • 非常感谢,它成功了。如果我必须删除“已禁用”,如何防止用户在网页上编辑他们的总金额?
  • 让它&lt;input type="hidden" name="total" id="total"&gt;
  • 我得到的答案是“只读”,非常感谢
【解决方案2】:

为了使“total”字段包含在发送到 test.php 服务器的内容中,您需要将“total”输入字段移动到表单标签内。表单标签之外的任何内容都不会被包含在内。

编辑添加示例:

<script type="text/javascript">

function totalPrice(){

document.getElementById("total").value= "CAD "+ 
(document.getElementById("package").value * document.getElementById("person").value);}   
</script>

<!-- package selection -->

<form action="test.php" method="get">


<select id="package" onchange="totalPrice();" >
      <option value="2300">Wild West (Banff, Jasper)</option>
      <option value="3300">East Coast(St.Johns)</option>
      <option value="1300">Winery Tour(Kelowna, Penticton)</option>
      <option value="2600">Northern Light(Yellowknife)</option>
 </select>

 <select id="person" onchange="totalPrice();">
          <option value="1">1 person</option>
          <option value="2">2 persons</option>
          <option value="3">3 persons</option>
          <option value="4">4 persons</option>
          <option value="5">5 persons</option>
          <option value="6">6 persons</option>
          <option value="7">7 persons</option>
          <option value="8">8 persons</option>

  </select>
  <input type="submit">

  <!-- total Amount -->
  <label class="form" >Total Amount</label>
  <input size =40 type="text" name="total" id="total" disabled>

  </form>

【讨论】:

  • @Quasimodo'sclone 添加
  • @Quasimodo'sclone 啊,我错过了包括示例。添加:)
  • 感谢您的建议。即使我找不到您的解决方案,并且我尝试将 标签放在“总金额”之后,但它仍然没有获得 $_GET 值..
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多