1

我刚开始学习php,在按下提交按钮甚至是锚标记后如何启动回显语句。

到目前为止,这是我的代码

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

?>
4

3 回答 3

3

表单标签的正确属性是“action”,而不是“actions”

提交表单后,将向服务器发送一个新请求(在您的情况下,使用 GET)。

因此,要在一页中完成所有操作:

表格.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'];
}
?>
于 2009-09-13T22:08:56.523 回答
1

您首先需要检查 PHP 是否使用issetor收到了您的 GET 参数array_key_exists

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">
于 2009-09-13T22:00:19.867 回答
0

回声$你好

您刚刚获得了一个 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 <script>,页面会像这样问候你,尖括号等等,而不是尝试运行 JavaScript。这是正确的输出,因此也是安全的。

于 2009-09-14T01:24:47.103 回答