2012-07-07 70 views
0

請幫助我解決這個問題。我有兩個DB,一個跟蹤用戶和系統活動,另一個跟蹤僅用戶活動。下面代碼的目的是首先從第二個DB中檢索所有表格。這些表有以下欄目:如何使用循環結構將數據更新或插入表中

(ID |日期|借記卡|信用卡|號碼|描述| ACCOUNTTYPE | COMPANY_ID)

的想法是檢索所有表只有自己|借記卡|信用|列。這些字段(| debit | credit |)已經有一些值。檢索完成後,我應該能夠更新或者在可能的情況下對從數據庫檢索到的任何或所有表執行新的插入操作。

以下是我寫的代碼。它檢索好,但不能做插入或更新。請協助我

同一頁面自行調用。

//Connection and Extraction from DB 



//DB Connection exists 


//SQL Query 

$sql = "show tables from $companyname"; 

$results = mysql_query($sql) or die(mysql_error()); 

$count = 1; 

while($row = mysql_fetch_array($results)) 

{ 

$results2 = mysql_query("SELECT * FROM `$row[0]` LIMIT 1") or die('Error'.mysql_error()); 

while($row2 = mysql_fetch_array($results2)) 

{ 

    $debit = $row2['debit']; 

    $credit = $row2['credit']; 

    echo "<tr><td>$count. </td><td width='30%'>".ucwords($row[0])."</td><td width='30%'> 

<input type='text' name='debit' value='$debit' align='right'></td> 

    <td width='30%'><input type='text' name='credit' value='$credit' align='right'></td></tr>"; 

} 

$count++;  

} 

//Insertion into DB 

if(isset($_POST['submit'])) { 

//SQL Query 

$sql3 = "show tables from $companyname"; 

$results3 = mysql_query($sql3) or die(mysql_error()); 

$count = 1; 

while($row3 = mysql_fetch_array($results3)) 

{ 

    $results4 = mysql_query("SELECT * FROM `$row3[0]` LIMIT 1") or die('Error '.mysql_error()); 

     $debit = $_POST['debit']; 

     $credit = $_POST['credit'];  

    while($row4 = mysql_fetch_array($results4)) 

    { 

     $query = mysql_query("UPDATE `$row3[0]` SET `debit`= '$row4[debit]' , `credit`= '$row4[credit]' WHERE `id`=`$row4[id]`"); 

     echo "UPDATE `$row3[0]` SET `debit`= '$row4[debit]' , `credit`= '$row4[credit]' WHERE `id`=`$row4[id]` <br>"; 

     echo $num; 

    } 

$count++;   

} 

} 
+0

爲什麼不是第二個schem中的所有數據一個(/數據庫)只是你的第一個模式中的表? – 2012-07-07 12:20:24

+0

感謝您的快速回復。第一個模式包含一個記錄特定活動的表格。這個表格的PK在第二個模式中的所有表格中都是FK。 – 2012-07-07 13:35:16

+0

所以你使用多個表白色相同的結構只是爲了獲得每個自動增量? – 2012-07-07 13:38:54

回答

0
  1. 數據庫設計是壞 我應該用杜貝爾場主鍵

    CREATE TABLE company_transaktions (
        company_name VARCHAR(50) NOT NULL, 
        id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 
        date DATE NOT NULL, 
        debit FLOAT NOT NULL, 
        credit FLOAT NOT NULL, 
        number MENIUMINT NOT NULL, 
        description TINYTEXT NOT NULL, 
        accounttype TINYTEXT NOT NULL, 
        company_id MEDIUMINT UNSIGNED NOT NULL, 
        PRIMARY KEY (company_name,id) 
    ); 
    

    ,或者如果COMPANY_ID已經keepd一個模式中, 保持一個單獨的AUTO_INCREMENT通過公司的所有數據是我認爲它是,你應該使用PRIMARY KEY (company_id,id)

  2. 的PHP問題

    您存儲2個POSTDATA在2個變量

    $debit = $_POST['debit']; 
    $credit = $_POST['credit'];  
    

    ,但你從來不使用他們,他們總是會在最後一排的價值,因爲它們都具有相同的名稱。

    你必須這樣做的第一件事是重命名您的輸入:

    echo "<tr>\n"; 
    echo "<td>$count. </td>\n"; 
    echo "<td width='30%'>".ucwords($row[0])."</td>\n"; 
    echo "<td width='30%'><input type='text' name='{$row[0]}[debit]' value='$debit' align='right'></td>\n"; 
    echo "<td width='30%'><input type='text' name='{$row[0]}[credit]' value='$credit' align='right'>\n"; 
    echo "</td>\n"; 
    echo "</tr>"; 
    

    那麼你就可以獲取每個迴路是正確的:

    $debit = mysql_real_escape_string($_POST[$row3[0]]['debit']); 
    $credit = mysql_real_escape_string($_POST[$row3[0]]['credit']); 
    

    ,然後在查詢

    使用它們
    $result = mysql_query("UPDATE `$row3[0]` SET `debit`= '$debit' , `credit`= '$credit' WHERE `id`=`$row4[id]`"); 
    
+0

好的。所以你有什麼建議? – 2012-07-07 13:57:36

+0

謝謝。我會嘗試並回復你。 – 2012-07-07 14:58:43

+0

假設檢索到5個表格,當按下「submit」鍵時,更新語句只會看到最後一個表格編輯它,並將所有其他表格都重置爲0,而不管是否輸入了某些表格。 – 2012-07-07 17:27:05

相關問題