0

我允许用户使用表单中的文本框创建最多十个类别。为此,我有十个格式为 name = cat[] 的文本框。当他们第一次输入类别时——不管有多少,最多十个,在接收端,我只是收集类别数组并使用插入语句将它们保存到类别表中。到现在为止还挺好。

但是,现在我想让他们更改他们已经设置的类别或添加最多十个额外的类别。他们已经设置的类别有 id。因此,我将 id 与类别名称一起回显到表单中。我的问题是我现在如何收集姓名和身份证?需要插入新的并且可能需要在表中更新现有的?出于某种原因,我完全不知道如何做到这一点。这是我到目前为止所拥有的>

餐桌猫

id | catname | userid

表格页面:

//retrieve existing cats if any...also get catids

echo '<form action = storecats.php method=post>';
$i=1;
//Get all existing cats
while($row = mysql_fetch_array($res))
{
    $catname = $row['catname'];
    $catid = $row['id'];
    echo '<input type = "text name="cat[]" value="'.$catname.'">Cat 1';
    echo '<input type="hidden" name="id[]" value = "'.$catid.'">';
    $i = $i+1;
}
//empty boxes up to ten.
while($i <= 10){
    echo '<input type="text" size=18 name="cat[]" value=""> Cat '.$i.'<br>';
    $i = $i+1;
}//end appending of blank categories
echo '<input type="submit" name="submit" value="submit"></form>';

在接收端,我可以收集 cat 和 id 的数组。

$idarray = $_POST['id']; //there will be as many elements as there were ids
$catarray = $_POST['cat'];  //there will be ten elements in array

在有 id 的地方,我想执行更新,而在没有 id 的地方我想插入,除非该值为空白。

我的问题是我不知道如何链接不同数组中接收到的 id 和 cat 名称。请注意,总会有十个猫名,但只会有与该用户之前表中一样多的 id。

4

3 回答 3

3

您可以在 HTML 端使用 2 个数组:

    $x=0;
    while ($row = mysql_fetch_array($res))
    {
        echo '<input type="text" name="updateCat['.$row["id"].']" value="'.$row["catname"].'"> Cat Name';
        $x++;
    }

    // new ones
    for(;$x<10;$x++)
    {
        echo '<input type="text" name="newCat[]">';
    }

在php方面:

    // update old categories
    foreach ($_POST["updateCat"] as $key => $value)
    {
        mysql_update ("UPDATE table SET name = $value WHERE id = $key");
    }

    // insert 
    foreach ($_POST["newCat"] as $value)
    {
        mysql_update ("INSERT INTO table {...}");
    }

您还检查了插入新类别时不超过 10 个类别。

于 2012-07-16T13:42:30.767 回答
0

命名用于现有类别的cat_update[]输入并命名用于新类别的输入cat_insert[]。当您使用 PHP 处理表单数据时,您有三个数组:

$ids = $_POST['id'];                // Ids for update
$update = $_POST['cat_update'];     // Values for UPDATE
$insert = $_POST['cat_insert'];     // Values for INSERT

for($i = 0; $i < count($ids); $i++) {
    //Execute 'UPDATE `table` SET `value` = $update[$i] WHERE `id` = $ids[$i]
}

for($i = 0; $i < count($insert); $i++) {
    //Execute 'INSERT INTO `table` (`value`) VALUES ($insert[$i])
}
于 2012-07-16T13:53:45.100 回答
0

我不确定我是否明白,但您可以简单地为两组类别赋予不同的名称。

在您的第二个循环中,放置 'name = "new_cat[]"' 将允许您区分修改后的类别(' $_POST[cat] ')和要在接收存储猫中插入的新类别(' $_POST[new_cat] ').php代码。

于 2012-07-16T13:59:58.903 回答