【问题标题】:why is this php code running without declaring variable global inside function?为什么这个 php 代码在没有在函数内部声明变量全局的情况下运行?
【发布时间】:2020-01-11 15:09:38
【问题描述】:

这段代码正在运行并提供输出,但我的问题是,为什么我没有使用 global 关键字,却能够从函数 pali 中访问变量 abc 和 def?

<form action=palindrome.php method=post>
<input type="text"  name="number" type=submit> 
</form>
<?php
 $a=$b=0;
 $abc= $def = $_POST["number"];
 echo "$def</br>";
 function pali()
 { while($abc>=1)
   { $a=$abc%10  ;
     $b=$b*10+ $a ;
     $abc= $abc/10;
   }
   if($def==$b)
   echo '$def is palindrome '.$def ;
   else 
   echo '$def is not a palindrome '.$def;
   echo "<br>$b";
}
 pali();
 ?>            

【问题讨论】:

  • 即使是坏掉的时钟也会一天两次显示正确的时间。这是一个显示 incorrect 结果和很多通知的小提琴:3v4l.org/4DsBo
  • 旁注:最好在表单元素中引用所有内容。
  • type="text" AND type=submit 在一个 &lt;input&gt; 元素上?

标签: php forms function scope


【解决方案1】:

从顶部开始。 包含字符串的 HTML 属性应包含在字符串中,如下所示:

<form action="palindrome.php" method="POST">

您不能在 -Tag 上定义多个类型属性:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input 您必须创建多个元素:

<input type="text" name="number"> 
<input type="submit" name="submit"> 

以下行易受跨站点脚本 (XSS) 攻击。在发布实际的网络应用之前,您必须了解并防止 XSS(和其他)。

$abc= $def = $_POST["number"];
echo "$def</br>";

快速说明:您正在输出变量$def 的内容,这等于用户使用字段名称为"number" 的HTTP Post Request 发送的内容。用户可以发送任何东西给你,你会回应它。含义:我可以向您发送有效的 HTML,您会回显出来,我的浏览器会将其评估为 HTML,因为他没有理由相信这不是您想做的事情。

解决您的函数和变量范围。如果您想在函数中使用其他代码中的变量(在面向对象编程 [OOP] 等中有例外),您需要在函数内部将它们作为参数传递:https://www.php.net/manual/en/functions.arguments.php 你可以像这样定义你的函数:

function pali($a, $b, $abc, $def) { /* (Your logic goes here) */ }

你会这样调用你的函数:

pali($a, $b, $abc, $def);

我必须指出,您的函数再次容易受到跨站点脚本 (XSS) 的攻击。

echo '$def is palindrome '.$def ;
else 
echo '$def is not a palindrome '.$def;
echo "<br>$b";

您再次回显变量中的任何内容。但是,前 2 个回显中的第一个 $def 不会回显内容,而是回显文本 $def,因为您确实使用了单引号。如果您尝试在单引号内回显变量的内容,它将不起作用,只能使用双引号。 如果您正在学习,编写不安全的应用程序是可以的,但稍后,在发布应用程序之前,您需要了解 Web 应用程序安全基础知识(SQLi、XSS 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2014-01-17
    • 2012-05-23
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多