2010-07-08 57 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個字段命名爲action,第二個字段可能與第一個字段重疊等等。 – Prix 2010-07-08 13:54:04

回答

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"; 
} 
?> 

見冒犯君主下面發表評論我要學習HTML工作組如何effed這一個向上。

+4

+1表示處理「多行動」表單的最佳方法。 – 2010-07-08 13:56:38

+1

謝謝你們指出我這個愚蠢的錯誤。 – input 2010-07-08 14:07:13

+1

這是一個很好的方法,如果不是提交按鈕的糟糕設計,那將是最好的方法。使用'select'選項和複選框,選項的標籤和提交的值是不同的屬性。但對於提交按鈕,按鈕「標籤」是提交的值。這是HTML工作組的一個糟糕的設計選擇。這意味着,如果您決定進行表示式更改(重新提交提交標籤或提供不同的本地化),則最終不得不編輯服務器端邏輯,更不用說檢查諸如「保存並添加下一章」之類的值了。 。 – 2010-07-08 14:10:08

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

其監守你定義了動作3次

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

做你books_manage.php

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

你會看到你要去哪裏錯跟隨着。

+0

謝謝你的指針。 – input 2010-07-08 14:07:33

4

您有兩個輸入名稱爲「action」的表單。確保您的表單字段名稱是唯一的。

不要忘記你可以使用此語法組織你的名字 -

<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"> 

你有兩個名字爲「action」的輸入。你的行動很可能是「完成」,而不是「救」

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">