2013-03-11 2 views
0

Как создать форму на PHP, где результаты, введенные пользователем, будут сгенерированы в таблице? Когда я тестирую страницы, я получаю только начало полей таблицы, ключа и результатов (значений), но не значений!Почему моя 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> 

ответ

0

Ваш PHP, генерирующий таблицу, должен быть на результирующей странице, а не на странице формы. Или же вы можете указать action формы на ту же страницу, чтобы получить результаты, отправленные и обработанные o n на той же странице.

EDIT: Что я имею в виду следующее: PHP - как вы знаете - обрабатывается стороне сервера. Это означает, что ваш браузер отправляет запрос на сервер, сервер обрабатывает файл PHP, а затем он обслуживает клиентскую версию.

Проблема в вашем коде заключается в том, что у вас есть PHP-скрипт, обрабатывающий $_POST на странице, в которой пользователь должен заполнить форму. Когда пользователь заполняет форму и нажимает submit, он будет перенаправлен на страницу action, где будет доступно и обработано $_POST. Ваше недоразумение состоит в том, что вы ожидаете, что $_POST будет доступен на странице, где он размещен, а затем отправить его автоматически на страницу результатов. Это не то, что происходит, потому что сервер не имеет возможности поймать информацию, отправленную на той же странице, потому что она уже была отправлена ​​ ...

... если вы не делаете форму action прямо на той же странице , Затем сервер ловит информацию и обрабатывает ее.

Вы можете решить эти проблемы двумя способами.

  1. Укажите ваш action на странице результатов, как вы делаете сейчас, но переместили код обработки на открывшейся странице.

  2. Наведите свой номер action на эту же страницу.

Вы можете захотеть сделать что-то фантазию, как проверить, есть ли $_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; ?> 

Я сделал для вас рабочий пример. Просто перейдите по ссылке и нажмите на Run [F9] кнопку сверху, чтобы увидеть его в действии:

Working example

+0

Hello- Я не понимая вас. Вы говорите, что я должен поместить таблицу на страницу формы заказа вместо страницы формы результатов? Я пробовал это раньше, и после того, как я нажал кнопку отправки, я получил белую страницу! – user2155045

+0

Я обновил свой ответ, чтобы лучше объяснить вашу проблему и непонимание. Я также предоставил рабочий пример внизу для проверки страницы. – Sunyatasattva

+0

Спасибо, sunyatasattva! – user2155045

0

Это на самом деле сообщения хорошо для меня (я использовал PHP_SELF для вида действия) ,Я бы, однако, предположить, что вы используете $_SERVER[REQUEST_METHOD] для проверки POST:

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

Кроме того, быть явным о вызове отправленные переменные ($_POST[fname] & $_POST[lnane])

+0

Вы имеете в виду '$ _SERVER ['REQUEST_METHOD']'? Пожалуйста, не полагайтесь на строки без кавычек (которые фактически являются необъявленными константами). – IMSoP

+0

@IMSoP Я не понимаю вашего комментария. – Kermit

+1

Когда вы пишете '$ _SERVER [REQUEST_METHOD]', PHP видит 'REQUEST_METHOD' как константу - вы можете сказать' define ('REQUEST_METHOD', 'Hello'); 'и он станет эквивалентным' $ _SERVER ['Hello' ]; '. Для обратной совместимости, если вы * не * определяете константу, PHP предполагает, что вы подразумевали ее как строку '' REQUEST_METHOD'', но полагаться на это - плохая идея по той очевидной причине, что вы (или кто-то еще!) может фактически определить эту константу позже. – IMSoP

Смежные вопросы