【发布时间】:2017-10-12 20:17:25
【问题描述】:
这是一个不同的问题,不是重复的,请不要标记为重复!
你好 :) 我正在传递从表单获得的用户输入。此表单有 1 到 7 的选项。如果用户选择 1,他们会得到一种产品,他们输入名称、价格和数量。如果他们选择两个,他们会输入两种产品的信息……依此类推……七你输入七种产品的信息
在通过数据库之前一切正常。但是,只有在所有 7 个都通过时才有效。如果您只输入一个产品信息集,它就不起作用..即使这些字段可以为“空”。
我需要一些关于 $product_1_name、$product_1_price 和 $product_1_quantity 的指导。我需要让它们传递到数据库。当没有值传递给函数时,代码会崩溃。
我可以帮忙吗?
SQL 设置代码:
CREATE TABLE productevents (
o_id int(11) not null AUTO_INCREMENT PRIMARY KEY,
productid int(11),
product_1_name varchar(256),
product_1_price int(11),
product_1_quantity int(11),
product_2_name varchar(256),
product_2_price int(11),
product_2_quantity int(11),
product_3_name varchar(256),
product_3_price int(11),
product_3_quantity int(11),
product_4_name varchar(256),
product_4_price int(11),
product_4_quantity int(11),
product_5_name varchar(256),
product_5_price int(11),
product_5_quantity int(11),
product_6_name varchar(256),
product_6_price int(11),
product_6_quantity int(11),
product_7_name varchar(256),
product_7_price int(11),
product_7_quantity int(11)
);
代码:
if (isset($_POST['submit'])) {
include_once 'dbh.inc.php';
$a = 5;
$productid = $a;
$product_1_name = mysqli_real_escape_string($conn, $_POST['product_1_name']); //uid
$product_1_price = mysqli_real_escape_string($conn, $_POST['product_1_price']); //uid
$product_1_quantity = mysqli_real_escape_string($conn, $_POST['product_1_quantity']); //uid
$product_2_name = mysqli_real_escape_string($conn, $_POST['product_2_name']); //uid
$product_2_price = mysqli_real_escape_string($conn, $_POST['product_2_price']); //uid
$product_2_quantity = mysqli_real_escape_string($conn, $_POST['product_2_quantity']); //ui3
$product_3_name = mysqli_real_escape_string($conn, $_POST['product_3_name']); //uid
$product_3_price = mysqli_real_escape_string($conn, $_POST['product_3_price']); //uid
$product_3_quantity = mysqli_real_escape_string($conn, $_POST['product_3_quantity']); //uid
$product_4_name = mysqli_real_escape_string($conn, $_POST['product_4_name']); //uid
$product_4_price = mysqli_real_escape_string($conn, $_POST['product_4_price']); //uid
$product_4_quantity = mysqli_real_escape_string($conn, $_POST['product_4_quantity']); //uid
$product_5_name = mysqli_real_escape_string($conn, $_POST['product_5_name']); //uid
$product_5_price = mysqli_real_escape_string($conn, $_POST['product_5_price']); //uid
$product_5_quantity = mysqli_real_escape_string($conn, $_POST['product_5_quantity']); //uid
$product_6_name = mysqli_real_escape_string($conn, $_POST['product_6_name']); //uid
$product_6_price = mysqli_real_escape_string($conn, $_POST['product_6_price']); //uid
$product_6_quantity = mysqli_real_escape_string($conn, $_POST['product_6_quantity']); //uid
$product_7_name = mysqli_real_escape_string($conn, $_POST['product_7_name']); //uid
$product_7_price = mysqli_real_escape_string($conn, $_POST['product_7_price']); //uid
$product_7_quantity = mysqli_real_escape_string($conn, $_POST['product_7_quantity']); //uid
$sql = "INSERT INTO productevents (productid, product_1_name, product_1_price, product_1_quantity,
product_2_name, product_2_price, product_2_quantity,
product_3_name, product_3_price, product_3_quantity,
product_4_name, product_4_price, product_4_quantity,
product_5_name, product_5_price, product_5_quantity,
product_6_name, product_6_price, product_6_quantity,
product_7_name, product_7_price, product_7_quantity)
VALUES (
'$productid,'$product_1_name', '$product_1_price', '$product_1_quantity',
'$product_2_name', '$product_2_price', '$product_2_quantity',
'$product_3_name', '$product_3_price', '$product_3_quantity',
'$product_4_name', '$product_4_price', '$product_4_quantity',
'$product_5_name', '$product_5_price', '$product_5_quantity',
'$product_6_name', '$product_6_price', '$product_6_quantity',
'$product_7_name', '$product_7_price', '$product_7_quantity'
);";
mysqli_query($conn, $sql);
echo $sql;
exit();
来自 ECHO $SQL 的错误:
Notice: Undefined index: product_3_name in test.php on line 29
Notice: Undefined index: product_3_price in test.php on line 30
Notice: Undefined index: product_3_quantity in test.php on line 31
Notice: Undefined index: product_4_name in test.php on line 33
Notice: Undefined index: product_4_price in test.php on line 34
Notice: Undefined index: product_4_quantity in test.php on line 35
Notice: Undefined index: product_5_name in test.php on line 37
Notice: Undefined index: product_5_price in test.php on line 38
Notice: Undefined index: product_5_quantity in test.php on line 39
Notice: Undefined index: product_6_name in test.php on line 41
Notice: Undefined index: product_6_price in test.php on line 42
Notice: Undefined index: product_6_quantity in test.php on line 43
Notice: Undefined index: product_7_name in test.php on line 45
Notice: Undefined index: product_7_price in test.php on line 46
Notice: Undefined index: product_7_quantity in test.php on line 47
INSERT INTO productevents (productid, product_1_name, product_1_price, product_1_quantity, product_2_name, product_2_price, product_2_quantity, product_3_name, product_3_price, product_3_quantity, product_4_name, product_4_price, product_4_quantity, product_5_name, product_5_price, product_5_quantity, product_6_name, product_6_price, product_6_quantity, product_7_name, product_7_price, product_7_quantity) VALUES ( '5','product1', '1', '1', 'product2', '2', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' );
【问题讨论】:
-
product_3_name等在您的 $_POST 中不存在。确保名称在您的表单中正确并且存在于您的帖子中。此外,您对 SQL 注入和引用问题持开放态度。由于您使用的是 mysqli,因此请利用 prepared statements 和 bind_param。 这将解决可能出现的任何令人讨厌的引用问题。 -
从外观上看,您可能需要重新考虑您的数据库设计。 SQL注入也指日可待
-
@Akintunde hello :) 重新设计数据库是什么意思?以什么方式?
-
强烈建议不要为每个产品创建一个列。如果您添加新产品,您将不得不更新您的应用程序和数据库。您已经有一个 productid 列来唯一标识您的产品,因此无需为每个列添加多个列。只需一个名称、价格和数量列。
标签: php mysql sql phpmyadmin