2010-07-08 3 views
2

У меня есть форма, которая вставляет информацию о книге в базу данных. однако он не читает атрибут $ _POST.

book.php:

<form action="books_manage.php" id="addbook_form" method="post"> 

    <div id="ab_wrapper"> 

     <div id="ab_leftcolumn"> 
       <div id="bookinfo"> 
       <fieldset> 
        <legend>Book Details</legend> 
         <div class="field"> 
          <label>Book ID</label> 
          <input type="text" name="bid" id="bid"/> 
         </div> 
         <div class="field"> 
          <label>Name</label> 
          <input type="text" name="bname" id="bname"/> 
         </div> 
          <div class="field"> 
          <label>Author</label> 
          <input type="text" name="bauthor" id="bauthor"/> 
         </div> 
          <div class="field"> 
          <label>Info</label> 
          <textarea name="binfo" id="binfo" cols="5" rows="5" ></textarea> 
         </div> 
         <div class="field"> 
          <label>Date Added</label> 
          <input type="text" value="<?php echo date('D d M Y')?>" name="bdateadd" id="bdateadd"/> 
         </div> 
         <div class="field"> 
          <label>Date Updated</label> 
          <input type="text" value="<?php echo date("D d M Y")?>" name="bdateupd" id="bdateupd"/> 
         </div> 
         <div> 
         <input type="hidden" name="action" value="save"> 
         <input type="submit" value="Save"> 
         <input type="button" id="addcontent" value="Add Content"> 
         <input type="reset" value="Reset"> 
         </div> 
       </fieldset> 
       </div> 
     </div> 

     <div id="ab_rightcolumn"> 
       <div id="bookcontents"> 
       <fieldset> 
        <legend>Book Content</legend> 
         <div class="field"> 
          <label>Chapter</label> 
          <input type="text" id="bchapter" name="bchapter"/> 
         </div> 
         <div class="field"> 
          <label>Sub-Chapter</label> 
          <input type="text" id="bsubchapter" name="bsubchapter"/> 
         </div> 
          <div class="field"> 
          <label>Content</label> 
          <textarea id="bcontent" name="bcontent" rows="6" cols="8"></textarea> 
         </div> 
         <br /> 
         <div> 
         <input type="hidden" name="action" value="addnext"> 
         <input type="submit" value="Save and Add Next Chapter"> 
         <input type="submit" name="action" value="Done"> 
         </div> 

       </fieldset> 
      </div> 

     </div> 

    </div> 



    </form> 

books_manage.php:

<?php 
    if (isset($_POST['action']) && $_POST['action'] == 'save') 
    { 
     echo "You clicked the save button"; 
    } 
    else { 
    echo "Hello. The date is " . date("D d M Y") ; 

    } 

?> 

выход:

Hello. The date is Thu 08 Jul 2010 

кажется, что это не читает значение скрытой кнопки. он должен отображать «Вы нажали кнопку« Сохранить ». Я что-то упускаю?

+1

У вас есть 3 поля с названием действие, которое второе может перекрывать первое и т. д. – Prix

ответ

6

Прежде всего, несколько <input> s в том же <form> с тем же самым атрибутом name не приведет вас к поведению, которое вы ищете.

Вместо этого вам нужно указать имя на кнопки отправить, а затем вы можете проверить, какой была нажата кнопка:

<input type="submit" name="save" value="Add Content"> 
<input type="submit" name="done" value="No more content"> 

<?php 
if(isset($_POST['save'])) { 
    echo "saved"; 
} else if(isset($_POST['done'])) { 
    echo "done"; 
} 
?> 

Смотрите комментарии ниже по Lesė величества, чтобы узнать, как рабочая группа HTML effed этот вверх.

+4

+1 для отображения наилучшего подхода для обработки форм с несколькими действиями. –

+1

благодарит ребята за то, что я указал на эту глупую ошибку. – input

+1

Это хороший подход, и было бы лучше, если бы не плохой дизайн кнопок отправки. С опциями 'select' и флажками ярлык для опции и представленного значения являются отдельными атрибутами. Но для кнопок отправки кнопки «label» _is_ отправленное значение. Это был ужасный выбор дизайна со стороны рабочей группы HTML. Это означает, что если вы когда-либо решите сделать презентационные изменения (переименуйте ярлык отправки или предложите разные локализации), вам придется редактировать свою логику на стороне сервера, не говоря уже о проверке таких значений, как «Сохранить и добавить следующую главу», , –

