0

我正在寻找有关如何制作功能以使其更容易的信息。我知道有一种更简单的方法,然后将我想要的发布变量写入 PHP。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $name =   isset($_POST['name']) ? htmlentities($_POST['name']) : '';
  $email =  isset($_POST['email']) ? htmlentities($_POST['email']) : '';
  $interest = isset($_POST['interest']) ? htmlentities($_POST['interest']) : '';
  $checkbox = isset($_POST['checkbox']) ? htmlentities($_POST['checkbox']) : '';

到目前为止,我想出了这样的功能:

function req_post($n){
  '$'$n = isset($_POST["$n"]) ? htmlentities($_POST["$n"]) : '';
}

我知道我做错了,对 PHP 来说有点新。任何帮助将不胜感激。先感谢您。

4

3 回答 3

2

制作这样的函数似乎很诱人,似乎删除了重复的代码等,但它最终总是会咬你。

您的代码显示您转义所有 POST 数据,为下一个环境做好准备,该环境将是一个 html 页面。

因此,如果您仅将 $email 输出到 html 页面,这似乎是值得的。

但是,如果您同时输出到网页“谢谢 $email”并将其存储到数据库,那么您还没有为数据库转义它,因此您面临 sql 注入攻击的风险。

在您了解得更清楚之前,您最好保留 $_POST['email'] 原样并在输出时转义它。

echo htmlentities($_POST['email']);

或者

$query = 'update names set email = "'.mysql_real_escape_string($_POST['email']).'" where ID =1';

或者最好使用 PDO/Mysqli 和准备好的语句,它们会为您转义。

htmlentities是一种为 html 输出转义 的方法mysql_real_escape_string是一种为 mysql 数据库转义的方法(尽管已经过时,正如我和其他人所说的那样)。

事实是,如果你遇到像 $email 这样的变量,你会想,现在等一下,这是否已经为下一个环境准备好了?它从哪里来的?

当您看到 $_POST['email'] 时,您知道您正在处理可能非常肮脏和危险的数据,并且您会小心处理它。

您最好花时间进行一些过滤,并可能决定如果 $_POST['email'] (或名称或其他)确实为空,下一步该做什么 - 重新定位用户,向用户显示警告等等。

助记符 FIEO 提供了基本规则、过滤输入、转义输出,您可以通过花几个小时研究它来为自己省去很多未来的痛苦。

于 2013-03-04T08:28:30.073 回答
0
//If you intend to put into database and you need to use a function

function clean($value){
$array = array("name", "email", "interest", "checkbox"); //For added security
   if(isset($_POST[$value]) && in_array($value, $array)){ //Since you are only concerned with post;
    return mysqli_real_escape_string($db_connection, $_POST[$value]); //and YES, use mysqli - forget what is deprecated in future projects
 }
}

$clean_name = clean("name");
$clean_email = clean("email");
$clean_interest = clean("interest");
$clean_checkbox = clean("checkbox");

echo $clean_email;
于 2013-03-04T09:11:00.567 回答
-2
function htmlentities_and_checkISset($string){

    $result = isset($string) ? htmlentities($string) : '';

    return $result
}

或者这样做

function htmlentities_and_checkISset(){


        // get number of arguments in this function
         $numargs = func_num_args();

         // get arguments comming to the function
         $arg_list = func_get_args();

         // for each arg do the thing you want and then store it in an array
         for ($i = 0; $i < $numargs; $i++) {

         $data[] = isset($arg_list[$i]) ? htmlentities($arg_list[$i]) : '';

        }

     return $data;
    }

你可以这样称呼它。

$data = htmlentities_and_checkISset($name,$email,$interest,$checkbox);

或者

 $data = htmlentities_and_checkISset($_POST['name'],$_POST['email'],$_POST['interest'],$_POST['checkbox']);
于 2013-03-04T07:59:25.103 回答