почему этот код php работает без объявления глобальной переменной внутри функции? - PullRequest
0 голосов
/ 11 января 2020

этот код выполняется и выдает выходные данные, но у меня вопрос: почему я могу получить доступ к переменным ab c и def изнутри функции pali, когда я не использовал ключевое слово global?

<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();
 ?>            

1 Ответ

0 голосов
/ 16 января 2020

Начиная сверху. Ваши 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, которая равна что пользователь отправил с помощью HTTP Post Request с именем поля "number". Пользователь может отправить вам все, что угодно, и вы подтвердите это. Значение: я могу отправить вам действительный HTML, который вы получите, и мой браузер оценит его как HTML, потому что он не имел оснований полагать, что это что-то иное, чем вы хотели.

Обращаясь к вашей функции и переменной области. Если вы хотите использовать переменные из другого кода внутри вашей функции (есть исключения в объектно-ориентированном программировании [OOP] et c.), Вам нужно передать их внутри функции в качестве аргумента: 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";

Вы снова выводите любое содержимое в вашей переменной. Однако первые $def в первых двух эхосигналах не будут отражать содержимое, а скорее текст $ def, так как вы использовали одинарные кавычки. Если вы попытаетесь отобразить содержимое переменной внутри одинарных кавычек, это не сработает, только с двойными кавычками. Написание небезопасных приложений - это нормально, если вы находитесь в процессе обучения, но позже, перед публикацией приложения, вам нужно будет изучить основы безопасности веб-приложений (SQLi, XSS, ...).

...