php:插入和更新表

php:插入和更新表,php,mysql,Php,Mysql,我希望将表单中的数据插入两个表(采购和库存),如果有相同的项目,我希望它插入采购表(记录采购)并更新到库存表(而不是采购表,这样它可以添加采购项目的数量,并且库存表上没有重复的项目)。问题是我不理解这种操作的代码逻辑 表单页代码段: <form name="purchaseform" method="post" onsubmit="return validateForm()" action="submitpurchaseadmin.php"> <table> <tr

我希望将表单中的数据插入两个表(采购和库存),如果有相同的项目,我希望它插入采购表(记录采购)并更新到库存表(而不是采购表,这样它可以添加采购项目的数量,并且库存表上没有重复的项目)。问题是我不理解这种操作的代码逻辑

表单页代码段:

<form name="purchaseform" method="post" onsubmit="return validateForm()" action="submitpurchaseadmin.php">
<table>
<tr>
        <td>Type</td>
        <td>
        <select name="type">
        <option value="opt1">Option1</option>
        <option value="opt2">Option2</option>
        </select>
        </td>
</tr>
    <tr>
        <td>Quantity</td>
        <td><input type="text" name="qty"></td>
    </tr>
    <tr>
        <td>Date</td>
        <td><input type="text" name="date" value="<?php echo date("d-m-Y"); ?>"></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><input type="submit" name="submit" value="Save"></td>
    </tr>
</table>
</form>
<?php
include("connect.php");

$host="localhost";
$user="root";
$pass="";
$db_name="proyek";
$tbl_name="purchase";

mysql_connect("$host", "$user", "$pass")or die("Cannot connect to SQL."); 
mysql_select_db('$db_name');

$type=$_POST['type'];
$qty=$_POST['qty'];
$date=$_POST['date'];

$query=("SELECT * FROM stock");
$result=mysql_query($query);
$row=mysql_num_rows($result);
if ($row==0)
{
    mysql_query("INSERT into stock (item, qty) VALUES ('$type', '$qty')");
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
}
else
{
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
    mysql_query("UPDATE stock SET qty=qty+'$qty' WHERE item='$type'");
}
header("location:purchasehistory.php");
?>

插入相同项目时,库存中仍有重复项

您当前的查询将选择所有行,而不管项目是否相等。您需要修改您的查询,以便它检查项目等于
$type
的行:

更改此项:

$query=mysql_query("SELECT * FROM stock");
致:


您更正的代码块:-

<?php

include("connect.php");

$host = "localhost";
$user = "root";
$pass = "";
$db_name = "proyek";
$tbl_name = "purchase";

mysql_connect($host, $user, $pass) or die("Cannot connect to SQL.");
mysql_select_db($db_name);

$type = (isset($_POST['type'])) ? $_POST['type'] : '';
$qty = (isset($_POST['qty'])) ? $_POST['qty'] : '';
$date = (isset($_POST['date'])) ? $_POST['date'] : '';

$query = "SELECT * FROM stock";
$result = mysql_query($query);
$row = mysql_num_rows($result);
if ($row == 0) {
    mysql_query("INSERT into stock (item, qty) VALUES ('$type', '$qty')");
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
} else {
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
    mysql_query("UPDATE stock SET qty=qty+'$qty' WHERE item='$type'");
}
header("location:purchasehistory.php");
更正1:-

mysql_select_db('$db_name'); // here db_name treating as a string
应为:-

mysql_select_db($db_name);
更正2:-

 $query=("SELECT * FROM stock");
 $result=mysql_query($query); 
应为:-

$query= "SELECT * FROM stock";
$result=mysql_query($query); // or you can directly write query here
完整的代码块:-

<?php

include("connect.php");

$host = "localhost";
$user = "root";
$pass = "";
$db_name = "proyek";
$tbl_name = "purchase";

mysql_connect($host, $user, $pass) or die("Cannot connect to SQL.");
mysql_select_db($db_name);

$type = (isset($_POST['type'])) ? $_POST['type'] : '';
$qty = (isset($_POST['qty'])) ? $_POST['qty'] : '';
$date = (isset($_POST['date'])) ? $_POST['date'] : '';

$query = "SELECT * FROM stock";
$result = mysql_query($query);
$row = mysql_num_rows($result);
if ($row == 0) {
    mysql_query("INSERT into stock (item, qty) VALUES ('$type', '$qty')");
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
} else {
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
    mysql_query("UPDATE stock SET qty=qty+'$qty' WHERE item='$type'");
}
header("location:purchasehistory.php");

请添加最低安全性并使用函数
mysql\u real\u escape\u string
首先插入数据购买并从中获取mysql\u insert\u id()。使用该id在库存表中创建条目。下一次检查采购项目是否已经有库存,然后只更新数量字段。我有点迷路了,你能给我一个代码示例吗?我明白了,所以如果表上有相同的项目,它会更新,而不是插入另一行?我已将查询更改为按类型选择,如果($row[1]=$type)库存表中仍然存在重复使用
=
符号,即
如果($row[1]==$type)
在一个表中使用==时仍然存在重复。有什么建议吗?是的,我已经检查了库存表中有2个条目,而采购表中只有1个条目。这并不能解决我的问题,不是吗?@rendystiadi:第一个变化是,因为你错误地使用了单引号。
<?php

include("connect.php");

$host = "localhost";
$user = "root";
$pass = "";
$db_name = "proyek";
$tbl_name = "purchase";

mysql_connect($host, $user, $pass) or die("Cannot connect to SQL.");
mysql_select_db($db_name);

$type = (isset($_POST['type'])) ? $_POST['type'] : '';
$qty = (isset($_POST['qty'])) ? $_POST['qty'] : '';
$date = (isset($_POST['date'])) ? $_POST['date'] : '';

$query = "SELECT * FROM stock";
$result = mysql_query($query);
$row = mysql_num_rows($result);
if ($row == 0) {
    mysql_query("INSERT into stock (item, qty) VALUES ('$type', '$qty')");
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
} else {
    mysql_query("INSERT into purchase (type, qty, date) VALUES ('$type', '$qty', '$date')");
    mysql_query("UPDATE stock SET qty=qty+'$qty' WHERE item='$type'");
}
header("location:purchasehistory.php");