Php 脚本发布值中的第一个数字
我正在尝试将数据发布到我的数据库。当我发布数据时,我可以看到值的第一个数字被发布到数据库: 例如: 我想发布值Php 脚本发布值中的第一个数字,php,database,forms,Php,Database,Forms,我正在尝试将数据发布到我的数据库。当我发布数据时,我可以看到值的第一个数字被发布到数据库: 例如: 我想发布值15。脚本发布1 我想发布值550。脚本发布5 我想发布值30。脚本发布3 有人知道原因吗 这是我的剧本: <input type="text" id="quantity" name="quantity" value="15" /> <input type="text" id="name" name="name" value="550" /> <input
15
。脚本发布1
我想发布值550
。脚本发布5
我想发布值30
。脚本发布3
有人知道原因吗
这是我的剧本:
<input type="text" id="quantity" name="quantity" value="15" />
<input type="text" id="name" name="name" value="550" />
<input type="text" id="price" name="price" value="30" />
<?php
for($count=0; $count<$_POST["total_item"]; $count++)
{
$db3 = new PDO('mysql:host=localhost;dbname=db', 'root', 'pass');
$query3= "INSERT INTO scu_test(id, quantity, name, price) VALUES (:id, :quantity, :name, :price)";
$stmt3 = $db3->prepare($query3);
$exec3 = $stmt3->execute(array(
':id' => $_SESSION['id'],
':quantity' => $_POST["quantity"][$count],
':name' => $_POST["name"][$count],
':price' => $_POST["price"][$count]
));
if($exec3)
{
header('Location: ../succ.php');
}
}
?>
更新1:
根据Justinas的回答,我构建了以下脚本:
动态行:
<input type="text" id="quantity1" name="quantity" value="15" />
<input type="text" id="name1" name="name" value="550" />
<input type="text" id="price1" name="price" value="30" />
<input type="text" id="quantity2" name="quantity" value="15" />
<input type="text" id="name2" name="name" value="550" />
<input type="text" id="price2" name="price" value="30" />
职位:
当我将数据发布到数据库时,数据库中有18行。发布的数据看起来像随机数据,与数量、名称或价格值无关
有人知道脚本有什么问题吗?这是因为您发布的数据不是多维数组,而是单个数组:
['quantity' => '', 'name' => '', 'price' => '']
如何修复它: 将
[#]
添加到HTML:
<div class="item">
<input type="text" class="quantity" name="[0]quantity" value="15" />
<input type="text" class="name" name="[0]name" value="550" />
<input type="text" class="price" name="[0]price" value="30" />
</div>
....
<div class="item">
<input type="text" class="quantity" name="[10]quantity" value="15" />
<input type="text" class="name" name="[10]name" value="550" />
<input type="text" class="price" name="[10]price" value="30" />
</div>
试试这个
<input type="text" id="quantity1" name="quantity[]" value="15" />
<input type="text" id="name1" name="name[]" value="550" />
<input type="text" id="price1" name="price[]" value="30" />
<input type="text" id="quantity2" name="quantity[]" value="15" />
<input type="text" id="name2" name="name[]" value="550" />
<input type="text" id="price2" name="price[]" value="30" />
当使用多种可能性时,应在名称中使用数组
<input type="text" id="quantity1" name="quantity[]" value="15" />
<input type="text" id="name1" name="name[]" value="550" />
<input type="text" id="price1" name="price[]" value="30" />
<input type="text" id="quantity2" name="quantity[]" value="15" />
<input type="text" id="name2" name="name[]" value="550" />
<input type="text" id="price2" name="price[]" value="30" />
如果问题仍然存在,则应按原样插入值检查数据库中列
数量
、名称
和价格的长度。如果要存储整数值,并且如果要存储字母数字值,则需要为列quantity
、name
和price
设置int(11)
,而不是varchar(250)
来回答第一个问题,之所以只获取每个字段值的第一个字符,是因为您试图访问这些值,就像它们是数组一样,但它们是字符串——当您从字符串中请求[0]
时,您将在第一个“偏移量”(即第一个字符)处收到该字符
此外,因为在foreach()
循环中有header()
行,所以在执行重定向之前,您永远不会处理多个数据集。重定向必须跳出循环,以防止导致提前退出
对于预处理语句,预处理语句的美妙之处在于只编写一次查询,,只更新绑定变量以供后续执行。同样,您应该只创建一个数据库连接,并在脚本中继续使用它
现在,根据个人喜好,您可以选择使用整批数据编写一个INSERT查询,也可以执行多个单行INSERT查询
至于您的问题更新,您已经为您的
标记创建了唯一的id
值,但重复了name
值。这意味着提交表单时,您将不会拥有$\u POST
数组中的所有值,而是拥有“上次迭代”的数据集。POST
超全局数组是使用name
值作为键生成的,不允许在数组的同一级别上使用重复键。所以你会有这样的东西:
$_POST = ["quantity" => "15", "name" => "550", "price" => "30"];
我能给你的最好建议就是修改你的html表单。如果您不关心与每组字段关联的编号,请使用以下语法:
<input type="text" name="quantity[]" value="15" />
<input type="text" name="name[]" value="550" />
<input type="text" name="price[]" value="30" />
如果您想完全控制为POST
生成的数字键,请在方括号中输入您想要的数字
<input type="text" name="quantity[1]" value="15" />
<input type="text" name="name[1]" value="550" />
<input type="text" name="price[1]" value="30" />
<input type="text" name="quantity[4]" value="6" />
<input type="text" name="name[4]" value="577" />
<input type="text" name="price[4]" value="39" />
关于查询,这里是一个经过充分测试的演示片段:
session_start();
$_SESSION['id'] = 44;
$_POST = [
1 => ['quantity' => '15', 'name' => '550', 'price' => '30'],
4 => ['quantity' => '16', 'name' => '551', 'price' => '30']
];
try {
$db = new PDO("mysql:host=localhost;dbname=db;charset=utf8", "root", "");
$stmt = $db->prepare("INSERT INTO scu_test (id, quantity, name, price) VALUES (:id, :quantity, :name, :price)");
foreach ($_POST as $key => $set) {
$exec = $stmt->execute([
':id' => "{$_SESSION['id']}_$key",
':quantity' => $set["quantity"],
':name' => $set["name"],
':price' => $set["price"]
]);
}
header('Location: ../succ.php'); // if error-free, then all successful; redirect
} catch(PDOException $e){
echo "Error message: " , $e->getMessage(); // do not show error messages to users when you go live
}
插入的数据:
id | quantity | name | price
------|------------|--------|---------
44_1 | 15 | 550 | 30
44_4 | 16 | 551 | 30
为什么要在一个循环中建立与数据库的连接???$\u POST[“quantity”]
是一个字符串,当您像数组一样访问它时,$\u POST[“quantity”][0]
会将索引的字符拉入字符串中。为什么一开始这甚至是一个循环?就我个人而言,这整段代码毫无意义,我看不出它是如何执行的,而不会抛出一堆错误。旁注:占位符名称不匹配:':id'vs':user_id'和2个以上。您正在使用PDO
和mysqli
?我已经为多个文本字段使用了不同的id。像id='quantity1'
,id='quantity2'
,id='quantity3'
等等。如何根据您的代码使用它?我在运行脚本时会出现以下错误:注意:未定义变量:第93行的/home/…/save.php中的项
和警告:为foreach()提供的参数无效在第93行的/home/…/save.php中
@John Here$items
应该是提交的项目,因此在您的情况下,当我运行脚本并输入just POSTquantity1
,name1
和price1
时,我在数据库中得到18行。我现在使用foreach($\u POST as$I=>$item)
和$item[“数量”]
,$item[“名称”]
和$item[“价格”]
<input type="text" name="quantity[]" value="15" />
<input type="text" name="name[]" value="550" />
<input type="text" name="price[]" value="30" />
$_POST = [
0 => ["quantity" => "15", "name" => "550", "price" => "30"]
];
<input type="text" name="quantity[1]" value="15" />
<input type="text" name="name[1]" value="550" />
<input type="text" name="price[1]" value="30" />
<input type="text" name="quantity[4]" value="6" />
<input type="text" name="name[4]" value="577" />
<input type="text" name="price[4]" value="39" />
$_POST = [
1 => ["quantity" => "15", "name" => "550", "price" => "30"],
4 => ["quantity" => "6", "name" => "577", "price" => "39"]
];
session_start();
$_SESSION['id'] = 44;
$_POST = [
1 => ['quantity' => '15', 'name' => '550', 'price' => '30'],
4 => ['quantity' => '16', 'name' => '551', 'price' => '30']
];
try {
$db = new PDO("mysql:host=localhost;dbname=db;charset=utf8", "root", "");
$stmt = $db->prepare("INSERT INTO scu_test (id, quantity, name, price) VALUES (:id, :quantity, :name, :price)");
foreach ($_POST as $key => $set) {
$exec = $stmt->execute([
':id' => "{$_SESSION['id']}_$key",
':quantity' => $set["quantity"],
':name' => $set["name"],
':price' => $set["price"]
]);
}
header('Location: ../succ.php'); // if error-free, then all successful; redirect
} catch(PDOException $e){
echo "Error message: " , $e->getMessage(); // do not show error messages to users when you go live
}
id | quantity | name | price
------|------------|--------|---------
44_1 | 15 | 550 | 30
44_4 | 16 | 551 | 30