在PHP问题中使用$ _POST

Sho*_*box 0 php paypal while-loop paypal-ipn

我正在尝试通过PHP中的$ _POST获取一些信息,基本上我正在使用它:

$item_name1 = $_POST['item_name1']; 
$item_name2 = $_POST['item_name2']; 
$item_name3 = $_POST['item_name3']; 
$item_name4 = $_POST['item_name4'];
Run Code Online (Sandbox Code Playgroud)

我想用mysql在表字段中插入每个项目名称,所以我试图尝试使用while php循环,所以我没有很多$ item_name变量:

$number_of_items = $_POST['num_cart_items']; 

$i=1;
while($i<=$number_of_items)
  {  
    $test = $_POST['item_name'. $i'']; 
    $i++;
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码失败了,解释起来相当棘手,但是代码应该找到所有的item_name $ _POST,并将其作为mysql插入的变量.

$ _POST ['num_cart_items']是项目总数.

该代码适用于正在进行购物车的PayPal IPN监听器.

帮助赞赏.

编辑:

我进一步了解了我刚才意识到的文件:

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
Run Code Online (Sandbox Code Playgroud)

如何插入$ _POST ['item_name1'],$ _POST ['item_name2']作为mysql插入的变量?

Mar*_*rov 5

您的循环有效地覆盖$test每次迭代的变量:

$test = $_POST['item_name'. $i''];
Run Code Online (Sandbox Code Playgroud)

如果要将它们放在数组中,请更改为$test[].它还包含所提到的解析错误brian_d.

拥有num_cart_items与表单一起发送的变量听起来有点可怕.你是用JavaScript设置的吗?用户可以操纵它.你不应该依赖它.我相信你需要的是将表格作为:

<input type="text" name="item_name[]" />
Run Code Online (Sandbox Code Playgroud)

请注意名称末尾的方括号.这将在数​​组中创建一个数组$_POST:$_POST['item_name']将包含所有项的名称.

那么,你的数据库是如何构建的?我想你想在一个查询中插入它们:

INSERT INTO ORDERS VALUES (item_name_1, ...), (item_name_2, ...)
Run Code Online (Sandbox Code Playgroud)

如果是这样,你可以从数组中创建一个字符串:

$query = 'INSERT INTO ORDERS VALUES ';
foreach($_POST['item_name'] as $item_name){
  $query .= '('.stripslashes($item_name). /*put other column values*/ '),';
}
$query = rtrim($query, ',');
Run Code Online (Sandbox Code Playgroud)

请注意,使用addslashes不足以保护您免受SQL注入.