Php MySQLi-插入多行-空POST数组

Php MySQLi-插入多行-空POST数组,php,database,forms,mysqli,Php,Database,Forms,Mysqli,更新 多亏了马丁,我才解决了这个问题。更改php代码以反映解决方案 问题:在表单中输入数据并提交之前插入执行的语句 解决方案:使用!empty()仅在点击“提交”按钮后执行插入 我被要求创建一个数据库,通过web UI插入数据,跟踪巧克力生产中使用的烘焙、包装和配料 在制作一个批次的过程中,使用了三种类型的配料。我想同时添加这三个。三个人只有一张桌子 我的表单是这样的,有20多个输入字段包装在一个表中: <form action="index.php" method="post">

更新

多亏了马丁,我才解决了这个问题。更改php代码以反映解决方案

问题:在表单中输入数据并提交之前插入执行的语句

解决方案:使用!empty()仅在点击“提交”按钮后执行插入


我被要求创建一个数据库,通过web UI插入数据,跟踪巧克力生产中使用的烘焙、包装和配料

在制作一个批次的过程中,使用了三种类型的配料。我想同时添加这三个。三个人只有一张桌子

我的表单是这样的,有20多个输入字段包装在一个表中:

<form action="index.php" method="post">
<input type="text" id="bCode" name="bCode" value="1234" />
</form>

在添加multiple rows语句之前,我有两条用于打包/产品的SQL语句,它们工作得很好

错误消息是:

错误:(1048)列“batchCo”不能为空

Edit:我还收到了所有变量的未定义索引通知,但我想这是因为表单中还没有数据

我遵循了一个例子

如果之前有人回答过,我很抱歉。我可能不明白这些答案,我是一个糟糕的程序员

编辑:整个php代码

session_start();

// product vars
$bCode = $_POST["bCode"];
$proName = $_POST["proName"];
$proGrindDate = $_POST["proGrindDate"];
$proBeanBatch = $_POST["proBeanBatch"];
$proSugarBatch = $_POST["proSugarBatch"];
$proButterBatch = $_POST["proButterBatch"];
$proQTY = $_POST["proQTY"];  
$proLabel = true;
$proFinish = true;        

// ingredient vars
$beanBatch = $_POST["beanBatch"];
$beanWeight = $_POST["beanWeight"];
$beanRoastDate = $_POST["beanRoastDate"];
$beanWinnowYield = $_POST["beanWinnowYield"];
$beanWinnowDate = $_POST["beanWinnowDate"];
$beanCarryOver = $_POST["beanCarryOver"];
$sugarBatch = $_POST["sugarBatch"];
$sugarWeight = $_POST["sugarWeight"];
$butterBatch = $_POST["butterBatch"];
$butterWeight = $_POST["butterWeight"];

// package vars
$packBagDate = $_POST["packBagDate"];
$packMouldDate = $_POST["packMouldDate"];
$packWrapDate = $_POST["packWrapDate"];
$packType = $_POST["packType"];
$packQTY = $_POST["packQTY"];

$mandatory = ["bCode", "proName", "proGrindDate", "proQTY", "beanBatch", "beanWeight", "sugarBatch", "sugarWeight", "butterBatch", "butterWeight", "packType", "packQTY"];  

echo($bCode);

// connection vars
$servername = "...";
$username = "...";
$password = "...";
$database ="traceability";       

// Create connection
$conn = new mysqli($servername, $username, $password, $database);

