有人能告诉我为什么这不是';这不是分配$_POST变量的好方法


Can someone tell me why this isn't a good way to assign $_POST vars?

我想知道是否有人能在PHP/mySQL表单提交期间提出一种更优雅的分配变量的方法。这看起来很笨重的

//include("connect.php");mysql_connect("localhost"、"root"、"根");mysql_select_db("noirTEST");//从POST变量中分配出变量,为SQL插入做好准备$thumb_image_location=$_POST['thumb_iimage_location'];$large_image_location=$_POST['large_iimage_location'];$password=消毒字符串($_POST['password1']);$firstName=消毒字符串($_POST['firstName']);$lastName=消毒字符串($_POST['lastName']);$desc_short=消毒字符串($_POST['desc_short']);$nationality=sanceString($_POST['nationality']);$speakEnglish=消毒字符串($_POST['speakEnglish']);$speakGerman=消毒字符串($_POST['speakGerman']);$mainInst=消毒字符串($_POST['mainInst']);$inspiration1=消毒字符串($_POST['inspiration1']);$inspiration2=消毒字符串($_POST['inspiration2']);$inspiration3=消毒字符串($_POST['inspiration3']);$inspiration4=消毒字符串($_POST['inspiration4']);$inspiration5=消毒字符串($_POST['inspiration5']);$desc_long=消毒字符串($_POST['desc_long']);$link1name=消毒字符串($_POST['link1name']);$link1url=消毒字符串($_POST['link1url']);$link2name=消毒字符串($_POST['link2name']);$link2url=sanceString($_POST['link2url']);$link3name=消毒字符串($_POST['link3name']);$link3url=消毒字符串($_POST['link3url']);$email=消毒字符串($_POST['email']);$proExperience=消毒字符串($_POST['proExperience']);$haveStudio=消毒字符串($_POST['haveStudio']);$musicTheory=消毒字符串($_POST['musicTheory']);$composer=消毒字符串($_POST['composer']);$teacher=消毒字符串($_POST['teacher']);$query="插入到NOIR用户(thumb_image_location,large_image_location,password,firstName,lastName,desc_short,nationality,speakEnglish,speakGerman,mainInst,inspiration1,inspiration2,inspiraction3,inspirition4,inspivation5,desc_long,link1name,link1url,link2name,link2url,link3name,link3url,电子邮件,proExperience,haveStudio,musicTheory,composer,tear)VALUES("$thumb_image_location"、"$large_image_location"、"$密码"、"$sirstName"、"$SlastName"、《$desc_short》、"$nationality》、"$speakEnglish"、"@speakGerman"、"@mainInst"、"$1inspiration1"、"$2inspiration2"、"$3inspiration3"、"$0inspiration4"、"$5inspiration5"、link3url','$email','@proExperience','$shaveStudio','@musicTheory’,'$composer','$tear')";函数消毒字符串($string){$string=修剪($string);$string=strip_tags($string);$string=htmlentities($string);$string=条带斜线($string);return$string;};

像这样的东西适合长的第一部分吗?

foreach($_POST as $key => $value){
    ${$key} = $value;
    sanitizeString($key);
}

我看到的每个例子似乎都用了很长的路或类似的东西。。因此,我确信不能/不应该使用较短的方式是有原因的。但有人能向我解释一下吗?

例如,您也应该在sanitizeString函数中使用mysql_real_sescape_string。

或者更好的是,使用PDO,它将为您逃离字符串。

您的替代方案与启用register_globals的效果相同,这是一个非常糟糕的主意(如果您真的想这样做,您可以将extract与array_map一起使用,但不要这样做。)。

我建议循环并清除$_POST中的值(最好是在新数组中,这样您就可以控制哪些值已被过滤,哪些值未被过滤),或者简单地使用查询中过滤的值(您可能还想看看使用准备好的查询)。您还可以创建一个期望的列表,设置表单值,然后循环浏览该列表,并在遇到值时检查和筛选这些值。这将允许您检查是否确实设置了值,以及请求是否包含您所期望的内容。

您还希望避免使用stripslashes(),除非启用了magic_quotes,否则您将在消毒函数中丢失有效的-s,如果您的字段包含<,则使用strip_tags将删除太多内容;,并且您希望执行HTML转义输出(到HTML),而不是输入。