PHP中Here Document存于变量时,如何调用其中的input标签?
问题解答:Heredoc存储表单后获取Input值的正确方式
你的问题核心是混淆了HTML表单的渲染和PHP接收提交数据的逻辑,下面给你梳理清楚:
问题根源
你用heredoc把表单代码存在了$myForm变量里,但没有把这个变量输出到页面——用户看不到表单,自然没法提交数据;另外$myForm只是一段HTML字符串,不是表单数据的容器,用它代替$_POST肯定没用。
修正后的代码
<?php // 用heredoc定义表单HTML $myForm = <<<FORMSTUFF <h3>Generate ASCII Table</h3> <form action="$_SERVER[PHP_SELF]" method="post"> <label for="numRows">Number of rows:</label> <!-- 这里设置默认值:如果有提交数据就用提交的,否则用32 --> <input type="text" name="numRows" id="numRows" value="{$_POST['numRows'] ?? 32}"> <br><br> <input type="submit" name="go" value="Create ASCII Table"> </form> FORMSTUFF; // 必须输出表单,用户才能看到并提交 echo $myForm; // 判断表单是否提交,再获取数据(避免未提交时报错) if(isset($_POST['go'])) { $numRows = $_POST['numRows']; // 这里可以添加生成ASCII表的处理逻辑 echo "<p>你提交的行数是:$numRows</p>"; } ?>
关键要点
- 输出heredoc内容:一定要用
echo $myForm把表单渲染到浏览器,否则表单根本不会显示在页面上。 - 正确获取提交数据:表单提交后,PHP是通过input的
name属性(这里是numRows)从$_POST(POST方法)或$_GET(GET方法)中取值,和heredoc的存储方式完全无关。 - 避免报错:用
isset()判断表单是否提交,或者用PHP7+的??空合并运算符给默认值,防止未提交时$_POST['numRows']不存在导致的报错。
内容的提问来源于stack exchange,提问作者Anya Dinger
相关产品推荐
相关产品推荐

