2012-06-29 57 views
1

我写了两个文件main.phpdownload.php使用POST捕捉动态变量

main.php

echo"<form action='download.php' method='post'>" 
for(i = 0; i < 10; i++){ 
    echo"<input type='submit' name='$i'>"; 
} 

download.php,我想知道的是按下的是哪个名字的按钮? (从1到10下载文件),以便我可以在download.php中使用它下载文件。

我试图使用$ _POST [“$ i”]但失败。

如果$ i是随机文件名?

Thx!

完整代码

main.php:HTTP://codepad.org/4zXPhqFy

+1

我已经在我的答案中做了更新,它更容易,更好,请看看它。 –

回答

1

通过$key => $value访问$_POST在一个循环。排除你知道其他名称的值(如果你有其他值)。

foreach ($_POST as $key => $value) { 
    // Look for form keys not among other known ones 
    if (!in_array($key, array('other','known','input','names')) { 
    echo "You clicked $key"; 
    } 
} 

或者,使用ctype_digit()对关键岗位,以确定它是否数字,但不包括你可能在没有任何其他字符串键。

foreach ($_POST as $key => $val) { 
    if (ctype_digit($key)) { 
    echo "You clicked $key"; 
    // Access it via $_POST[$key] 
    } 
} 

请注意,除非您使用HTML5,name属性必须以字母开头,而不是数字。如果您使用的是HTML5,则name中允许使用空字符串。

+0

但是我想用$ _POST [按钮按下]之后,我该怎么办? –

+0

如果$ i是文件名,有没有办法? –

+0

@ Liang-YuPan使用上面的第二个例子,它将通过$ _POST [$ key]在$ _POST中返回数字键 –

1

首先你应该用字母开始提交的名字,而不是数字。如果你想从1到10的$i按钮必须从1开始,不是0

尽量做到这一点:

main.php

echo '<form action="download.php" method="post">'; 

for($i = 1; $i <= 10; $i++){ 
    echo '<input type="submit" name="button[' . $i . ']" value="Send" />'; 
} 

回声'

download.php

if(isset($_POST['button'])) 
{ 
    $button = key($_POST['button']); 

    echo 'Button ' . $button . ' was clicked'; 
} 
1

这里是另一个解决方案

构建按钮

for($i = 1; $i <= 10; $i++){ 
    echo '<input type="submit" name="button[' . chr($i+64) . ']"/>'; 
} 

我做了CHR,这样你可以看到它可以是任何文字

找出被按下

echo 'button ' . key($_POST['button']) . ' was pressed'; 

这种方式的好处是,你不需要一个循环来找出被按下的按钮。