在PHP问题中使用$\ POST

在PHP问题中使用$\ POST,php,paypal,while-loop,paypal-ipn,Php,Paypal,While Loop,Paypal Ipn,我正在尝试通过PHP中的$\u POST获取一些信息,基本上目前我正在使用: $item_name1 = $_POST['item_name1']; $item_name2 = $_POST['item_name2']; $item_name3 = $_POST['item_name3']; $item_name4 = $_POST['item_name4']; 我想用mysql在一个表字段中插入每个项目名称,因此我尝试使用while php循环,这样我就没有太多的$item\u nam

我正在尝试通过PHP中的$\u POST获取一些信息,基本上目前我正在使用:

$item_name1 = $_POST['item_name1']; 
$item_name2 = $_POST['item_name2']; 
$item_name3 = $_POST['item_name3']; 
$item_name4 = $_POST['item_name4'];
我想用mysql在一个表字段中插入每个项目名称,因此我尝试使用while php循环,这样我就没有太多的$item\u name变量:

$number_of_items = $_POST['num_cart_items']; 

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

如何插入$\u POST['item\u name1']、$\u POST['item\u name2']作为mysql插入的变量?

$test=$\u POST['item\u name'.$i']是一个语法错误。
移除末端
,使其成为:


$test=$\u POST['item\u name.$i]

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

$test = $_POST['item_name'. $i''];
如果要将它们放入数组中,请更改为
$test[]
。它还包含
brian\u d
提到的解析错误

有一个随表单发送的变量
num\u cart\u items
,听起来有点吓人。你是用JavaScript设置的吗?用户可以操纵它。你不应该依赖它。我相信您需要的是将表单设为:

<input type="text" name="item_name[]" />
如果是,则可以从数组中生成字符串:

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

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

“上述代码失败”:您能否详细说明失败的行为是什么以及是否收到任何错误消息?不确定如何使用响应框中的代码,我在问题中进行了编辑above@MattStrange我不能完全肯定你在问什么。在foreach循环之外,您可以创建一个数组
$clean_values=array()
,然后在循环中
$clean_values[$key]=urlencode(stripslashes($value))
然后在使用SQL时,使用
$clean\u值
array@MattStrange和`(tilde/back quote key)在注释中包含文本格式代码我希望对post数组部分加1,但对于数据库部分,最好使用PDO和参数化查询,因为这样更安全。有许多可能的改进。我只是回答一个特别的问题。准备好的语句也比以这种方式创建查询字符串要好得多……如果要在数据库中插入内容,请在从数据库检索内容后使用
addslashes()
,以及
stripslashes()
。最好的解决方案是
mysql\u real\u escape\u string()
@giorgio I ment
addslashes
:)但你完全正确。1mysql_real_escape_string()`如果不使用准备好的statemenst或存储过程,则应使用
INSERT INTO ORDERS VALUES (item_name_1, ...), (item_name_2, ...)
$query = 'INSERT INTO ORDERS VALUES ';
foreach($_POST['item_name'] as $item_name){
  $query .= '('.stripslashes($item_name). /*put other column values*/ '),';
}
$query = rtrim($query, ',');