在表中输入多个变量,分配给每个适当的记录

时间:2008-10-08 19:35:09

标签: php mysql

我将数据显示在一个html表中,带有一个包含场地列表的下拉框。每位志愿者都将被分配一个场地。我设想能够通过HTML表格并为每个志愿者分配一个场地。下拉框包含可以分配给它们的所有可能场所。

<select>
<option value="1">Setup</option>
<option value="2">Check in</option>
etc...
</select>

然后,一旦我完成了每个志愿者的分配,我想点击提交,它将为每个志愿者分配适当的值。

我将如何做到这一点,我知道如何做到这一点,但一次只能做一次。

4 个答案:

答案 0 :(得分:3)

更改每个选择的名称,其方式包括志愿者ID:

<select name="venues[1]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[2]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[3]">
<option value="1">Setup</option>
etc...
</select>

提交后,将在$ _POST命名的场地中设置一个表格,其中包含索引:1,2,3(志愿者ID),并为每位志愿者提供选定值。

现在,您可以迭代$_POST['venues']数组并保存每个值:

foreach ($_POST['venues'] as $volunteer_id => $venue) {
  save_venue_for_volunteer($volunteer_id, $venue);
}

答案 1 :(得分:1)

这是一个非常粗略的例子,说明如何处理这个问题。注意:您的MySQL表(假设MySQL)必须是支持事务的类型(InnoDB,MyISAM不支持)。

<?php

if ( isset( $_POST['venuChoice'] ) )
{
    //  Create a transaction
    mysql_query( 'BEGIN' );

    $failure = false;

    //  Loop over the selections
    foreach ( $_POST['venuChoice'] as $employeeId => $venueId )
    {
        $sql = sprintf(
                'UPDATE table SET columns=%d WHERE id=%d'
            ,   intval( mysql_real_escape_string( $venueId ) )
            ,   intval( mysql_real_escape_string( $employeeId ) )
        );
        if ( ! @mysql_query( $sql ) )
        {
            $failure = true;
            break;
        }
    }

    //  Close out the transaction
    if ( $failure )
    {
        mysql_query( 'ROLLBACK' );
        //  Display and error or something
    } else {
        mysql_query( 'COMMIT' );
    //  Success!
    }
}

?>

<form>
    <select name="venueChoice[1]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>
    <select name="venueChoice[2]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>
    <select name="venueChoice[3]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>

</form>

您还可以修改此项以跟踪每个员工当前的场地选择,将其与POST数据进行比较,然后仅针对实际更改的那些执行UPDATE查询。

答案 2 :(得分:0)

我想不出任何办法。您可以将多个SQL语句放入1个MySQL查询中:

UPDATE volunteer SET venue = 1 WHERE id = 2;
UPDATE volunteer SET venue = 2 WHERE id = 3;
...

我希望有一种方法,但我认为每个查询中的位置会有所不同,以便将其合并为一个。

答案 3 :(得分:0)

foreach ($_POST['venues'] as $volunteer_id => $venue) {
    save_venue_for_volunteer($volunteer_id, $venue);
}

function save_venue_for_volunteer($volunteer_id, $venue) {
    $result = mysql_query("UPDATE volunteers_2009 SET venue_id='$venue' WHERE id='$volunteer_id'") 
    or die(mysql_error());
}

它将保存到的表格是志愿者_2009,这应该是怎么回事?