【问题标题】:HTML form not submitting input values with post/get methodHTML 表单未使用 post/get 方法提交输入值
【发布时间】:2019-04-27 03:19:13
【问题描述】:

这是我的 html 表单的一部分:

<form method ="post" action="switch.php">
    <p class="option">Favorite Book: <input type = "text" name = "book" id="book" size = "25" /> </p>
    <input class="submit" type="submit" name="submit" value="SUBMIT" />
</form>

这是我的一段 php 代码:

if(isset($_POST['book'])){
    $person1book=$_POST['book'];
    $person2book=$_POST['book'];
}else{
    $person1book="Pride and Prejudice";
    $person2book="Crime and Punishment";
}

如果输入没有留空,我基本上有一个需要更改变量值的表单。

我试过了:

  • 不走运的get方法
  • $_REQUEST 没有运气

看起来好像输入表单没有提交任何内容。

如果您看到我遗漏的任何内容,我将非常感谢您的帮助!

*编辑更多解释:

在一个页面上,我有一个表单,用户可以在其中选择一个人并填写他们最喜欢的书。然后我将它发布到 switch.php,如果表单输入被填写,变量会发生变化。 Switch.php 还将页面重定向到另一个页面,这取决于用户选择的显示他们最喜欢的书的人。每个人都有一本默认最喜欢的书,但如果用户填写表格,可以更改,除非我填写表格时它总是显示默认值。

【问题讨论】:

  • 你的 PHP 代码在 switch.php 中吗?
  • 我检查您发送的数据,还有什么我们应该知道的吗?
  • 您需要提供来自 switch.php 的所有代码。为什么要为 $person1book 和 $person2book 分配相同的值?

标签: php html forms post methods


【解决方案1】:

为什么我的空提交没有被替换?

对于空值,第一个条件 (isset) 仍将是 true。为了防止这种情况,我会将!empty($variable) 的条件添加到isset($_POST['book']),这样空值就不会停在那里。


我该如何解决这个问题?

if(isset($_POST['book']) && !empty($_POST['book'])){
    $person1book=$_POST['book'];
    $person2book=$_POST['book'];
}else{
    $person1book="Pride and Prejudice";
    $person2book="Crime and Punishment";
}

它们也应该被重定向。我们如何做到这一点?

从逻辑上讲,有很多方法可以做到这一点,但您使用 option 元素让用户从 html 页面中选择他们的人。您可以通过使用 PHP 的 sessions 在整个站点范围内存储此站点。

您可以从W3's PHP5 guide 阅读有关 PHP 会话的更多信息。

PHP 可以使用header() 重定向用户。在这种情况下,我们使用了header('Location: /1')header('Location: /2'),具体取决于人。

您可以在PHP manual 上阅读有关 PHP 标头的更多信息。

index.html

<form method ="post" action="switch.php">
    <p class="option">Favorite Book: <input type = "text" name = "book" id="book" size = "25"/></p>
    <select name="person" required>
        <option value="1">Select a person</option><!--Defaults to one if not specified.-->
        <option value="1">Person1</option>
        <option value="2">Person2</option>
    </select>
    <br/><br/>
    <input class="submit" type="submit" name="submit" value="SUBMIT" />
</form>

switch.php

<?php session_start();

if(isset($_POST['book']) && !empty($_POST['book'])){
    $person1book=$_POST['book'];
    $person2book=$_POST['book'];
}else{
    $person1book="Pride and Prejudice";
    $person2book="Crime and Punishment";
}

if ($_POST['person'] == 1) {
    $_SESSION['person'] = $person1book;
    header('Location: /1');
} else if($_POST['person'] == 2) {
    $_SESSION['person'] = $person2book;
    header('Location: /2');
}
?>

/1/index.php

<?php session_start();

echo "<b>Person1</b> page with book: <b>" .$_SESSION['person']. "</b>.";
echo "<br/><hr/><b>Output:</b></br>" .$_SESSION['new'];


?>

/2/index.php

<?php session_start();

echo "<b>Person2</b> page with book: <b>" .$_SESSION['person']. "</b>.<br/>";
echo "<br/><hr/><b>Output:</b></br>" .$_SESSION['new'];


?>

解决方案


初步答案:

---

Before
===
[![Before Solution (broken)][1]][1]

---

After
===
[![After Solution (fixed)][2]][2]
    
---
  [1]: https://i.stack.imgur.com/h6NQS.gif
  [2]: https://i.stack.imgur.com/pGjEv.gif

【讨论】:

  • 嘿科迪,不幸的是仍然没有运气。我已经确认这些值正在发布。我在 switch.php 页面上做了一个简单的回显,一切正常,就像你说的那样,它必须与 if 语句有关。请注意,由于每个人的结果页面不同,因此只会显示一本书。
  • 就是这样。非常感谢。
【解决方案2】:

这里的一切看起来都很好

<form method="POST" action="switch.php">
    <p class="option">Favorite Book: <input type = "text" name="book" id="book" size="25" /> </p>
    <input class="submit" type="submit" name="submit" value="SUBMIT" />
</form>

如果您在同一页面上发布删除操作

if(empty($_POST['book'])) {
    $person1book = "Pride and Prejudice";
    $person2book = "Crime and Punishment";
}else{
    $person1book = $_POST['book'];
    $person2book = $_POST['book'];
}

【讨论】:

  • 谢谢,不过我将发布到单独的页面。
  • 点击后能看到页面刷新吗?
  • 是的,它重定向到结果页面,但始终显示默认值。问题是每当我填写表格时,值永远不会改变。
  • 尝试打印您在 switch.php 上获得的所有 $_POST 值
  • 回声'
    '; print_r($_POST);回声'
    ';出口();在 php 标签中的 switch.php 开头
猜你喜欢
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多