0

请在这方面帮助我。我有两个数据库,一个跟踪用户和系统活动,另一个只跟踪用户活动。下面代码的目的是首先从第二个数据库中检索所有表。这些表具有以下列:

(id |date |debit |credit |number |description |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++;         

}

}
4

1 回答 1

0
  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 个 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]`");
    
于 2012-07-07T13:47:45.067 回答