Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php循环中获取动态添加的输入值_Php_Html_Wordpress - Fatal编程技术网

如何在php循环中获取动态添加的输入值

如何在php循环中获取动态添加的输入值,php,html,wordpress,Php,Html,Wordpress,我在contact form 7中创建了一个表单,并使用repeater fields插件。我有两个字段 <input type="text" name="serienummer1__1" value="" class="wpcf7-form-control wpcf7-text form-control serielnumber" data-orig_name="serienummer1"

我在contact form 7中创建了一个表单,并使用repeater fields插件。我有两个字段

<input type="text" name="serienummer1__1" value=""  class="wpcf7-form-control wpcf7-text form-control serielnumber" data-orig_name="serienummer1">
<input type="text" name="productcode1__1" value=""  class="wpcf7-form-control wpcf7-text form-control productcode" data-orig_name="postcode1">
问题是当用户克隆这些字段时,repeater插件更改了输入的名称值,然后变成这样

$serNo = $_GET['serienummer1__1'];
$prodCode = $_GET['productcode1__1'];
<input type="text" name="serienummer1__2" value=""  class="wpcf7-form-control wpcf7-text form-control serielnumber" data-orig_name="serienummer1">
<input type="text" name="productcode1__2" value=""  class="wpcf7-form-control wpcf7-text form-control productcode" data-orig_name="postcode1">
但这是不方便的,然后我还必须写的次数,因为用户可以重复这个部分的次数没有限制。。 我的问题是如何在php中动态获取这些值? 我尝试通过以下方式循环并获取值:

for($i=1; $i<=10; ++$i) {
    if(isset($_GET['serienummer1__'.$i])) {
     $serNo = $_GET['serienummer1__'.$i];
    }
}

对于($i=1;$i我不熟悉Contact Form 7或其附加插件,因此如果有一种方法可以将转发器字段作为数组发送(如@pavel所述),那将是理想的。如果没有,您需要获取信息并自行处理

有十几种方法可以做到这一点,我能想到的第一种方法是使用遍历
$\u获取
值并将它们分配到单独的数组

由于
$\u GET
是不安全的,并且对用户输入是开放的,因此在对参数和值进行任何操作之前,您需要检查它们

假设您的表单已发布,并且您的URL如下:

https://example.com/?serienummer1__1=a-SN11&productcode1__1=a-PC11&serienummer1__2=b-SN12&…
您将得到一个如下所示的
$\u GET
数组

$_GET = array(
    'serienummer1__1' => 'a-SN11',
    'productcode1__1' => 'a-PC11',
    'serienummer1__2' => 'b-SN12',
    'productcode1__2' => 'b-PC12',
    'serienummer1__3' => 'c-SN13',
    'productcode1__3' => 'c-PC13',
);
现在,正如我提到的,
$\u GET
易受用户输入的影响,您不希望用户向其中添加自己的内容,因此您需要检查其格式。一种简单的方法是使用和检查格式:

$regex = '/(productcode1|serienummer1)__\d*/';
现在,在执行任何操作之前,您需要一些变量来存储验证结果:

$serNo = $prodCode = array();
设置好所有内容后,我们可以继续遍历数组,通过引用传递这两个空数组,如果通过了格式化测试,则向它们添加值

// Walk through the $_GET array and assign values
array_walk( $_GET, function($value, $key) use ($regex, &$serNo, &$prodCode){
    // Does this key match our format?
    if( preg_match( $regex, $key ) ){
        // Yes, which array does it go in?
        if( strpos($key, 'serienummer1__') !== false ){
            $serNo[] = $value;
        } else if( strpos($key, 'productcode1__') !== false ){
            $prodCode[] = $value;
        }
    }
});
现在,您已经验证了键,并将值添加到适当的数组中,您可以使用这些值执行任何操作

#var_dump( $serNo );    // Contains: array(3){ 'a-SN111', 'b-SN12', 'c-SN13' }
#var_dump( $prodCode ); // Contains: array(3){ 'a-PC111', 'b-PC12', 'c-PC13' }
您现在可以通过索引访问各个变量:

echo 'Second Product Code is '. $prodCode[1]; // output: "Second Product Code is b-PC12"
这应该具有足够的可扩展性,可以处理您在它上通过的任意数量的重新创建字段

它可能有点过于复杂,但在我看来,使用
$\u GET
保证了额外的安全性(您甚至可能希望验证/清理每个值的
$值
)。至少,这应该足以让您继续。根据您正在做的事情,您可以在末尾的两个数组中循环以输出数据或生成电子邮件,或者您需要的任何内容:

for( $i = 0, $n = count($serNo); $i < $n; $i++ ){
    printf( "Item #%d: [Series: %s] [Product: %s]", $i, $serNo[$i], $prodCode[$i] );
}
for($i=0,$n=count($serNo);$i<$n;$i++){
printf(“项目#%d:[系列:%s][产品:%s]”、$i、$serNo[$i]、$prodCode[$i]);
}
您可以看到一起编译的代码作为一个示例。

“我不确定我是否正确解释了我的问题。”-我也不确定,删除您已经存在的问题(),然后再去问同样的问题是什么原因。“但这会给出1而不是值。”-确切地说是什么意思?如果这是您的循环包含的全部内容,那么当然,
$serNo
将在每次循环迭代中被覆盖,这意味着在循环之后,您将只获得最后一个值。那么这是您的真实代码,还是您尝试并实际使用循环中的值做了任何事情?
for( $i = 0, $n = count($serNo); $i < $n; $i++ ){
    printf( "Item #%d: [Series: %s] [Product: %s]", $i, $serNo[$i], $prodCode[$i] );
}