2010-07-08 94 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">