【问题标题】:Getting values from an HTML form and passing it to the same page从 HTML 表单中获取值并将其传递到同一页面
【发布时间】:2013-06-10 22:17:07
【问题描述】:

我不经常使用表单,因此将表单选择传递到同一页面这样微不足道的事情似乎很有挑战性。我已经检查了一堆 stackoverflow 的问题,但他们从来没有说在哪里放置 _POST 代码或者他们将代码发布到另一个页面。我知道我做错了事,这可能很简单。谁能帮帮我?

numbersPage.php

<?php 
session_start();
$_POST['here'];
$hello = $_GET['here'];

echo $hello;
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">

</head>

<form name="input" action="numbersPage.php" method="get">
Fav Number: 
<select id="">
  <optgroup label="Numbers">
    <option value="1" name="thing">1</option>
    <option value="2" name="thing">2</option>
    <option value="3" name="thing">3</option>
    <option value="4" name="thing">4</option>
    <option value="5" name="thing">5</option>


  </optgroup>
</select>
<input type="submit" value="Submit">

</form>


</body>
</html>

【问题讨论】:

  • 在过去的美好时光里,我曾经做的就是在表单中添加一个隐藏字段,用 isset() 测试它的存在;这样您就知道您是第一次到达表单,还是因为提交。另外,请注意 POST 和 GET 是两种不同的方法...这里您的表单设置为 GET ,您需要使用 $_GET['here'] ,而 $_POST['here'] 什么都不对应。

标签: php html session post get


【解决方案1】:

您错过了给&lt;select&gt; 命名。使用这个:

<select name="here">

表单元素的名称属性的值将是$_GET 数组中的索引。另请注意:

$_POST['here'];

毫无意义。我不确定您对此有何期待。删除该行。

如果代码像你展示的那样简单,你也可以删除这一行:

session_start();

进一步注意,在任何情况下,您都应该在使用之前检查一个值是否已正确提交:

if(!isset($_GET['here'])) {
    die('GET:here is missing');
} else {
    $here = $_GET['here'];
    // the value has been submitted. Now validate it!
    if(!is_valid($here)) {
        die('Bad input');
    }
}

// further processing.

【讨论】:

  • 哇。那很简单。不过问题是,当我按下提交时,为什么链接显示“?user=&here=1”?为什么会这样?
  • 那是因为您使用get 方法提交表单。 get 表示值将附加到 url。您应该使用 post 代替将变量放入请求正文的位置。检查this
  • 哦。这可能源于我不知道哪些值可以用于“方法”。你有什么建议吗?就用post作为方法吗?
  • 推荐使用 POST 方法。没有人在 url 中看到您的数据,并且可能 POST 可以发送更多数据(例如非常长的文本)。见:maximum length of HTTP GET request?
【解决方案2】:

你做得对,但你必须做得更像

if(isset($_REQUEST['submit1'])){

$_POST['here'];
$hello = $_GET['here'];

echo $hello;

}

记住一件事,给按钮起个名字

<input type="submit" value="Submit" name="submit1">

【讨论】:

  • OP 在表单中使用 GET 方法,所以 $_POST 在你的回答中没有用。
  • 如果您将名称添加到按钮 (submit1) 并检查 isset($_GET['submit1']) 它并不意味着 isset($_GET['here']) 是 true。
猜你喜欢
  • 2016-12-23
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多