2

Чтобы определить действие, вам нужно называть кнопку «отправить» отправкой и использовать значение этой кнопки. У вашего кода в основном есть два значения формы действия, а последнее - то, что имеет преимущество.

<form action="books_manage.php" id="addbook_form" method="post"> 

<div id="ab_wrapper"> 

    <div id="ab_leftcolumn"> 
      <div id="bookinfo"> 
      <fieldset> 
       <legend>Book Details</legend> 
        <div class="field"> 
         <label>Book ID</label> 
         <input type="text" name="bid" id="bid"/> 
        </div> 
        <div class="field"> 
         <label>Name</label> 
         <input type="text" name="bname" id="bname"/> 
        </div> 
         <div class="field"> 
         <label>Author</label> 
         <input type="text" name="bauthor" id="bauthor"/> 
        </div> 
         <div class="field"> 
         <label>Info</label> 
         <textarea name="binfo" id="binfo" cols="5" rows="5" ></textarea> 
        </div> 
        <div class="field"> 
         <label>Date Added</label> 
         <input type="text" value="<?php echo date('D d M Y')?>" name="bdateadd" id="bdateadd"/> 
        </div> 
        <div class="field"> 
         <label>Date Updated</label> 
         <input type="text" value="<?php echo date("D d M Y")?>" name="bdateupd" id="bdateupd"/> 
        </div> 
        <div> 
        <input type="submit" name="action" value="Save"> 
        <input type="button" id="addcontent" value="Add Content"> 
        <input type="reset" value="Reset"> 
        </div> 
      </fieldset> 
      </div> 
    </div> 

    <div id="ab_rightcolumn"> 
      <div id="bookcontents"> 
      <fieldset> 
       <legend>Book Content</legend> 
        <div class="field"> 
         <label>Chapter</label> 
         <input type="text" id="bchapter" name="bchapter"/> 
        </div> 
        <div class="field"> 
         <label>Sub-Chapter</label> 
         <input type="text" id="bsubchapter" name="bsubchapter"/> 
        </div> 
         <div class="field"> 
         <label>Content</label> 
         <textarea id="bcontent" name="bcontent" rows="6" cols="8"></textarea> 
        </div> 
        <br /> 
        <div> 
        <input type="submit" name="action" value="Save and Add Next Chapter"> 
        <input type="submit" name="action" value="Done"> 
        </div> 

      </fieldset> 
     </div> 

    </div> 

</div> 


<?php 
    if (isset($_POST['action']) && $_POST['action'] == 'Save') 
{ 
    echo "You clicked the save button"; 
} 
else if (isset($_POST['action']) && $_POST['action'] == 'Save and Add Next Chapter') 
{ 
    echo 'You clicked the "Save and Add Next Chapter" button'; 
} 
else if (isset($_POST['action']) && $_POST['action'] == 'Done') 
{ 
    echo 'You clicked the done button'; 
} 
else 
{ 
echo "Hello. The date is " . date("D d M Y") ; 
} 
    ?> 
3

Its, потому что вы определили действия 3 раза

<input type="hidden" name="action" value="save"> 
<input type="hidden" name="action" value="addnext"> 
<input type="submit" name="action" value="Done"> 

Проделайте followin на вашем books_manage.php

echo "<pre>"; 
print_r($_POST); 
echo "</pre>"; 

Вы увидите, где вы собираетесь не так.

+0

спасибо за указатель. – input

4

У вас есть два входа с названием «действие» в том же виде. Убедитесь, что имена полей формы уникальны.

Не забывайте, что вы можете организовать ваши имена, используя следующий синтаксис -

<input name="form1['name']" value=""..... 
<input name="form2['name']" ..... etc 

Затем доступ к этим переменным, как это:

$_POST['form1']['name']... 

Очень полезный!

2
     <input type="hidden" name="action" value="addnext"> 
        <input type="submit" value="Save and Add Next Chapter"> 
        <input type="submit" name="action" value="Done"> 

У вас есть два входа с названием «действие».действие, которое Вы получаете, вероятно, «Done», а не «сохранить»

2

Вы несколько входов с именем action вы получите

<input type="hidden" name="action" value="save"> 
<input type="hidden" name="action" value="addnext"> 
<input type="submit" name="action" value="Done"> 

Вы должны удалить скрытые переменные и изменить имя вашего первый «представить 'to' action '

<input type="submit" name="action" value="Save"> 
<input type="submit" name="action" value="Done">