为什么我的空提交没有被替换?
对于空值,第一个条件 (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