[英]i have query that inserting values into MySQL database with array and for loop
我查询将值插入到MySQL数据库中并使用array和loop。但是当我提交表格MySQL数据库时显示两次输入。 第一记录为空,第二记录为值? 为什么MySQL数据库显示First Record Empty Entry.i不知道其背后的原因是什么?
这里我的功能代码
<?php
if(isset($_REQUEST['order']))
{
$count=1;
$count++;
$total=$_POST['total'];
for ($i=1; $i<=$count; $i++){
$queryproduct=mysql_query("INSERT INTO shoppingcart VALUES ('','','','$uid','$email','".$_POST['product'][$i]."','".$_POST['userfile_name'] [$i]."','".$_POST['price'][$i]."','".$_POST['qty'][$i]."','".$_POST['amt'][$i]."','$total')") or die("Order Query Problem");
}
}
?>
尝试从0开始循环,因为$ _POST [“ pid”]变量从0开始编号,如第二(工作)示例所示:
for($i=0; $i<$lenght; $i++){ ...
但是,请避免像Matt Ball在其评论中所述使用mysql_ *函数。
首先,我将忽略此代码的安全性问题,稍后我们将回到该部分。 让我们首先解决我认为正确的问题。
第一记录为空,第二记录为值? 为什么MySQL数据库显示First Record Empty Entry.i不知道其背后的原因是什么?
$count=1;
$count++;
这里发生了什么? 你设置$count
等于1
,然后你立刻一个太递增它2
在第二行。 你为什么要这么做? 为什么不首先将其设置为两个呢?
我敢打赌,您对“第一个记录为空”的问题从这些代码行开始。
$total = $_POST['total'];
这仅在查询中使用一次,因此为什么要浪费内存将其分配给另一个变量。
在您的代码的第一个示例中,我想说这将是您可以从中获得的最佳执行效果(再次,不是在谈论安全性)。
<?php
if(isset($_REQUEST['order']))
{
for ($i = 1, $count = 0; $i <= $count; ++$i)
{
$queryproduct = mysql_query
(
"INSERT INTO shoppingcart VALUES
(
'',
'',
'',
'$uid',
'$email',
'{$_POST['product'][$i]}',
'{$_POST['userfile_name'][$i]}',
'{$_POST['price'][$i]}',
'{$_POST['qty'][$i]}',
'{$_POST['amt'][$i]}',
'{$_POST['total']}'
);"
)
or die("Order Query Problem");
}
}
?>
查看第二组代码,这可能是您可以做的最好的事情。
<?php
if(isset($_REQUEST['order']))
{
for($i = 0, $p = count($_POST['product']); $i < $p; ++$i)
{
$queryproduct = mysql_query
(
"INSERT INTO shoppingcart VALUES
(
'',
'',
'{$_POST['pid'][$i]}',
'$uid',
'$email',
'{$_POST['product'][$i]}',
'{$_POST['userfile_name'][$i]}',
'{$_POST['price'][$i]}',
'{$_POST['qty'][$i]}',
'{$_POST['amt'][$i]}',
'{$_POST['total']}'
);"
)
or die("Order Query Problem");
}
}
?>
最后,这是关于安全性的。 如果我们使用PHP代码库中的一些未弃用的函数,则可以使这些语句安全。
PDO是这些接口中最常见的接口,您可以找到建立与SQL数据库的PDO连接所需的所有文档 。
<?php
if(isset($_REQUEST['order']))
{
$stmt = $dbh->prepare("INSERT INTO shoppingcart VALUES ('', '', ?, ?, ?, ?, ?, ?, ?, ?, ?);");
$stmt->bindParam(1, $pid);
$stmt->bindParam(2, $uid);
$stmt->bindParam(3, $email);
$stmt->bindParam(4, $product);
$stmt->bindParam(5, $name);
$stmt->bindParam(6, $price);
$stmt->bindParam(7, $qty);
$stmt->bindParam(8, $amt);
$stmt->bindParam(9, $total);
for($i = 0, $p = count($_POST['product']); $i < $p; ++$i)
{
$pid = $_POST['pid'][$i]);
$product = $_POST['product'][$i]);
$name = $_POST['userfile_name'][$i]);
$price = $_POST['price'][$i]);
$qty = $_POST['qty'][$i]);
$amt = $_POST['amt'][$i]);
$total = $_POST['total'];
}
$stmt->execute();
}
?>
这些将为您正确转义查询语句。 当我们所有人都不了解每个攻击媒介时,这是一个巨大的帮助,而专家们已经提出了有关如何解决最常见的攻击的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.