我的HTML表单中有20个“输入字段”。
这是一个品尝者:
<input id="a1height" />
<input id="a1width" />
<input id="a1length" />
<input id="a1weight" />
<input id="a2height" />
<input id="a2width" />
<input id="a2length" />
<input id="a2weight" />
...and so on
现在,我需要一种方法:
a)将所有值存储在一个变量中,管道(|)位于高度,宽度,长度和宽度之间。每组之间的重量和\ n b)如果集合中的一个或多个字段不完整,我的变量$ errors设置为true。
我对如何实现这一点感到有点失落。从来没有真正好用循环:'(
有人可以解释一下如何做到这一点吗?
非常感谢!!
答案 0 :(得分:1)
这是一个解决方案,使用存储所有错误的$errors
数组和包含所需输出的$all
字符串。要检查,请将var_dump( $all);
放在脚本的末尾。
$errors = array();
$all = '';
// Loop over the values 1 through 20
foreach( range( 1, 20) as $i)
{
// Create an array that stores all of the values for the current number
$values = array(
'a' . $i . 'height' => $_POST['a' . $i . 'height'],
'a' . $i . 'width' => $_POST['a' . $i . 'width'],
'a' . $i . 'length' => $_POST['a' . $i . 'length'],
'a' . $i . 'weight' => $_POST['a' . $i . 'weight']
);
// Make sure at least one submitted value is valid, if not, skip these entirely
if( count( array_filter( array_map( 'is_numeric', $values))))
{
// This basically checks if there's at least one numeric entry for the current $i
continue; // Skip
}
// Validate every value
foreach( $values as $key => $value)
{
if( empty( $value))
{
$errors[] = "Value $key is not set";
}
// You can add more validation in here, such as:
if( !is_numeric( $value))
{
$errors[] = "Value $key contains an invalid value '$value'";
}
}
// Join all of the values together to produce the desired output
$all .= implode( '|', $values) . "\n";
}
要很好地格式化错误,请尝试以下方法:
// If there are errors
if( count( $errors) > 0)
{
echo '<div class="errors">';
// If there is only one, just print the only message
if( count( $errors) == 1)
{
echo $errors[0];
}
// Otherwise format them into an unordered list
else
{
echo '<ul>';
echo '<li>' . implode( '</li><li>', $errors) . '</li>';
echo '</ul>';
}
echo '</div>';
}
答案 1 :(得分:1)
首先应为您的输入创建NAME属性,因为这些属性将在_POST数组中用于指定您的值。
<input id="a1height" name="a1height" />
<input id="a1width" name="a1width" />
<input id="a1length" name="a1length" />
<input id="a1weight" name="a1weight" />
<input id="a2height" name="a2height" />
<input id="a2width" name="a2width" />
<input id="a2length" name="a2length" />
<input id="a2weight" name="a2weight" />
然后,在提交之后,遍历post数组,创建管道连接的varibles
$errors = false;
$string = "";
$current_prefix = '';
foreach($_POST as $key=>$posted_value){
if(trim($posted_value)==""){ //if the value is empty or just spaces
$errors = TRUE;
}
//find out if we need to add a new line
$number = preg_replace ('/[^\d]/', '', $key) //get the numbers of the name only
if ($current_prefix != $number){
$string .= "\n";
} else {
$string .= '|';
}
$string .= $posted_value;
}
答案 2 :(得分:0)
将值插入数组中,如下所示:
$your_array['a1']['height'] = $_POST['a1height'];
请记住验证并清理您的输入。
答案 3 :(得分:0)
您可以更改您的html,以便发布的字段包含格式良好的数组:
<input name="a1[height]" />
<input name="a1[width]" />
<input name="a1[length]" />
<input name="a1[weight]" />
<input name="a2[height]" />
<input name="a2[width]" />
<input name="a2[length]" />
<input name="a2[weight]" />
这样你就可以获得一个易于使用的数组。您可以访问$_POST['a1']['height']
或$_POST['a1']['length']
或$_POST['a2']['height']
。