最初にこのコードのセキュリティ問題を無視します。後でその部分に戻ることができます。まず、私が正しい方法で見ている問題に対処しましょう。
最初のレコードは空で、2番目のレコードには値がありますか?なぜMySQLデータベースにFirstRecordEmpty Entry.iが表示されているのか、その背後にある理由がわかりません。
$count=1;
$count++;
ここで何が起こっているのですか?$count
に等しい設定をしてから、2行目で1
もすぐに1ずつ増やします。2
どうしてそんなことをするのか?そもそも2つに設定してみませんか?
きっと、最初のレコードが空であるという問題は、これらのコード行から始まります。
$total = $_POST['total'];
これはクエリで1回だけ使用されるため、メモリを浪費しているだけで、別の変数に割り当てる必要があります。
あなたのコードの最初の例から、これはあなたがそれから得ることができる最高の実行であると私は言うでしょう(ここでも、セキュリティについて話していません)。
<?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");
}
}
?>
2番目のコードセットを見ると、これはおそらくそれを使ってできる最善の方法でしょう。
<?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();
}
?>
これらは、クエリステートメントを正しくエスケープする処理を行います。私たち全員がすべての攻撃ベクトルを知ることができず、専門家が最も一般的なものを修正する方法に関するコードをすでに考え出している場合、大いに役立ちます。