循环发布数据并更新相应的数据库记录

时间:2011-08-17 13:50:03

标签: php

我试图遍历我通过jQuery发布的一些数据。这是我的PHP脚本:

<?php
include '../dbconnect.php';
$map = $_POST['map'];
$position = 0;
foreach ($map as $ID)
{
  if ($_POST['type'] == "sub") {
    $query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';";
  } else {
    $query = "UPDATE Categories SET `Position` = '$position' WHERE CategoryID = '$ID';";
  }

  $result = mysql_query($query) or die(mysql_error());
  $position ++;
}
?>

并且收到的数据为$ map以这种格式发送:

  

ID [] = 27和ID [] = 28和ID [] = 33和ID [] = 19

显然我的foreach是错误的,但我如何才能获得它以保留$map的顺序,每个数值变为变量$ID

5 个答案:

答案 0 :(得分:2)

好的,因为你的$ map包含ID[]=27&ID[]=28&ID[]=33&ID[]=19字符串值。做这样的事情

$str = str_replace($map, "ID[]=","");
$mArr = explode("&", $str);
foreach($mArr as $key) {
   //now your $key will have 27, 28, 33, 19 as the loop progresses
}

<子> P.S。基于OP的$ map注释,其中包含

的字符串输出

答案 1 :(得分:0)

我不完全确定,但这是你的意思吗?如果我正确理解你的问题,它就有效。

<?php
include '../dbconnect.php';
$position = 0;

$pattern = '/ID\\[\\]=(\d+)&*/';
$subject = $_POST['map'];

 preg_match_all($pattern, $subject, $matches);

foreach ($matches as $k => $ID) {
  // etc

测试用例

在单独的脚本中尝试此测试。如果您使用此脚本,则$ matches [1]的输出将提供给foreach循环。这会检索你想要的吗?

<?php
$pattern = '/ID\\[\\]=(\d+)&*/';
$subject = 'ID[]=27&ID[]=28&ID[]=33&ID[]=19';
preg_match_all($pattern, $subject, $matches);
echo '<pre>'.print_r($matches,1).'</pre>';
?>

输出:

Array
(
[0] => Array
    (
        [0] => ID[]=27&
        [1] => ID[]=28&
        [2] => ID[]=33&
        [3] => ID[]=19
    )

[1] => Array
    (
        [0] => 27
        [1] => 28
        [2] => 33
        [3] => 19
    )

)

答案 2 :(得分:0)

您能告诉我们print_r($map);显示的内容吗?

如果它只是您所描述格式的字符串,我建议将地图格式更改为更容易循环的内容,如json。例如

{"map":[27,28,33,19]}

然后你可以使用

<?php
$mapObject = json_decode($_POST['map']);

$mapArray = $mapObject->map;
foreach($mapArray as $id)
{
    echo $id;
}
?>

答案 3 :(得分:0)

你可以在没有地图的情况下发布它,只需

$.ajax({ type: 'POST', url: 'updatecategoryposition.php', data: map + "&type=sub" });

我假设地图包含'ID [] = 27&amp; ID [] = 28&amp; ID [] = 33&amp; ID [] = 19'

作为替代方案,你可以用不同的格式保存地图,这样你最终得到的地图只是一个ID列表($ map =“27,28,33,19”),使用原始的jquery帖子,最后使用

$map = explode(',' $_POST['map']);

答案 4 :(得分:0)

感谢您的尝试,但最终我无法获得任何建议,但我确实找到了解决方案:

更新类别位置:

<?php
include '../dbconnect.php';
foreach ($_POST['ID'] as $position => $ID){
$query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';";
$result = mysql_query($query) or die(mysql_error());
}
?>

和新的Jquery帖子请求由Starx提供(告诉我删除变量名称),因此我可以访问上面的查询字符串:

$.ajax({
              type: 'POST',
              url: 'updatecategoryposition.php',
              data: map
            });