如何使用循环结构将数据更新或插入表中

时间:2012-07-07 12:12:57

标签: php mysql

请帮我解决这个问题。我有两个DB,一个跟踪用户和系统活动,另一个跟踪用户活动。以下代码的目的是首先从第二个DB中检索所有表。这些表格包含以下列:

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

}

}

1 个答案:

答案 0 :(得分: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]`");