我正在寻找有关如何创建函数以使其更容易的信息。我知道有一种更简单的方法可以将我想要的发布变量写入 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 来说有点陌生。任何帮助将不胜感激。预先感谢您。
创建这样的函数似乎很诱人,看似删除了重复的代码等,但最终总是会咬你一口。
您的代码显示您转义了所有 POST 数据,为下一个环境(即 html 页面)做好准备。
因此,如果您仅将 $email 输出到 html 页面,那么它似乎是值得的。
但是,如果您同时输出到网页“Thank you $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 这样的 var,你会想,现在等等,这个转义是否为下一个环境做好了准备?从哪里来的?
当您看到 $_POST['email'] 时,您知道您正在处理潜在的非常脏和危险的数据,并且要小心处理。
您最好花时间进行一些过滤,并可能决定如果 $_POST['email'] (或名称或其他)确实为空,下一步该怎么做 - 重新定位用户,向用户显示警告用户等等。
助记符 FIEO 提供了基本规则,过滤输入,转义输出,您可以通过花几个小时研究它来为自己节省很多未来的痛苦。
//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;
` $_POST['email'] = array_key_exists('email', $_POST) && is_string($_POST['email']) ? strip_tags(stripslashes($_POST['email'])) : null;
// Check if they have filled in the email section from form
if (empty($_POST['email'])) {
echo 'invalid input';
exit;
}
// if using mysqli then escape data like
$email = mysqli_escpae_string($_POST['email']);
// insert info into database or whatever
mysqli_query("INSERT INTO tablename (email) VALUES ('".$email."')");
echo 'Email posted: '.htmlspecialchars(htmlentities($_POST['email']));
`
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']);