请帮我解决这个问题。我有两个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++;
}
}
答案 0 :(得分:0)
您的数据库设计很糟糕 我应该将所有数据保存在一个模式中, 通过使用dubbel字段主键
保持公司单独的auto_incrementCREATE 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)
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]`");