Php 清理窗体中的数组元素
我有一个表单,它使用输入来创建和数组。并非所有输入都是必需的,但至少有一个是必需的Php 清理窗体中的数组元素,php,html,arrays,Php,Html,Arrays,我有一个表单,它使用输入来创建和数组。并非所有输入都是必需的,但至少有一个是必需的 <form method="post" action="process.php"> <input type="text" name="MAC[]" maxlength="12" /> <input type="text" name="MAC[]" maxlength="12" /> <input type="text" name="MAC[]" m
<form method="post" action="process.php">
<input type="text" name="MAC[]" maxlength="12" />
<input type="text" name="MAC[]" maxlength="12" />
<input type="text" name="MAC[]" maxlength="12" />
<input type="text" name="MAC[]" maxlength="12" />
<input class="submitbg" type="submit" value="Register" name="submit"/>
</form>
问题是:
若要检查是否至少有一个,您应该能够使用
if(count($my_数组)>1)
若要检查是否至少有一个,您应该能够使用if(count($my_数组)>1)
trim
,因为处理数据的开销最终会减少break
$my\u array
进行任何更新foreach($my_array as &$val)
您通过引用传递,因此对$val的所有更新都发生在实际数组中。或:
foreach($my_array as $key=>$val){
$my_array[$key]=trim($my_array[$key]);
您还可以尝试为经过清理的数据创建一个新数组,然后重写旧数组。这完全取决于需要
trim
,因为处理数据的开销最终会减少break
$my\u array
进行任何更新foreach($my_array as &$val)
您通过引用传递,因此对$val的所有更新都发生在实际数组中。或:
foreach($my_array as $key=>$val){
$my_array[$key]=trim($my_array[$key]);
您还可以尝试为经过清理的数据创建一个新数组,然后重写旧数组。这完全取决于需要。我也不理解你的问题。 但是,看看你的代码,你可能会觉得最终你发布的变量没有发生任何事情。 你说得对!:-) 脚本末尾清理的数组与原始数组完全相同。 您可能希望实现这样的效果:如果干净数组包含12个字符,那么它将包含干净的值
$my_array = $_POST['MAC'];
$my_clean_array = $_POST['MAC'];
foreach ($my_array as $val) {
$val = strtoupper($val);
$val = str_replace(";","",$val);
$val = str_replace(":","",$val);
$val = trim($val);
if (strlen($val) != 12)) {
$valid = false;
$error = "Your MAC address is not 12 characters long";
}
else {
$my_clean_array[] = $val;
}
}
$mac_addresses = serialize($my_clean_array);
我也不理解你的问题。 但是,看看你的代码,你可能会觉得最终你发布的变量没有发生任何事情。 你说得对!:-) 脚本末尾清理的数组与原始数组完全相同。 您可能希望实现这样的效果:如果干净数组包含12个字符,那么它将包含干净的值
$my_array = $_POST['MAC'];
$my_clean_array = $_POST['MAC'];
foreach ($my_array as $val) {
$val = strtoupper($val);
$val = str_replace(";","",$val);
$val = str_replace(":","",$val);
$val = trim($val);
if (strlen($val) != 12)) {
$valid = false;
$error = "Your MAC address is not 12 characters long";
}
else {
$my_clean_array[] = $val;
}
}
$mac_addresses = serialize($my_clean_array);
我只是不确定我的foreach循环是否每次都更新并重新保存这些值
如果要保存这些值,应更改循环,使其看起来如下所示:
foreach ($my_array as $idx => $val) {
...
$my_array[$idx] = $val;
}
当然,您也可以将适当的值保存到一个单独的干净数组中,然后在应用程序中进一步使用该数组
我还必须检查以确保至少有一个条目
理论上,在foreach中使用数组时,不必检查数组是否包含元素。但需要检查的是变量是否包含数组。假设MAC[]
字段没有提交到服务器,您首先会收到一条警告(现在也可能是错误),因为您正在查找数组中不存在的索引。其次,您的foreach
在处理数组(或其他任何对象)时会出现错误。您可以通过以下检查来解决此问题:
if (!empty($_POST['MAC'])) {
$my_array = $_POST['MAC'];
if (!is_array($my_array)) {
// throw some error.
}
}
当然,您希望以更结构化的方式验证输入,方法是提供一个验证框架,您可以提供验证规则和一些输入,然后验证框架将为您处理验证,最重要的是错误消息
实际上,还可以将最后一个if
-语句更改为:
if (!is_array($my_array) && !($my_array instanceof Traversable))
如果您想确保$my_数组中包含可以使用foreach
遍历的内容,就可以这样做。令人讨厌的是,内置数组()不可遍历
,虽然可以理解,但令人讨厌
我只是不确定我的foreach循环是否每次都更新并重新保存这些值
如果要保存这些值,应更改循环,使其看起来如下所示:
foreach ($my_array as $idx => $val) {
...
$my_array[$idx] = $val;
}
当然,您也可以将适当的值保存到一个单独的干净数组中,然后在应用程序中进一步使用该数组
我还必须检查以确保至少有一个条目
理论上,在foreach中使用数组时,不必检查数组是否包含元素。但需要检查的是变量是否包含数组。假设MAC[]
字段没有提交到服务器,您首先会收到一条警告(现在也可能是错误),因为您正在查找数组中不存在的索引。其次,您的foreach
在处理数组(或其他任何对象)时会出现错误。您可以通过以下检查来解决此问题:
if (!empty($_POST['MAC'])) {
$my_array = $_POST['MAC'];
if (!is_array($my_array)) {
// throw some error.
}
}
当然,您希望以更结构化的方式验证输入,方法是提供一个验证框架,您可以提供验证规则和一些输入,然后验证框架将为您处理验证,最重要的是错误消息
实际上,还可以将最后一个if
-语句更改为:
if (!is_array($my_array) && !($my_array instanceof Traversable))
如果您想确保$my_数组中包含可以使用
foreach
遍历的内容,就可以这样做。令人讨厌的是,内置数组()不可遍历
,虽然可以理解,但令人讨厌 哇-我可以评论我自己的答案;-)看看这个:哇-我可以评论我自己的答案;-)看看这个:问题是我的foreach循环是否会将更新的值保存回数组中?以及如何检查以确保存在