0

これについて私を助けてください。2 つの DB があり、1 つはユーザーとシステムのアクティビティを追跡し、もう 1 つはユーザーのアクティビティのみを追跡します。以下のコードの目的は、まず、2 番目の DB からすべてのテーブルを取得することです。これらのテーブルには、次の列があります。

(ID |日付 |借方 |貸方 |番号 |説明 |口座タイプ |会社 ID)

アイデアは、すべてのテーブルとそれらの |debit|credit| のみを取得することです。列。これらのフィールド (|debit|credit|) にはすでにいくつかの値が含まれています。取得後、DB から取得した一部またはすべてのテーブルを更新するか、可能であれば新しい挿入を行う必要があります。

以下は私が書いたコードです。正常に取得されますが、挿入または更新を行うことはできません。助けてください

同じページが自分自身を呼び出します。

//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++;         

}

}
4

1 に答える 1

0
  1. あなたのデータベース設計は悪いです私はすべてのデータを 1 つのスキーマに保持し、dubbel フィールドの主キーを使用して会社ごとに別の auto_increment を保持する必要がありました

    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が私が思うものである場合は、使用する必要がありますPRIMARY KEY (company_id,id)

  2. phpの問題

    2つのポストデータを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]`");
    
于 2012-07-07T13:47:45.067 に答える