我刚开始学习php,如何在推送提交按钮后启动echo语句,甚至是锚标记。
到目前为止,这是我的代码
form name="myform" method="get" actions="madlib01.php"
Name: <input type="text" name="name" /> <br />
<input type="submit" name="submit" />
形式
<?php
$Name = $_GET['name'];
$hello .= "Hello $Name";
echo $hello //I would prefer the echo to happen after the submit button is hit
?>
答案 0 :(得分:3)
表单标记的正确属性是“操作”,而不是“操作”
提交表单后,会向服务器发送一个新请求(在您的情况下,使用GET)。
所以要在一个页面中完成所有操作:
form.php:
<form action="form.php" method="GET">
<input type="text" name="name"/>
<input type="submit">
</form>
<?PHP
if (! empty($_GET['name'])){
echo 'Hello, ' . $_GET['name'];
}
?>
答案 1 :(得分:1)
您首先需要使用isset
或array_key_exists
检查PHP是否已收到您的GET参数:
if(isset($_GET['name']) && !empty($_GET['name'])) {
$Name = $_GET['name'];
echo "Hello $Name";
}
或:
if(array_key_exists('name', $_GET) && !empty($_GET['name'])) {
$Name = $_GET['name'];
echo "Hello $Name";
} else {
//example: default to something if nothing has been passed
echo "Hello Guest";
}
另请注意,如果您要提交到同一页面,则可以完全忽略表单标记中的action
属性:
<form method="GET">
答案 2 :(得分:0)
echo $ hello
您刚刚获得了HTML注入漏洞。如果有人将您的用户发送到:
http://www.example.com/madlib01.php?name=<script>stealYourCookies()</script>
你有问题。
是的,这是我的第一个PHP脚本。这不会使安全性成为可选。这是每个教程都犯的一个错误:从一开始就教导不良练习,将正确性(和安全性,这是正确性的一个子集)视为可选的附加内容。
结果是大多数PHP代码都存在漏洞。但是你没有必要这样做!每次将纯文本字符串放入周围的HTML上下文时,都要正确转义它:
echo htmlspecialchars($hello);
我倾向于定义一个名称比'htmlspecialchars'更短的函数来为我做这个,因为我很懒。
<?php
function h($text) {
echo(htmlspecialchars($text, ENT_QUOTES));
}
$name= '';
if (isset($_REQUEST['name']))
$name= trim($_REQUEST['name']);
?>
...
<?php if ($name!=='') { ?>
<p> Hello, <?php h($name); ?>! </p>
<?php } ?>
<form method="get" action="madlib01.php">
<p>
<label for="namefield">Name:</label>
<input id="namefield" type="text" name="name" />
</p>
<p>
<input type="submit" />
</p>
</form>
现在,如果您说您的名字是Mister&lt; script&gt;,页面将完全如此,尖括号和全部问候,而不是尝试运行JavaScript。这是正确的输出,因此也是安全的。