2011-05-02 53 views
0

Hy guys!我第一次開發一個Perl Web應用程序。 我有一個包含2個表格的頁面,每個頁面上分別提交。 問題如下: 提交第二個表單時,它會執行第一個表單操作。 Params通過Get方法發送,url包含兩個表單中的輸入字符串。 這是代碼。perl多個表單問題

#!C:\Perl\bin\perl 

use DBI; 
use DBD::mysql; 
print "content-type: text/html \n\n"; 
print '<html>'; 
print '<body>'; 
# DBI CONFIG VARIABLES 
$host = "localhost"; 
$database = "t2"; 
$port = 3308; 
$user = ""; 
$pw = ""; 


#DATA SOURCE NAME 
$dsn = "dbi:mysql:$database:localhost:3306"; 

# PERL DBI CONNECT (RENAMED HANDLE) 
$conn = DBI->connect($dsn, $user, $pw) or die "Unable to connect: $DBI::errstr\n"; 

$query = 'SELECT * From book'; 

$query_handle = $conn->prepare($query); 

# EXECUTE THE QUERY 
$query_handle->execute(); 

$query_handle->bind_columns(\$id, \$title ,\$author ,\$price, \$stock); 

print '<table border="1">'; 
print '<thead>'; 
print '<tr>'; 
print '<td> Id </td>'; 
print '<td> title</td>'; 
print '<td> Author </td>'; 
print '<td> price</td>'; 
print '<td> Stock </td>'; 
print '<td> Buy </td>'; 

print '</tr>'; 
print '</thead>'; 

while($query_handle->fetch()) { 



    print '<tr>'; 
    print '<td>'; 
    print $id; 
    print '<td\>'; 
    print '<td>'; 
    print $title; 
    print '<td\>'; 
    print '<td>'; 
    print $author; 
    print '<td\>'; 
    print '<td>'; 
    print $price; 
    print '<td\>'; 
    print '<td>'; 
    print $stock; 
    print '<td\>'; 
    print '<td>'; 
    if ($stock ne '0') 
    { 

     print '<form name="form1" action = "http://localhost/t3/buyBook.pl" method="get">'; 
     print '<input type="hidden" name="buy_id" value="'.$id.'"'; 
     print '<input type="submit" name="buy" value="Buy"'; 
     print '<form\>' 
    }else 
    { 
     print '<input type="submit" name="buy" disabled="disabled" value="Buy"'; 
    } 
    print '<td\>'; 
    print '<tr\>'; 

} 
print '</table>'; 

print '<form name="form2" action="http://localhost/t3/search_book.pl" method="get ">'; 
print '<br/>'; 
print 'Search for book by:'; 
print '<br/>'; 
print '<input type="radio" name="searchBy" value="Title"> Title <br/>'; 
print '<input type="radio" name="searchBy" value="Author"> Author <br/>'; 
print '<input type="text" name="search_book" >'; 
print '<br/>'; 
print '<input type="submit" name="search" value="Search">'; 
print '</form>'; 

print '<body/>'; 
print '<html/>'; 

這裏顯示的網址按任意2個提交按鈕時: http://localhost/tema3/buyBook.pl?buy_id=7505&buy_id=2&buy_id=12195&search_book=&search=Search

任何想法如何解決這一問題? 安德魯

回答

1

我認爲我們這裏的問題是,你正在關閉標籤不正確。這導致第一個<form>「抓住」它下面的所有參數。嘗試用以下解決:

print '</form>'; ## this is correct closing tag for a form 

</form><form\>是不一樣的東西。 <form\>將打開新表單而不是關閉。事實上它不會做任何事情,因爲嵌套表單是不允許的。

您還應該在表格單元格和行的末尾使用</td></tr>標記。

+0

謝謝!這是問題...新手我... – Andrew 2011-05-02 18:36:26

+3

請在腳本的乞討中添加'use strict;'。它會讓你的生活更輕鬆。你需要用'my'聲明新的變量。但它也會減少以變量名稱輸入錯誤的機會。 – 2011-05-02 18:38:09

+0

我會這樣做,謝謝你的建議。 – Andrew 2011-05-02 18:44:28