PHP,发布未知的文本字段值,发布到PHP文件,并插入数据库作为行存在(PHP, Post unknown text field value, post to PHP file, and insert

编程入门 行业动态 更新时间:2024-10-23 09:37:08
PHP,发布未知的文本字段值,发布到PHP文件,并插入数据库作为行存在(PHP, Post unknown text field value, post to PHP file, and insert db as rows exist)

我想插入购买细节等内容。 我创建了两个表,purchase&purchase_items。 因此,每个购买记录可以有多个项目。 我可以在购买表中插入一条记录,但我需要的是使用添加到列表中的项目将行插入购买。 代码如下

$stmt = $conn->prepare("INSERT INTO `purchase` (`purchaseRef`, `vendorName`, `date`) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $reference, $vendorName, $date); $reference = $_POST["txtRef"]; $vendorName = $_POST["vendorName"]; $date = date("Y-m-d"); if($stmt->execute()) { $lastID = $stmt->insert_id; // i want to add unlimited items, i wrote as follows foreach ($_POST as $key => $value) { $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $ctgryID, $prdID, $qnty, $price); $param_name = "ctgryID"; if(substr($key, 0, strlen($param_name)) == $param_name) { ctgryID=$value; } $param_name2 = "prdID"; if(substr($key, 0, strlen($param_name2)) == $param_name2) { $prdID=$value; } $param_name3 = "qnty"; if(substr($key, 0, strlen($param_name3)) == $param_name3) { $qnty=$value; } $param_name4 = "price"; if(substr($key, 0, strlen($param_name4)) == $param_name4) { $price=$value; } if(!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); } } }

请帮忙

I would like to insert something like purchase details. I have created two tables, purchases & purchase_items. So each purchase record can have more than 1 item. I can insert one record into purchase table, but what i need is to insert rows into purchase with items added to the list. Code is below

$stmt = $conn->prepare("INSERT INTO `purchase` (`purchaseRef`, `vendorName`, `date`) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $reference, $vendorName, $date); $reference = $_POST["txtRef"]; $vendorName = $_POST["vendorName"]; $date = date("Y-m-d"); if($stmt->execute()) { $lastID = $stmt->insert_id; // i want to add unlimited items, i wrote as follows foreach ($_POST as $key => $value) { $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $ctgryID, $prdID, $qnty, $price); $param_name = "ctgryID"; if(substr($key, 0, strlen($param_name)) == $param_name) { ctgryID=$value; } $param_name2 = "prdID"; if(substr($key, 0, strlen($param_name2)) == $param_name2) { $prdID=$value; } $param_name3 = "qnty"; if(substr($key, 0, strlen($param_name3)) == $param_name3) { $qnty=$value; } $param_name4 = "price"; if(substr($key, 0, strlen($param_name4)) == $param_name4) { $price=$value; } if(!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); } } }

Please help

最满意答案

这里你的问题是当你不需要的时候迭代$_POST 。

你的$_POST已经拥有你需要插入的所有值,你可以在不使用foreach情况下访问它们,只需使用[] :

$lastID = $stmt->insert_id; $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $_POST['ctgryID'], $_POST['prdID'], $_POST['qnty'], $_POST['price'] ); if (!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); }

更新 :更多的产品与他们的价格你inputs应使用[]符号:

First product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> Second product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> Third product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> And more

在服务器端,您使用foreach如下所示:

// print_r your `$_POST` and you'll see subarrays there $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $ctgryID, $prdID, $qnty, $price ); foreach ($_POST['ctgryID'] as $index => $value) { $ctgryID = $value; // here's the magic - use items from other // $_POST subarrays with the same indexes $prdID = $_POST['prdID'][$index]; $qnty = $_POST['qnty'][$index]; $price = $_POST['price'][$index]; if (!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); } }

Your problem here is that you iterate over $_POST when you don't have to.

Your $_POST already have all the values you need to insert and you can access them without foreach, just using []:

$lastID = $stmt->insert_id; $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $_POST['ctgryID'], $_POST['prdID'], $_POST['qnty'], $_POST['price'] ); if (!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); }

Update: for more products with their prices you form inputs should use [] notation:

First product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> Second product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> Third product <input type="text" name="ctgryID[]" value="" /> <input type="text" name="prdID[]" value="" /> <input type="text" name="qnty[]" value="" /> <input type="text" name="price[]" value="" /> And more

On server side you use foreach like this:

// print_r your `$_POST` and you'll see subarrays there $stmt2 = $conn->prepare("INSERT INTO `purchase_items` (`prchseID`, `ctgryNo`, `prdctID`, `quantity`, `price`) VALUES (?, ?, ?, ?, ?)"); $stmt2->bind_param("sssss", $lastID, $ctgryID, $prdID, $qnty, $price ); foreach ($_POST['ctgryID'] as $index => $value) { $ctgryID = $value; // here's the magic - use items from other // $_POST subarrays with the same indexes $prdID = $_POST['prdID'][$index]; $qnty = $_POST['qnty'][$index]; $price = $_POST['price'][$index]; if (!$stmt2->execute()) { echo 'error: '.$stmt2->error; exit(); } }

更多推荐

本文发布于:2023-08-05 06:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1430207.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   文本   数据库   文件   unknown

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!