为什么我的php表单没有生成值?

时间:2013-03-11 00:35:28

标签: php forms

如何在PHP中创建表单,从表中生成从用户输入的结果?当我测试页面时,我只获得表格,键和结果(值)字段的开头,但没有值!

这是我的代码(由于表格可能很长,我将字段数缩短为两个:

订单:

<?php

foreach ($_POST as $key => $entry)
{
    $totalfields++;
    echo "<tr>\n";  

    echo "<td>" . $key . "</td>";

    if (is_array ($entry)) { 
        $count = count($entry);
        echo "<td>";
        for ($i=0; $i<$count; $i++){
            echo $entry[$i] . "<br />";
        }
        echo "</td>";
    }   else   
    {
        echo "<td>$entry</td>";
    }
    echo "<tr>\n";
}
?>

<form method="post" action="address to the results form page">  


<label for="fname">First Name:</label>
<input type="text" name="fname" id="fname"/><br/>
<br/>

<label for="lname">Last Name:</label>
<input type="text" name="lname" id="lname"/><br/>
<br/>

 <p><input type="submit" value="Submit"/></p>


 </form>

结果表格页面:

 <div id="results table">
 <table border='1'>
 <tr>
 <th>
  Field
 </th>
 <th>
  Results
 </th>
 </tr>
 </table>
 </div>

2 个答案:

答案 0 :(得分:0)

生成表的PHP应该在结果页面中,而不是在表单页面中。或者,您可以将表单的action指向同一页面,以便在同一页面上发布和处理结果。

编辑:我的意思是:PHP - 您可能知道 - 处理服务器端。这意味着您的浏览器向服务器发送请求,服务器处理PHP文件,然后它为客户端提供处理后的版本。

代码中的问题是你有PHP脚本处理用户应填写表单的页面上的$_POST。当用户填写表单并点击提交时,他将被定向到action页面,其中$_POST将可用并处理。您的误解在于您希望$_POST在发布的页面上可用,然后将其自动发送到结果页面。 这不是因为服务器没有机会捕获您在同一页面上发送的信息,因为它已经提供了 ...

...除非您将表单操作直接指向同一页面。然后服务器捕获信息并处理它。

你可以用两种方式解决这个问题。

  1. action指向您现在正在执行的结果页面,但将处理代码移至结果页面。

  2. 将您的action指向同一页。

  3. 您甚至可能想要做一些奇特的事情,比如检查是否有$_POST信息,如果没有,则显示表格。如果有,显示结果。这一点根本不难实现:

    <?php
    if( $_POST ): ?>
    <div id="results table">
     <table border='1'>
         <thead>
             <tr>
             <th>
              Field
             </th>
             <th>
              Results
             </th>
             </tr>
         </thead>
         <tbody>
             <?php   
    
            foreach ($_POST as $key => $entry)
            {
    
                echo "<tr>\n";  
    
                echo "<td>" . $key . "</td>";
    
                if (is_array ($entry)) { 
                    $count = count($entry);
                    echo "<td>";
                    for ($i=0; $i<$count; $i++){
                        echo $entry[$i] . "<br />";
                    }
                    echo "</td>";
                }   else   
                {
                    echo "<td>$entry</td>";
                }
                echo "<tr>\n";
            }
    
        ?>
    
        </tbody>
    </table>
    </div>
    
    <?php else: ?>
    
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
    
    
    <label for="fname">First Name:</label>
    <input type="text" name="fname" id="fname"/><br/>
    <br/>
    
    <label for="lname">Last Name:</label>
    <input type="text" name="lname" id="lname"/><br/>
    <br/>
    
     <p><input type="submit" value="Submit"/></p>
    
     </form>
    
    <?php endif; ?>
    

    我为你做了一个工作的例子。只需转到链接,然后点击顶部的运行[F9] 按钮即可查看其中的操作:

    Working example

答案 1 :(得分:0)

这实际上对我来说很好(我使用PHP_SELF进行表单操作)。不过,我建议你使用$_SERVER[REQUEST_METHOD]来检查POST

if( $_SERVER[REQUEST_METHOD] == 'POST' ) { ...

此外,明确调用已过帐的变量($_POST[fname]&amp; $_POST[lnane]