我正在寻找有关如何使功能更容易的信息。我知道有一种更简单的方法,然后将我想要的发布变量写入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新手。任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
制作这样的函数似乎很有吸引力,似乎删除了重复的代码等,但它总是最终咬你。
您的代码显示您为下一个将成为html页面的环境转义所有POST数据。
所以,如果你只输出$ email到html页面,它看似值得。
但是如果你输出到一个网页“谢谢你的电子邮件”并将其存储到数据库中,那么你还没有为数据库转义它,所以你冒着sql注入攻击的风险。
直到你知道得更清楚,你最好离开$ _POST ['email'],并在输出时将其转义。
echo htmlentities($_POST['email']);
OR
$query = 'update names set email = "'.mysql_real_escape_string($_POST['email']).'" where ID =1';
或者首选使用PDO / Mysqli和准备好的语句,这些语句可以帮助您逃避。
htmlentities 是一种逃避html输出的方法 mysql_real_escape_string 是一种逃避mysql数据库的方法(虽然已经过时了,正如我和其他人所说的那样)。
事实是,如果你遇到类似$ email的var,你会想到,现在坚持下去,这是否为下一个环境做好了准备?它来自哪里?
当你看到$ _POST ['email']时,你知道你正在处理可能非常脏和危险的数据,并且你小心处理它。
你会花更多的时间做一些过滤,并且可能决定如果$ _POST ['email'](或名称或其他)确实是空的,下一步做什么 - 重新定位用户,显示警告给用户等等。
助记符FIEO提供了基本规则,滤波器输入,逃生输出,你可以花几个小时来研究它,为你节省很多未来的痛苦。
答案 1 :(得分: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;
答案 2 :(得分:-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']);