不理解PHP中的这些$\u POST、数组和验证技术
我是通过辅导的方式学习的,老师使用了一个我感到困惑的验证程序 在表单页面上,他有以下名称的输入字段:不理解PHP中的这些$\u POST、数组和验证技术,php,arrays,post,isset,Php,Arrays,Post,Isset,我是通过辅导的方式学习的,老师使用了一个我感到困惑的验证程序 在表单页面上,他有以下名称的输入字段: 菜单名 位置 可见的 在表单处理页面上,他有以下php块(我们称之为块A): 在这个块下面是另一个将数据插入MySQL的php块——这一切都很好 然后,他在块A上方添加了以下php块(我们称之为块B): 问题1 我不明白为什么在他的$required\u fields数组中,他直接引用字段名。为什么不将块A移到块B上方,然后只引用从$\u POST分配的变量 然后在foreach循环中的
- 菜单名
- 位置
- 可见的
然后,他在块A上方添加了以下php块(我们称之为块B):
问题1 我不明白为什么在他的
$required\u fields
数组中,他直接引用字段名。为什么不将块A移到块B上方,然后只引用从$\u POST分配的变量
然后在foreach循环中的if语句中使用这些变量
我想我是在问我的替代方法是否有效?他采取这种做法有明显的原因吗
(仅供参考,mysql\u prep
是他为删除斜杠等而构建的自定义函数。)
问题2
如果我正确理解了他的代码,那么他的第一个If语句
将测试$fieldname
是否为!isset
(即未设置)或为空
有什么区别?由于我不知道两者的区别,我也不清楚他为什么使用|
操作符。你能解释一下吗
问题3
最后,他的第一个if语句
似乎捕获了任何错误,并将它们放入块B顶部的$errors数组中
然后,他使用第二个if语句
检查$errors数组
中是否有任何内容,如果有,则重新定向+退出
这种做法有明显的原因吗?在我看来,如果发现任何错误,第一个if语句可以重定向+退出。为什么要在$errors数组中捕获它们
据我所知,如果您想在准备输入之前检查输入是否存在,或者以其他方式检查输入是否存在,则没有区别
isset()
检查变量是否已设置(存在),而empty()
将在变量存在但不包含任何数据时返回true。|
运算符是OR运算符。如果isset()
返回false(!)或empty()
返回true,则该语句为true
我怀疑他填充错误数组的原因是为了能够显示表单中的所有错误,而不仅仅是第一个错误,当用户重新提交时,他会得到下一个错误
据我所知,如果您想在准备输入之前检查输入是否存在,或者以其他方式检查输入是否存在,则没有区别
isset()
检查变量是否已设置(存在),而empty()
将在变量存在但不包含任何数据时返回true。|
运算符是OR运算符。如果isset()
返回false(!)或empty()
返回true,则该语句为true
我怀疑他填充错误数组的原因是为了能够显示表单中的所有错误,而不仅仅是第一个错误,当用户重新提交时,他会得到下一个错误
问题1
这里发生的是他首先检查某些变量的存在性。如果它们不存在,则需要重定向。
我不知道prep函数做什么,但是对一个可能的空变量调用prep函数是不合逻辑的。你可以扭转局面,但那将是。。好扭转局面;)
首先检查你是否有你需要的一切,然后开始清理
问题2
未设置意味着它在POST中不可用。复选框会出现这种情况(如果不选中它们,则它们不会被激活。文本输入将为空。
即使你只有文本输入,在你检查它们的内容之前,确认它们的存在(可能在呼叫帖子中有问题,有人可能正在入侵你的表单)也是很好的:PHP当然是非常宽容的,但是检查不存在的内容并不是很好
概要:isset正在查看它是否存在,empty正在检查它的值
问题3
你可以将重定向和退出语句放在IF中,这会稍微快一点。但不是那么多,而你所做的对一些程序员来说是出乎意料的:你改变程序的某个流程在某个循环的中间(2个循环)。
这对我来说是可读的,但我认为在第一个“错误”时退出没有任何问题
稍后,您可能希望对丢失的POST值(所有这些值)执行一些操作,比如给它们一个特定的类,所以这可能是以后这样做的原因
问题1
这里发生的事情是,他首先检查某些变量是否存在。如果它们不存在,则需要重定向。
我不知道prep函数是做什么的,但是对一个可能的空变量调用prep函数是不合逻辑的。你可以把它转过来,但那将是..嗯..把东西转过来;)
首先检查你是否有你需要的一切,然后开始清理
问题2
未设置意味着它在POST中不可用。复选框会出现这种情况(如果不选中它们,则它们不会被激活。文本输入将为空。
即使您只有文本输入,在检查其内容之前,最好确保它们存在(调用帖子中可能有问题,有人可能正在对您的表单进行黑客攻击):PHP非常缺乏
$menu_name = mysql_prep($_POST['menu_name']);
$position = mysql_prep($_POST['position']);
$visible = mysql_prep($_POST['visible']);
$errors = array();
$required_fields = array('menu_name', 'position', 'visible');
foreach ($required_fields as $fieldname) {
if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) {
$errors[] = $fieldname;
}
}
if (!empty($errors)) {
redirect_to("new_subject.php");
exit;
}
foreach (list as item) {
if (condition1 is true) or (condition2 is true) {
#do something
}
}
foreach ($required_fields as $fieldname) {
if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) {
$errors[] = $fieldname;
}
}
echo "You must enter values in the following required fields: ";
foreach ($errors as &$item) {
echo $item . " ";
}