if(!empty($_POST["submit"])){ 

// Insert into database - single rows
// table product
$queryProduct = "INSERT INTO product (batchCo, name, dateGrind, quantity, ingBeansBatch, ingSugarBatch, ingButterBatch, label, finished) VALUES(?,?,?,?,?,?,?,?,?)";
$stmtProduct = $conn->prepare($queryProduct);

//bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
$stmtProduct->bind_param('issdsssbb', $bCode, $proName, $proGrindDate, $proQTY, $proBeanBatch, $proSugarBatch, $proButterBatch, $proLabel, $proFinish);

if($stmtProduct->execute())
    {
        echo "Everything is working"; 
    }
else
    {
        die('Error : ('. $conn->errno .') '. $conn->error);
    }
$stmtProduct->close();

// table packaging
$queryPackaging = "INSERT INTO packaging (dateBag, dateMould, dateWrap, Qty, batchCo, type) VALUES(?,?,?,?,?,?)";
$stmtPackaging = $conn->prepare($queryPackaging);
$stmtPackaging->bind_param('sssiis', $packBagDate, $packMouldDate, $packWrapDate, $packQTY, $bCode, $packType);

if($stmtPackaging->execute())
    {
        echo "Everything is working"; 
    }
else
    {
        die('Error : ('. $conn->errno .') '. $conn->error);
    }

$stmtPackaging->close();

// Insert into database - multiple rows
// table ingredients

    if (!empty($bCode) && is_numeric($bCode)){
$insert = $conn->query("INSERT INTO ingredients (batchNo, type, weight, roastDate, winnowDate, winnowYield, winnowCarryOver, batchCo) VALUES
    ('$beanBatch', 'Beans', '$beanWeight', '$beanRoastDate', '$beanWinnowDate', '$beanWinnowYield', '$beanCarryOver', '$bCode'),
    ('$sugarBatch', 'Sugar', '$sugarWeight', NULL, NULL, NULL, NULL, '$bCode'),
    ('$butterBatch', 'Butter', '$butterWeight', NULL, NULL, NULL, NULL, '$bCode')");
}

if($insert){
    //return total inserted records using mysqli_affected_rows
    print 'Success! Total ' .$conn->affected_rows .' rows added.<br />'; 
}else{
    die('Error : ('. $conn->errno .') '. $conn->error);
}
}
session_start();
//产品变量
$bCode=$_POST[“bCode”];
$proName=$_POST[“proName”];
$proGrindDate=$\u POST[“proGrindDate”];
$proBeanBatch=$\u POST[“proBeanBatch”];
$proSugarBatch=$_POST[“proSugarBatch”];
$proButterBatch=$\u POST[“proButterBatch”];
$proQTY=$_POST[“proQTY”];
$proLabel=true;
$proFinish=true;
//成分变量
$beanBatch=$_POST[“beanBatch”];
$beanWeight=$_POST[“beanWeight”];
$beanRoastDate=$_POST[“beanRoastDate”];
$beanWinnowYield=$_POST[“beanWinnowYield”];
$beanWinnowDate=$\u POST[“beanWinnowDate”];
$beanCarryOver=$_POST[“beanCarryOver”];
$sugarBatch=$_POST[“sugarBatch”];
$sugarWeight=$_POST[“sugarWeight”];
$butterBatch=$_POST[“butterBatch”];
$butterWeight=$_POST[“butterWeight”];
//包装变量
$packBagDate=$\u POST[“packBagDate”];
$packMouldDate=$_POST[“packMouldDate”];
$PACKWRAPATE=$\u POST[“PACKWRAPATE”];
$packType=$\u POST[“packType”];
$packQTY=$_POST[“packQTY”];
$mandatory=[“bCode”、“proName”、“progrindate”、“proQTY”、“beanBatch”、“beanWeight”、“sugarBatch”、“sugarWeight”、“butterBatch”、“butterWeight”、“packType”、“packQTY”];
echo($bCode);
//连接变量
$servername=“…”;
$username=“…”;
$password=“…”;
$database=“可追溯性”;
//创建连接
$conn=newmysqli($servername、$username、$password、$database);
如果(!empty($_POST[“submit”]){
//插入数据库-单行
//表产品
$queryProduct=“在产品中插入(batchCo、名称、日期、数量、ingBeansBatch、ingSugarBatch、IngbuttBatch、标签、成品)值(?,,,,,,,,,,,?)”;
$stmtProduct=$conn->prepare($queryProduct);
//标记的绑定参数,其中(s=string,i=integer,d=double,b=blob)
$stmtProduct->bind_param($issdssbb',$bCode,$proName,$progrindate,$proQTY,$proBeanBatch,$proSugarBatch,$proButterBatch,$proLabel,$proFinish);
如果($stmtProduct->execute())
{
呼应“一切正常”;
}
其他的
{
die('Error:('.$conn->errno')'.$conn->Error);
}
$stmtProduct->close();
//桌面包装
$queryPackaging=“插入包装(日期袋、日期模具、日期包装、数量、批次、类型)值(?,,,,,,,,?)”;
$stmtPackaging=$conn->prepare($queryPackaging);
$stmtPackaging->bind_参数('sssiis',$packBagDate,$packmouldate,$packWrapDate,$packQTY,$bCode,$packType);
如果($stmtPackaging->execute())
{
呼应“一切正常”;
}
其他的
{
die('Error:('.$conn->errno')'.$conn->Error);
}
$stmtPackaging->close();
//插入数据库-多行
//食材
如果(!empty($bCode)&&is_numeric($bCode)){
$insert=$conn->query(“插入配料(批次号、类型、重量、烘焙日期、winnowDate、winnowYield、winnowCarryOver、batchCo)值
(“$beanBatch”、“Beans”、“beanWeight”、“beanRoastDate”、“BeanInnowDate”、“BeanInnowField”、“beanCarryOver”、“bCode”),
(“$sugarBatch”,“Sugar”,“$sugarWeight”,NULL,NULL,NULL,NULL,“$bCode”),
(“$butterBatch”、“Butter”、“butterWeight”、“NULL、NULL、NULL、NULL、$bCode”);
}
如果($插入){
//使用mysqli\u受影响的行返回插入的记录总数
打印“成功!总计”。$conn->受影响的行。已添加行。
; }否则{ die('Error:('.$conn->errno')'.$conn->Error); } }
在MySQL语句中,您需要将PHP变量封装在引号中,以便将它们定义为SQL调用的输入值

见:

这是SQL查询的更好格式

bCode
字段值在哪里?我在你的代码中看不到它?但是这个
$bCode
变量需要给定一个值

您还可以在检查中包装整个SQL查询,以确保只有在存在有效的
$bCode
值时才进行初始化:

更新:

更新 问题来自名为“bCode”的输入字段的值。 请在PHP页面顶部输入:

print "<pre>";
print_r($_POST);
print "</pre>";
print”“;
打印(邮政美元);
打印“”;
并查看
$\u POST['bCode']
的值是否有效。让我知道这个值是多少

还请注意,
value=“1234”/>
最后一个引号和斜杠之间应该有空格,因此:
value=“1234”/>
是正确的

我重申,你需要按照我答案的上半部分,把所有变量都用引号括起来。您还没有在问题中引用的代码上这样做


请告诉我您得到了什么错误输出或发生了什么更改:)

值似乎是
NULL
:错误消息非常清楚,您试图打印出来,但没有看到。如何处理
if ( !empty($bCode) && is_numeric($bCode)){
//run insert SQL here.
}
print "<pre>";
print_r($_POST);
print "</pre>";