如何将数组发布到php

时间:2011-02-09 17:25:36

标签: php arrays post

解决了,查看我的最终答案帖子,了解对我有用的详细信息

*原始问题和编辑如下:

寻找一种通过发布数组设置多个sql项的方法。

我很确定我使用的是php5。

这里是我如何设置一个,但我不太了解PHP中的数组

mysql_query
("
    UPDATE comics 
    SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
    WHERE id = $id
") or die(Err(mysql_error()));

我想从flash发布一个idArray和一个newPageNumberArray

其中id为idArray [0]的漫画会将其pageNumber设置为newPageNumberArray [0],依此类推。

阵列的长度彼此相等。但可以是任意长度,具体取决于管理工具中更改的页码数量。

现在我可以为每个项目单独生成一个php请求,但我认为在一个php请求中发送它们会更加清晰。

*的修改

感谢帕特里克,我感觉更接近......但我仍然没有做得很好。

flash发送这些数组

idArr:34,24

pageNumArr:1,2

php中的

我有这个功能

function changePageNumbers($con, $idArr, $pageNumArr){

    selectDataBase($con);
    echo '&startForLoop=true';
    for($i=0;$i<count($idArr);$i++)
    {

        $thisPageNum = mysql_real_escape_string($pageNumArr[$i]);
        $thisId = mysql_real_escape_string($idArr[$i]);

        echo '&thisPageNum='.$thisPageNum;
        echo '&thisId='.$thisId;

        mysql_query
        ("
        UPDATE comics 
        SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>')
        WHERE `id` = ".$thisId."
        LIMIT 1;
        ") or die(Err(mysql_error()));

        echo '&querySent=true';
    }
    echo '&endForLoop=true';
}

它返回此

thisPageNum = 2及endForLoop =真安培; thisId = 2及startForLoop =真安培; querySent =真

似乎无序(也许这是正常的?)

更重要的是,当数组有2时,它只列出thisPageNum和thisId一次。

更重要的是它列出了thisId = 2.发送的id是34和24

*的 EDIT2 当我在html中运行它并在php中手动设置数组

时,它可以正常工作
$idArr = array(34,24);
$pageNumArr = array(2, 1);

这意味着从闪存传递我的数组通过$ _POST,在某种程度上失败了。我确定它们是flash中构造良好的数组。也许在他们通过$ _POST的路上,他们变成了逗号分隔值。

运行更多测试。

3 个答案:

答案 0 :(得分:2)

将数据设置为如下数组:

$uploaded_data = array(
    0 => array(
        'xml' => '..blah...blah',
        'id' => 231
    ),
    1 => array(
        'xml' => 'bleh...bleh..',
        'id' => 232
    )
);

修改 从$ _POST更新的数组数据 这是数据从普通表格POST看起来的方式

$_POST = array(
    'xml'   => array(
        '..blah...blah',
        'bleh...bleh..'
    ),
    'id'    => array(
        231,
        232
    ),
'submit' => 'Submit'
);

并遍历数组并对每个内部数组执行插入

foreach($uploaded_data as $data)
{
    $update_query = sprintf("UPDATE comics 
        SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
        WHERE id = '%s'
        LIMIT 1;",
        mysql_real_escape_string($data['xml']),
        mysql_real_escape_string($data['id'])
    );
    $update_result = mysql_query($update_query);
}

编辑2 通过$ _POST数据更新循环

for($i=0;$i<count($_POST['xml']);$i++)
{
    if(!array_key_exists($i, $_POST['id']))
    {
        // if there is not a value for the id's at this count, break
        $i = count($_POST['xml']);
        continue;
    }
    $update_query = sprintf("UPDATE comics 
    SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
    WHERE id = '%s'
    LIMIT 1;",
    mysql_real_escape_string($_POST['xml'][$i]),
    mysql_real_escape_string($_POST['id'][$i])
    );
    $update_result = mysql_query($update_query);
}

重要: 始终对UPDATE个查询设置限制。可能会发生错误并意外更新整个数据库而不是单行。

重要2 确保始终清理数据库输入(mysql_real_escape_string()

答案 1 :(得分:1)

您可以在一个请求中发送它们,并在PHP中创建一个循环来逐个更新它们。据我所知,在一个声明中无法做到这一点,或者你将不得不创建复杂的案例结构。这可能会带来一些更好的数据库性能,但对于那些SQL经验不足的人来说,这是一项很多工作,所以我应该用PHP来做。

不要忘记开始交易。 :)

循环:

foreach($_POST['variableofyourchoice'] as $id)
{
  // Execute the query using $id
}

答案 2 :(得分:0)

最终答案

我能正确使用Post的唯一方法是使用CSV和PHP explode();正如 GolezTrol 建议

Patrick 演示了在PHP中逐步执行数组的过程。

所以这是所提供的帮助的组合:

经过一些测试后我的最终代码。

运行无闪光的测试

$_POST["idArr"] = "34,24";
$_POST["pageNumArr"] = "2,1";

将CSV(逗号分隔值)转换为数组

$idArr = explode(",", $_POST["idArr"]);
$pageNumArr = explode(",", $_POST["pageNumArr"]);

单步执行数组并发送sql查询

for($i=0;$i<count($idArr);$i++)
{

    $thisPageNum = mysql_real_escape_string($pageNumArr[$i]);
    $thisId = mysql_real_escape_string($idArr[$i]);

    mysql_query
    ("
    UPDATE comics 
    SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>')
    WHERE `id` = ".$thisId."
    LIMIT 1;
    ") or die(Err(mysql_error()));
}

“正确答案”......转到GolezTrol

因为只有一个,我认为GolezTrol回答了标题中所述的问题,而帕特里克帮助解决了我之后会立即遇到的根本问题。

感谢您的帮助和耐心。